SQL SERVER性能調優之五(CPU性能分析)


SQL SERVER性能調優之五(CPU性能分析)

(一)概述

(1)CPU對一台數據庫服務器來說,是非常重要的資源。廢話少說大家都懂的。

(2)如何監控CPU性能。

2.1 可以使用system perfmon收集Processor:% Processor Time性能計數器,可以參見另一篇文章

SQL SERVER性能調優之二(分析服務器的整體性能)

2.2使用SQL Server Performance Dashboard。

(二)什么原因會導致CPU性能問題?

(1)大量消耗CPU的運算,如哈希運算,排序運算。

(2)執行計划的編譯和重編譯。

(3)缺乏索引的大量IO操作也會引起額外的CPU消耗。

(4)並行操作。

等等。。。。

(三)具體手段

 (1)幾個重要的等待,先確定服務器級別的等待。

SELECT wait_type,
       Sum(signal_wait_time_ms) AS TotalSignalWaitTime
FROM   sys.dm_os_wait_stats
GROUP  BY wait_type
ORDER  BY 2 DESC 

CXPACKET等待:等待多個線程同步,會出現此等待。

SOS_SCHEDULER_YIELD:放棄CPU,並等待繼續執行。

如果發現大量CXPACKET等待,可能由於並行造成,在OLTP系統,可以考慮降低並行度。

如果發現大量SOS_SCHEDULER_YIELD等待,可能說明你的CPU存在瓶頸。

(2)幾個重要的計數器

sql statistics: sql compilations/sec     每秒的查詢編譯次數

sql statistics: sql recompilations/sec  每秒的查詢重編譯次數

如果發現以上兩個性能計數器的值非常高,可以CPU性能問題有編譯造成。可以采用存儲過程封裝T-SQL語句,參數化查詢,緊急時可以開啟數據強制參數化。

(3)語句級別處理

SELECT TOP 10 total_worker_time / execution_count       AS [Avg CPU Time],
              (SELECT Substring(text, statement_start_offset / 2, (
                              CASE
                              WHEN statement_end_offset = -1 THEN Len(
                              CONVERT(NVARCHAR(max), text)) *
                                                                  2
                              ELSE statement_end_offset
                                                                    END
                              - statement_start_offset ) / 2
                      )
               FROM   sys.Dm_exec_sql_text(sql_handle)) AS query_text,
              *
FROM   sys.dm_exec_query_stats
ORDER  BY [Avg CPU Time] DESC  

 

select top 10 
    (total_logical_reads/execution_count) as avg_logical_reads,
    (total_logical_writes/execution_count) as avg_logical_writes,
    (total_physical_reads/execution_count) as avg_phys_reads,
     Execution_count, 
    statement_start_offset as stmt_start_offset, 
    sql_handle, 
    plan_handle
from sys.dm_exec_query_stats  
order by  (total_logical_reads + total_logical_writes) Desc

 

使用該查詢可以查詢CPU和IO消耗最高的10個語句,可以逐一分析,是否可以更改寫法或者適當添加索引,降低CPU使用率(一般高CPU和高IO關聯,所以可以想辦法先降低IO,直觀的處理,就是減少語句的邏輯讀)。

(四)總結

CPU優化是一個長期的過程,需要定義將當前的性能計數器和基線對比,盡早的發現問題,CPU出現性能問題,有時候也不一定代表就是CPU出現瓶頸了,可能預示其他硬件出現故障了,或者索引被意外刪除了,網站受到攻擊等等,所以CPU監控至關重要。


免責聲明!

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



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