可以使用下面的語句來得到
select substring(qt.一些解釋:text
, (qs.statement_start_offset/2)+1,((
case qs.statement_end_offset
when
-1 then datalength(qt.
text
)
else qs.statement_end_offset
end
- qs.statement_start_offset
)/2)+1
),qs.execution_count,
qs.total_logical_reads, qs.last_logical_reads,
qs.total_logical_writes, qs.last_logical_writes,
qs.total_worker_time,
qs.last_worker_time,
qs.total_elapsed_time/1000000 total_elapsed_time_in_s,
qs.last_elapsed_time/1000000 last_elapsed_time_in_s,
qs.last_execution_time,
qp.query_plan
from
sys.
dm_exec_query_stats qs
sys.
dm_exec_sql_text
(qs.
sql_handle
) qt
sys.
dm_exec_query_plan
(qs.plan_handle) qp
order by qs.total_worker_time desc
-- cpu time
sql server 有很多執行緒, 其基本的工作邏輯為: 不讓任何的runnable的thread餓死. sql server的執行緒管理並不是由作業系統管理的, 而是由sql server 自己管理的. sql server多數時候執行在nonpreemptive模式下的, 意味著執行緒都是互相協作的, 不時地通過主動放棄的方式來讓其他的執行緒執行. 當乙個執行緒為另乙個執行緒主動出讓執行權的時候, 它就建立了自己的wait狀態. 如果這樣的執行緒很多, 那麼就明顯地意味著存在著cpu的壓力.
可以通過下面的語句來檢視系統中有多少runnable的task.
select scheduler_id,如果長時間持續地發現兩位數的runnable_tasks_count, 注意不是偶爾, 你就知道cpu存在壓力了.current_tasks_count,
runnable_tasks_count,
work_queue_count,
pending_disk_io_count
from
sys.
dm_os_schedulers
where scheduler_id < 255
go
當然, 加cpu是簡單的解決方案. 但是, 當這麼做不可行的時候, 就可以通過文章最前面的語句來找到占用cpu資源最多的query, 進行必要的優化.
資訊**
sql server – sos_scheduler_yield – wait type – day 8 of 28
Sql語句裡的遞迴查詢
以前使用oracle,覺得它的遞迴查詢很好用,就研究了一下sqlserver,發現它也支援在sql裡遞迴查詢 舉例說明 sqlserver2005版本的sql如下 比如乙個表,有id和pid欄位,id是主鍵,pid表示它的上級節點,表結構和資料 create table aaa id int nul...
Mapper裡的sql語句註解
一 tab user.id,tab user.name,age,address r.id r id,r.name r name,r.userid 這兩個相當於把需要的字段舉例出來,以便後面使用。比如,根據id使用它,相當於貼上裡面的內容資訊一樣。select from tab user left j...
Sql語句裡的遞迴查詢
sql語句裡的遞迴查詢 sqlserver2005和oracle 兩個版本 以前使用oracle,覺得它的遞迴查詢很好用,就研究了一下sqlserver,發現它也支援在sql裡遞迴查詢 舉例說明 sqlserver2005版本的sql如下 比如乙個表,有id和pid欄位,id是主鍵,pid表示它的上...