前陣子有幸參加SQL PASS的課程,由顏瑞宏老師所安排如何利用Wait type去進行Monitor和Trouble Shooting,收穫良多,以下的筆記來自於顏老師的上課講義。
什麼是Waitype?
- SQL Server的開發人員自行定義並用於診斷效能瓶頸
- 早期的Wait Type總類較少,隨著版本替換,總類上升
- Wait Type的執行狀態分為執行中(Running)、等候中(Waiting)、即將啟動(Runnable)
- 主要的Wait Resource總類可以分為下列幾種
a. Resource e.g. I/O, Network, Thread, Memory..
b.Synchronization e.g. Lock, Latches..
c. Forced e.g. Yield, Sleep
d. External e.g. Preemption
e. Queue e.g. Background tasks - 而在OS的上層SQLOS有權衡量TASK的作業優先權, 對於Wait Type的運作底層知識則可以參考Phil Liu寫的文章:
http://sqlworker.blogspot.tw/2017/04/sql-server-waits.html
http://sqlworker.blogspot.tw/2017/05/sqlserver-wait-typesosscheduleryield.html - 不是所有Wait Type都代表系統瓶頸,有很多是背景工作的Waits
e.g. LAZYWRITER_SLEEP, SQLTRACE_BUFFER_FLUSH, LOGMGR_QUEUE, CHECKPPOINT