SQL Server 效能調教 – Waits Statistics

SQL Server 效能調教 – Waits Statistics

 performance-systeme-OS-icon

當應用程式傳送指令到資料庫時,資料庫便開始執行該指令,傳回所需要的結果,

從資料庫開始處理到回覆的時間  Total response time

這之間有許多的處理發生,例如資料查詢、排序、記憶體搜尋、計算、資料轉換等等

當線上使用者很多的時候,這樣的交易處理變得更加複雜

因此就會產生 Wait ,等待

等待資源、等待磁碟處理存取資料、等待計算完畢、等待不同 session間的 lock 等

 

DMV (Dynamic Management View)

SQL Server 對於這些種種的”等待”,都會加以記錄,例如:

等待的時間、等待的原因 Wait Type

這些記錄存放於 SQL Server 的 DMV (Dynamic Management View)

兩個跟Wait 有關的 DMV

  • sys.dm_os_wait_stats        (累積的歷史資料,從上次SQL server restart service 算起)
  • sys.dm_os_waiting_tasks  (現在正在執行中的資源等待)

 

SQLOS 的三種狀態 (Running, Suspended, Runnable)

每一個 thread (執行緒) 在 SQL Server 執行時,都會被 SQLOS排進下列三種狀態

 

  • Running:    CPU 執行中
  • Suspended:當需要額外的資料時,例如資料在記憶體無法取得時,該 thread 的狀態就會進入suspended
  • Runnable:當需要的資料取得之後,就會進入runnable。表示 ready to be in “running”。

每一個 thread 有 4 ms  的時間可以取得 running 執行,FIFO 的循環

如果該 thread 不需要額外的資料,但是 4ms 又沒有執行完畢,那該 thread 會就

Running (4 ms) —->  Runnable ( 4 ms) —–> Running (4 ms)

 

Total wait time

Total Wait time = resource wait time + signal wait time.

 

什麼是 Resource Wait?

舉例來說,Update Name

資料的更新,必須要等待資料的寫入,資料庫的transaction log 與磁碟的寫入等

這些磁碟資源的存取就會讓 thread 的狀態從 running 變成 suspended

這就是 Resource Wait 的一種

 

舉例來說, SELECT NAME 讀取資料

等待從磁碟讀取資料至 buffer,或是等待該 data page 的 lock被釋放等

這也是 Resource Wait 的一種

 

那什麼是 Signal Wait ?

當 thread 已經存取好資源,由 Suspended 進入 Runnable 的狀態

在 Runnable 的狀態等待 CPU 進入Running 執行

像這樣單純等待 CPU 從 Runnable —-> Running 就是 signal Wait

 

總結:

Total Wait time = resource wait time + signal wait time.

Resource wait 為資源存取,例如從磁碟存取、例如等待lock 釋放等

Signal Wait 為 Runnable —–> Running ,等待CPU 執行時間

 

接下來我們要討論更多 Resource Waits 的種類與 SQL Performance 效能的關係。

 

Leave a Reply

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