經常在論壇看到問高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 全域性變數 靜態變數 初始化的全域性變數和靜態變數在一塊區域,未初始化的全...