資料庫效能調教 — Blocked Query

資料庫效能調教 Wait statistics

Response time = service time + wait time

ID-100131748

只要可以分析整體的回應時間 Response Time 是在等待哪些特定資源

例如:磁碟、記憶體、網路等,

這樣就可以幫助我們做進一步的分析與效能調教

使用SQL Server 所提供的 DMV (Dynamic management View) Wait Statistics 資訊前,

有些關於 Wait DMV須要先釐清

 

1. DMV 的資訊儲存於記憶體中,每次SQL Server restart時都會被重新清空

2. DMV 所儲存的資訊為累積的資訊。每次 SQL query 執行時,SQL Server 就會將相關的執行統計資訊存入記憶體的DMV中。

3. 有需多是系統背景執行的 Wait ,在我們作效能分析時可以忽略,例如

 

LazyWriter, CheckPoint, backup 等

4. Reset 特定 DMV statistics

例如,清除”sys.dm_os_wait_stats” 的資料

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

 

現在SQL Server 在忙什麼?

透過 “sys.dm_os_waiting_tasks”可以告訴我們目前,現在SQL server 在忙什麼的即時資訊

但是要如何進一步知道,該waiting tasks 是在執行什麼SQL query 呢?

因此我們就必須要 Join query 其他 DMV

  • sys.dm_exec_requests — 記錄目前將要執行的 query request,也就是潛在會被 blocked 的 query
  • sys.dm_exec_connections — 記錄目前已經連線執行中的 query,也就是會 blocking 其他 query
  • sys.dm_exec_sql_text — 記錄確切 SQL 的指令

 

Join DMV

1. 透過”Session ID” 可將下列 DMV JOIN

  • sys.dm_os_waiting_tasks <—>
  • sys.dm_exec_requests (blocked) <—->
  • sys.dm_exec.connections (blocking)

2. 透過 “SQL_Handle”將下列 DMV Join, 可進一步查詢確切 SQL 指令

  • sys.dm_exec_requests <—->
  • sys.dm_exec.connections <—–>
  • sys.dm_exec_sql_text

 

因此,我們就可以對 DMV 查詢,將目前 active but blocked query 列出

SQL Blocking Query

 

透過這個方法,

我們可以比較精確的指出哪些目前 Query requests blocked and 被哪些 query blocking

可能的原因有很多,例如資料的更新、table scan、沒有效率的資料查詢等

另外可以透過 Performance Monitor 的觀察,或是配合其他 DMV,

進一步確認整體資源耗用的狀況,

例如:是否有死結的發生 lock waits / sec,當時 CPU 的使用情況等 or index missing 的狀況等

 

總結:

這篇文章的目的在於如何運用  sys.dm_os_waiting_tasks

來得知目前 SQL query blocked/blocking 的狀況,

因此我們利用 DMV 的 sys.dm_os_waiting_tasks

來查詢目前 SQL 正在執行的工作,並且指出哪些 query blocking or blocked.

我們 JOIN 其他 DMV 幫助我們取得更進一步的資訊,

例如 blocking, blocked and SQL text 等

當我們得知哪些 SQL query blocking / blocked 之後

進一步要做一些效能調教時,需要參考其他資訊,釐清可能的原因,

有可能是 Index  missing、查詢沒有效率、統計資訊過時、CPU Usage、Locks 等造成

因此需要參考其他工具 Performance monitoring或是 DMV 等資訊進一步釐清

 

 

 

Leave a Reply

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