SqlServer執行時占用高CPU問題查詢

2021-08-20 18:41:31 字數 1513 閱讀 2035

經常在論壇看到問高cpu的問題,簡單的總結一下。

1,首先你要確認,高cpu是不是是sql server程序引起的還是別的程序引起的,這個很容易,直接看任務管理器。

2,如果從任務管理器看出高cpu確實是用sql server引起的。

3,如果是sql server引起的。

3.1sql server的乙個比較bad的執行計畫引起的,比如說缺少必要的index,引起了hash join什麼的。這個也分成2種:

1,造成高cpu的語句已經執行結束,這個時候可以用下面的語句來檢查。

select

highest_cpu_queries.plan_handle,

highest_cpu_queries.total_worker_time,

q.dbid,

q.objectid,

q.number,

q.encrypted,

q.[text]

from

(select top 50

qs.plan_handle,

qs.total_worker_time

from

sys.dm_exec_query_stats qs

order by qs.total_worker_time desc) as highest_cpu_queries

order by highest_cpu_queries.total_worker_time desc

解釋一下sys.dm_exec_query_stats:

sys.dm_exec_query_stats返回快取查詢計畫的聚合效能統計資訊。每個查詢計畫在該檢視中對應一行,並且行的生存期與計畫本身相關聯。在從快取刪除計畫時,也將從該檢視中刪除對應行。

可檢視幫助文件:ms-help:

3.1.2,造成高cpu的語句正在執行,這個時候可以用下面的語句來檢查。

select st.text, qp.query_plan, rq.*

3.2 開啟了sql profiler.

通過3.1.2可以看到 sp_trace_getdata這個sp在執行。

3.3 過度的編譯跟重編譯。

可以通過下面的sql來查

select top 25

sql_text.text,

sql_handle,

plan_generation_num,

execution_count,

dbid,

objectid

from

sys.dm_exec_query_stats a

where

plan_generation_num >1

order by plan_generation_num desc

3.4 某個系統程序造成的,比如說 ghost cleanup, lazy writer等。可以通過select * from sys.sysprocesses where spid<51來查。

SQLSERVER語句的執行時間

在sql語句調優的時候,大部分都會檢視語句執行時間,究竟sqlserver顯示出來的統計結果是什麼意思?下面看一下例子 比較簡單的語句 1 setstatistics time on 2use pratice 3 go4select from dbo orders 結果 1 2 cpu 時間 0 毫...

SQLSERVER語句的執行時間

在sql語句調優的時候,大部分都會檢視語句執行時間,究竟sqlserver顯示出來的統計結果是什麼意思?下面看一下例子 比較簡單的語句 1 setstatistics time on 2use pratice 3 go4select from dbo orders 結果 1 2 cpu 時間 0 毫...

程序執行時,所占用的記憶體

乙個程序執行時,所占用的記憶體,可以分為如下幾個部分 1 棧區 stack 由編譯器自動分配釋放,存放函式的引數值,區域性變數的值等。2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由os 3 全域性變數 靜態變數 初始化的全域性變數和靜態變數在一塊區域,未初始化的全...