SQL Server 性能調優(性能基線)


 

 

在寫這篇東西的時候我也不是很清楚性能基線,到底要檢查點什么,dmv要不要檢查,perfmon要檢測那先。

所以我決定,對我發的《sql server 性能調優》文章內的 perfmondmv做一個總結。來建立自己的性能基線。



io

io中我們要注意哪些性能指標呢?

1. physical disk\disk reads/sec   --這個應該很清楚 一看就知道 這個指標是指什么的

2. physical disk\ disk writes/sec

一打開文章就看到這2個值,而卻有閥值,看到閥值很開心,因為不用你去收集值了。

• Less than 10 ms = good performance

• Between 10 ms and 20 ms = slow performance

• Between 20 ms and 50 ms = poor performance

• Greater than 50 ms = significant performance problem.

接下來就是 sys.dm_os_wait_stats 中的幾個wait type

3.  PAGEIOLATCH_* 

 PAGEIOLATCH_* 系列的wait type 一共有

PAGEIOLATCH_DT   -- 破壞,什么是破壞,就是把內存中數據頁釋放掉
PAGEIOLATCH_EX   -- x
鎖,可以怎么理解,就是排他占用這個鎖

PAGEIOLATCH_KP   -- 保持,就是保持這個頁不被破壞
PAGEIOLATCH_NL   --
沒有定義,保留
PAGEIOLATCH_SH   --
在讀,數據頁的時候就分配這個

PAGEIOLATCH_UP   -- 在更新的時候分配這個            

根據onlinebook的解釋:在任務等待 I/O 請求中緩沖區的閂鎖時發生。閂鎖請求處於“XX”模式。長時間的等待可能指示磁盤子系統出現問題。

講的直白一點就是系統在io,入讀或寫的時候分配的。等待io請求

4. ASYNC_IO_COMPLETION

根據onlinebook的解釋:當某任務正在等待 I/O 完成時出現

這個是等待異步io完成,那么和上面有沒有關系呢?答案是沒有,上面等待的是io讀取出來,或者寫入。這個是等待系統的異步io完成是不一樣的概念。

5. IO_COMPLETION

根據onlinebook的解釋:在等待 I/O 操作完成時出現。通常,該等待類型表示非數據頁 I/O。數據頁 I/O 完成等待顯示為 PAGEIOLATCH_* waits

這個就不解釋了說的很明白了就是等待非數據頁io完成

6. WRITELOG

根據onlinebook的解釋:等待日志刷新完成時出現。導致日志刷新的常見操作是檢查點和事務提交。

這個也不多解釋,就是寫入日志時候等待的時間。



cpu

7.Processor/ %Privileged Time                          --內核級別的cpu使用率

8.Processor/ %User Time                                   --用戶幾倍的cpu使用率

9.Process (sqlservr.exe)/ %Processor Time    --某個進程的cpu使用率

10.SQLServer:SQL Statistics/Auto-Param Attempts/sec    --試圖運行自動參數化次數

11. SQLServer:SQL Statistics/Failed Auto-params/sec       -- 自動參數化失敗

12. SQLServer:SQL Statistics/Batch Requests/sec             -- 批處理量

13. SQLServer:SQL Statistics/SQL Compilations/sec          -- 編譯次數

14.  SQLServer:SQL Statistics/SQL Re-Compilations/sec    -- 反編譯次數

15.  SQLServer:Plan Cache/Cache hit Ratio                            -- 執行計划,cache命中率

接下來還是 wait event

16.signal_wait_time_ms --從發出信號到開始運行的時間差,時間花費在等待運行隊列中,是單純的cpu等待。

下面代碼量化的像是signal_wait_time_ms占的比重

SELECT SUM(signal_wait_time_ms) AS TotalSignalWaitTime ,

( SUM(CAST(signal_wait_time_ms AS NUMERIC(20, 2)))

/ SUM(CAST(wait_time_ms AS NUMERIC(20, 2))) * 100 )

