資料庫效能調教 — CPU Pressure

資料庫效能調教 — CPU Pressure

ID-10079214

如何透過 DMV (Dynamic Management View)了解 CPU 效能瓶頸?

SQL Server 對於歷史所查詢過或是執行過的指令,

SQL Server 都會將該相關的統計資訊儲存於 DMV

這次要介紹的 DMV 為 “sys.dm_os_wait_stats”

該 DMV (Dynamic Management View)

儲存自上次 SQL Server service 啟動以來所有累積的歷史資訊

換句話說,當SQL Server reboot or restart services 時,該資訊就會被清空

另外,也可以用下列指令來清空資訊內容

DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR);

特別是當 index 重建或是新增的時候,

我們可以清空該統計資訊內容來重新了解 Index 查詢的效率

 

CPU Pressure

DMV (Dynamic Management View)可以透過 Signal wait time 來知道CPU 是否為效能頻景.

讓我們先介紹什麼是 signal wait time ?

Total Response (wait_time_ms) = Signal Wait time (signal_wait_time_ms) + Resource Wait time

Signal Wait time 為等待 CPU 執行的時間,由 runnable 狀態等待進入 running

因此,如果 signal wait time 很長的話,也表示 CPU 的效能瓶頸

可以用 Signal Wait time  / Total Response time 的比例來得知

是否 signal wait time 佔wait time 很大的比例,Query 如下:

 

CPU_WaitTime

 

由於該 DMV 是”累積”性的資訊,因此可以每隔一段時間就觀察一次

每隔一段時間 reset 一次,再進行觀察

DBCC SQLPERF (‘sys.dm_os_wait_stats’, CLEAR);

 

另外,針對 CPU 相關的 performance counters

 

  • Processor/ %Privileged Time:

表示 CPU 花在處理 windows kernel 的時間,最常見的,例如 Disk I/O,有可能為大量的 page in/out 或是 Table Scan 造成的 Disk I/O 或是 transaction log 的寫入與讀取等。

 

  • Process (sqlservr.exe)/ %Processor Time

SQL Server process 所花的 CPU 時間

 

當確認為 CPU 效能瓶頸時,

接著可以運用 Query 相關的 DMV 將造成該 CPU 瓶頸的 query 找出來,

其中會用到的 DMV 有:

  • sys.dm_exec_query_stats  : Query 相關的統計資訊
  • sys.dm_exec_sql_text : Query 的指令,例如 SELECT…….
  • sys.dm_exec_query_plan: Query Execution plan

 

總結

1. 這篇文章主要說明如何運用 DMV “sys.dm_os_wait_stats” 來找出潛在的 CPU 效能瓶頸

CPU 的效能瓶頸取決於 Signal Wait (由 Runnable 狀態等待進入 Running)

Total Response = Signal Wait  +   Resource Wait

因此我們可以藉由 Signal Wait / Total Response 的比例

定期來觀察是否Total Response time 中,Signal Wait 的比例

如果 Signal Wait 很大,表示有潛在的 CPU 效能瓶頸

 

2. 因此,進一步透過 performance counters 輔助,提供額外的資訊

  • Processor/ %Privileged Time
  • Process (sqlservr.exe)/ %Processor Time

 

3. 確認 CPU 效能瓶頸時,我們進一步找出造成該瓶頸的

SQL 指令 (sys.dm_exec_sql_text)

SQL Execution plan (sys.dm_exec_query_plan)

SQL 執行的統計資訊 (sys.dm_exec_query_stats)

同樣的方法與流程,也可以找出其他資源的效能瓶頸

Leave a Reply

Your email address will not be published. Required fields are marked *