Sql-Server-2008-R2

SQL Server 的性能突然下降

  • May 14, 2014

我遇到了 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_pa​​ges_count 到底是什麼意思?

編輯:

我還在插入期間提到了高 waititme(最多 300.000 毫秒) Waittype isCXPACKET和 wait ressource is e_waitPortOpenand e_waitPipeNewRow。高值出現在e_waitPortOpen

親切的問候托馬斯

聽起來你的統計資訊已經過時了,然後最終 SQL 的自動更新統計資訊將啟動並更新統計資訊,正在生成正確的執行計劃,然後一切又開始執行得更快了。

如果您為 SQL Server 2008 R2 安裝了 Service Pack 1,那麼您可以打開跟踪標誌 2371,這會將使用的算法從靜態 20%+500 更改為根據表中的行數而變化的值。

如果您沒有安裝 service pack 1,那麼我建議您設置一個每週或每晚為您的所有表執行 UPDATE STATISTICS 的作業。

我們遇到了 AMD 晶片組的問題,它們會進入省電模式,將時鐘速度降低 50%。值得一看。

引用自:https://dba.stackexchange.com/questions/61587