資料量大約數十萬筆,再進行例清單作分頁時
主機的負載常常百分之百(同時使用人數約四五十人存取)
查了一下發現是ADO中的PageCount及 RecordCount 二個屬性非常消耗系統資源
使用COUNT作第二次查詢取出資料量還比使用 RecordCount 來的快速
真是怪怪.......人性化的結果就是要多付出系統資源
作分頁的問題已經解決了,至少Loading不會再那麼高,降低好幾個百分比
再追蹤下去
由於MSSQL回傳資料只要符合條件的資料,全部都會一口氣回傳
然後再經由ADO的 AbsolutePage 屬性來負責欲顯示那一頁
問題就出在這,雖然在頁面上只出現二十筆資料
可是MSSQL可是回傳所有符合條件的資料
這才是伺服器Loading過重的元兇.....
因為MSSQL不像MySQL可以Limit 回傳的資料筆數
因此若查詢中有使用自訂 Function
是每一筆回傳的資料都會經過自訂 Function 的處理
而非是 AbsolutePage 指標在那一頁就只處理那一頁的資料(這個問題困擾了一整天..Orz)
問題找出來了
接下來就是要解決問題的時候
最佳的解決方式就是模擬MySQL limit的作法
限制回傳資料的筆數
要怎實作?
方法很多,可以作多次查詢或者寫一個預存程序解決
我選擇使用預存解決
伺服器Loaading從原本的90%以上降至30%左右(平均值)
沒有留言:
張貼留言