SQL Server 的性能突然下降
我遇到了 SQL Server 2008 R2 實例的問題。上週演出突然中斷。所有插入都非常非常慢。它需要的時間比以前長 4-5 倍。在硬體上我們沒有發現任何缺陷。一個月前我們遇到了同樣的問題,但一周後問題很快就消失了。
我不是這些方面的專家,但我注意到實例上所有數據庫的性能都很差。CPU 和磁碟沒有達到極限,所以它不應該是硬體性能問題。
我將使用此查詢查看記憶體頁數:
select count(*)as cached_pages_count, obj.name as objectname, ind.name as indexname, obj.index_id as indexid from sys.dm_os_buffer_descriptors as bd inner join ( select object_id as objectid, object_name(object_id) as name, index_id,allocation_unit_id from sys.allocation_units as au inner join sys.partitions as p on au.container_id = p.hobt_id and (au.type = 1 or au.type = 3) union all select object_id as objectid, object_name(object_id) as name, index_id,allocation_unit_id from sys.allocation_units as au inner join sys.partitions as p on au.container_id = p.partition_id and au.type = 2 ) as obj on bd.allocation_unit_id = obj.allocation_unit_id left outer join sys.indexes ind on obj.objectid = ind.object_id and obj.index_id = ind.index_id where bd.database_id = db_id() and bd.page_type in ('data_page', 'index_page') group by obj.name, ind.name, obj.index_id order by cached_pages_count desc
在這裡我發現了非常高的價值,但我不知道它是否不好。在不同的表和索引上,計數從 201.236 到 1。這可能是性能不佳的問題嗎?
我注意到的另一件事是在插入數據時寫入的日誌數量非常多。有了
SELECT INTO ...
它要快得多。誰能給我一個提示,或者可以告訴我這個 cached_pages_count 到底是什麼意思?
編輯:
我還在插入期間提到了高 waititme(最多 300.000 毫秒) Waittype is
CXPACKET
和 wait ressource ise_waitPortOpen
ande_waitPipeNewRow
。高值出現在e_waitPortOpen
。親切的問候托馬斯
聽起來你的統計資訊已經過時了,然後最終 SQL 的自動更新統計資訊將啟動並更新統計資訊,正在生成正確的執行計劃,然後一切又開始執行得更快了。
如果您為 SQL Server 2008 R2 安裝了 Service Pack 1,那麼您可以打開跟踪標誌 2371,這會將使用的算法從靜態 20%+500 更改為根據表中的行數而變化的值。
如果您沒有安裝 service pack 1,那麼我建議您設置一個每週或每晚為您的所有表執行 UPDATE STATISTICS 的作業。
我們遇到了 AMD 晶片組的問題,它們會進入省電模式,將時鐘速度降低 50%。值得一看。