none
是程式或是環境問題 RRS feed

  • 問題

  • 最近做了一個活動的案子,裡面有遊戲、轉寄、和部落格串聯,客戶那邊只有給一台電腦(OS 是 Win2003),所以我只好把程式(Asp.net2.0)和資料庫(MS SQL 2005)用在同一台,這台電腦是全新的目前也只有給這個活動在用,硬體環境不確定(不會太差),頻寬是1M,網站每天的瀏覽人數大約在5千到一萬之間,我的問題是,在後台要顯示參加者的資料時,速度慢到非常誇張,所以想請大大幫我看看是我程式的問題亦或是客戶頻寬太小的問題,程式撈資料的寫法都是一樣的(三層式),SQL語法也只有純綷的Select * From XXX,頁面也只有顯示資料,並沒有什麼複雜的程式,大致的架構是這樣:

    -------------------------------

    TestList.aspx.vb   

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not IsPostBack Then
                GVTestBind()
            End If
     End Sub

     

    Private Sub GVTestBind()
            Dim PDSTest As New PagedDataSource

            PDSTest.AllowPaging = True
            PDSTest.PageSize = 20

            PDSTest.DataSource = TestBiz.GetTest()

            UcPage1.PageSize = 20   'UcPage1是UserControl (讓使用者有上一頁、下一頁、直接到某一頁的功能)
            UcPage1.SetDataCount(PDSTest.DataSourceCount)

            PDSTest.CurrentPageIndex = UcPage1.CurrentPage

            GVTest.DataSource = PDSTest
            GVTest.DataBind()

    End Sub

    ----------------------------------

    專案Test.Business

    TestBiz.vb

        Public Shared Function GetTest() As IList(Of TestInfo)

            Return myDB.GetTest()

        End Function

    --------------------------------------

    專案Test.DataAccess

    TestDB.vb

        Public Function GetTest() As IList(Of TestInfo)

            Dim db As Database = DatabaseFactory.CreateDatabase("ConnString")

            Dim sqlStatement As New StringBuilder
            Dim strSql As String = ""

            strSql = " SELECT * FROM Test Where TestState<>0 "

            strSql += " Order By ID Desc "

            sqlStatement.Append(strSql)

            Dim dbCommand As DbCommand = db.GetSqlStringCommand(sqlStatement.ToString())
            Return GetList(db, dbCommand)

        End Function

    ----------------------------------

     

    程式撈出遊戲參加者資料(目前2萬多筆)的時間大約40分鐘以上,撈出轉寄者資料(目前1千多筆)就滿快的,撈出部落客資料(目前5百多筆)大約一分多鐘(很奇怪,比撈出轉寄者還慢),情況大致是這樣,請各位大大幫我看看,謝謝!


    2009年1月26日 上午 07:02

解答

  • 這個要從資料庫先檢查起,看一個查詢會花多少時間,然後就是調整索引這些,把查詢的效能強化以後,如果還是慢的話,那就可能要考慮是網路頻寬或是程式本身的問題,不過還是要經過效能資料的收集分析才會知道可能的確切原因。

     

    SELECT * FROM ... 這個指令在一個欄位很多的表上使用容易造成效能問題,你也沒有使用分頁查詢,這樣就算只顯示一頁五十筆,也必須要撈回所有符合條件的資料,這也是效能問題之一。

     

    2009年1月26日 上午 07:58
    版主

  • 程式撈出遊戲參加者資料(目前2萬多筆)的時間大約40分鐘以上,撈出轉寄者資料(目前1千多筆)就滿快的,撈出部落客資料(目前5百多筆)大約一分多鐘(很奇怪,比撈出轉寄者還慢),情況大致是這樣,請各位大大幫我看看,謝謝!




    不要說 2 萬筆; 我自己的 SQL Server 上有一百多萬筆資料, 若使用 GridView 或 ListView 在做分頁查詢, 也幾乎都可以立即回應, 難得察覺到延遲。我覺得你或許可以另外做個測試網頁, 試試用 GridView 搭配簡單的 SqlDataSource, 看看效能如何, 這樣就可以比較出來是否程式寫法的問題, 或是資料庫設計的問題。如果仍然不行, T-SQL 另外有分頁查詢的語法可以再試試看。

     


    ASP.NET 2Share -- http://phone.idv.tw/cs2/
    2009年1月29日 上午 07:07

所有回覆

  • 這個要從資料庫先檢查起,看一個查詢會花多少時間,然後就是調整索引這些,把查詢的效能強化以後,如果還是慢的話,那就可能要考慮是網路頻寬或是程式本身的問題,不過還是要經過效能資料的收集分析才會知道可能的確切原因。

     

    SELECT * FROM ... 這個指令在一個欄位很多的表上使用容易造成效能問題,你也沒有使用分頁查詢,這樣就算只顯示一頁五十筆,也必須要撈回所有符合條件的資料,這也是效能問題之一。

     

    2009年1月26日 上午 07:58
    版主

  • 程式撈出遊戲參加者資料(目前2萬多筆)的時間大約40分鐘以上,撈出轉寄者資料(目前1千多筆)就滿快的,撈出部落客資料(目前5百多筆)大約一分多鐘(很奇怪,比撈出轉寄者還慢),情況大致是這樣,請各位大大幫我看看,謝謝!




    不要說 2 萬筆; 我自己的 SQL Server 上有一百多萬筆資料, 若使用 GridView 或 ListView 在做分頁查詢, 也幾乎都可以立即回應, 難得察覺到延遲。我覺得你或許可以另外做個測試網頁, 試試用 GridView 搭配簡單的 SqlDataSource, 看看效能如何, 這樣就可以比較出來是否程式寫法的問題, 或是資料庫設計的問題。如果仍然不行, T-SQL 另外有分頁查詢的語法可以再試試看。

     


    ASP.NET 2Share -- http://phone.idv.tw/cs2/
    2009年1月29日 上午 07:07