AS PercentageSignalWaitsOfTotalTime

FROM sys.dm_os_wait_stats

在創建baseline 的時候 完全可以 按這個sql來獲取值。

17.SOS_SCHEDULER_YIELD等待

onlinebook的解釋:在任務自願為要執行的其他任務生成計划程序時出現。在該等待期間任務正在等待其量程更新。

完全看不懂,啥叫量程。

直白的說就是:當查詢自動放棄cpu,並且等待恢復執行,這個等待就叫做SOS_SCHEDULER_YIELD

18.CXPACKET等待

onlinebook:當嘗試同步查詢處理器交換迭代器時出現。如果針對該等待類型的爭用成為問題時,可以考慮降低並行度。

直白點就是:處理器之間的一種同步,一般出現在 並發查詢,為啥?因為只有並發查詢才用多個處理器。

接下來是 sys.dm_os_schedulers 

SELECT scheduler_id ,

current_tasks_count ,

runnable_tasks_count

FROM sys.dm_os_schedulers

WHERE scheduler_id < 255

19.主要是查每個處理器上的任務數和運行的任務數。

 

內存

20.SQL Server :Buffer Manager

又很多有用的計數器都是這 buffer manager 對象下面,可以幫助發現buffer pool滾筒的問題。

21.buffer cache hit ratio

buffer cache hit ratio一般情況下在oltp中要高於95%,在olap中要高於90%。可惜的是沒有關於這個性能指標相關的解釋,和這個值是如何影響預讀機制的。如果這個指標的值有巨大的下降那么就說明有問題。這個不能說明內存壓力和sql server 健康指數。

22.page life expectancy

page life expectancy是頁生命周期,也就是一個數據頁在內存中的時間。在以前sql server 2000 4g的內存已經很大了,sql server buffer pool的大小是1.6g,如果sql server 從磁盤上讀取1.6g的數據也只要5分鍾,但是今天64g的內存是主流,如果從磁盤一下子讀取50g的內存,會嚴重的沖擊io。當存在大量的查詢掃描表,讀入新的數據頁,導致生命周期值下降也不是不正常的。這個值必須長期的監視來分析問題。

23.Free Pages

free pages是內存中空頁的數量,不要接近於0。這個值說明查詢能否在其他查詢不是放內存的情況下,快速的分配內存的主要依據。如果free pages 很少,頁生命周期很短,並且伴隨着空頁爭用(free list stalls/sec)的情況那么很有可能導致內存壓力。

24.Free list stalls/sec

Free list stalls/sec每秒空頁等待的數量,如果一段時間內都在0以上那么說明可能存在內存壓力。

25.lazy write/sec

lazy write/sec 就是每秒寫入磁盤的次數。如果發生量很大並且生命周期很短,free page 很少,但是 free list stall/sec 量很大,那么就是發生內存壓力了。



SQL Server:memory Manager

SQL Server:memory Manager對象內對內存的消費和內存管理的問題提供了很重要參考

26.total server memory target server memory

2個計數器代表了當前sql server 使用的總共內存和sql server 想要用的內存。如果 target server memory超過了total server memory,也是內存壓力的重要標志。sql server 會減少內存的需求來接近服務的可用內存,或者通過最大服務器內存配置,所以當內存出現壓力問題的時候不應該第一時間去查看這2個計數器

28.memory grants outstanding

該值是現實多少進程已經成功的獲取了內存的授權。在一段時間內,業務高峰期,如果該值過低,那么標志可能存在內存壓力,特別是 memory grants pending 也比較高的情況下。

29. memory grants pending

該值是有過少進程正在等待內存的授權。如果為非0,那么說明需要調整或者優化負載或者增加內存。

 

結束語

每個需要跟蹤的東西我都簡單的解釋了一下。關於 wait event 是累計計數的,在計算的時候需要相減。

這樣跟蹤個一天,設置好頻率,就能得出性能基線了,可以做成圖標,這樣通過圖形就更容易看出問題了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM