1、CPU相關的DMVsql
1. 查看使用CPU最多的前50名服務器
select highest_cpu_queries.*, q.dbid, q.objectid, q.number, q.encrypted, q.[text]app fromide ( select top 50 qs.* 性能 from sys.dm_exec_query_stats qs索引 order by qs.total_worker_time desc ) as highest_cpu_queries進程 cross apply sys.dm_exec_sql_text(plan_handle) as q資源 order by highest_cpu_queries.total_worker_time descrequests |
2. 查看最頻繁重編譯的前20個存儲過程it
select top 20 sql_text.text, sql_handle, plan_generation_num, execution_count, dbid, objectid from sys.dm_exec_query_stats a cross apply sys.dm_exec_sql_text(sql_handle) as sql_text where plan_generation_num > 1 order by plan_generation_num desc |
3. 計算signal wait佔整wait時間的百分比
select CONVERT(numeric(5,4),sum(signal_wait_time_ms)/sum(wait_time_ms)) from sys.dm_os_wait_stats |
該值描述了指令等待CPU資源的時間佔總時間的百分比。若是超過25%,說明CPU資源緊張。
4. 並行運行的Cxpacket等待狀態
declare @Cxpacket bigint declare @Sumwaits bigint select @Cxpacket = wait_time_ms from sys.dm_os_wait_stats where wait_type = 'Cxpacket' select @Sumwaits = SUM(wait_time_ms) from sys.dm_os_wait_stats select CONVERT(numeric(5,4),@Cxpacket/@Sumwaits) |
並行運行意味着SQL Server查詢引擎估算某一句語句執行的代價將會超過成本代價,或者沒有合適的索引,或者篩選條件沒可以篩選掉足夠的記錄,使得語句要返回大量的結果。爲了提高OLTP系統的性能,這些都是儘可能避免的。
2、CPU相關的性能計數器
1. 檢查整個服務器的CPU使用狀況
Processor: % Processor Time
Processor: % Privileged Time (Kernel Mode)
Processor: % User Time (User Mode)
System: Processor Queue length
Context switches/sec
2. 檢查每一個進程的CPU使用狀況
Processor: % Processor Time
Processor: % Privileged Time
Processor: % User Time
3. 估算執行計劃重用率
關注SQLServer:SQL Statistics的計數器,大體估算出執行計劃重用率。對於OLTP系統的核心語句,必須有大於95%的執行計劃重用率。
Initial Compilations = SQL Compilations/sec - SQL Re-Comilations/sec
執行計劃重用率 = (Batch requests/sec - Initial Compilations/sec) / Batch requests/sec
本文結語:
經過監視計數器,或者使用DMV,查看CPU的性能。