昨天下午,測試反映trunk測試環境的資料庫cpu一直100%,一開始以為是病毒,內網這段時間老是有個挖礦的病毒,查了一下被隔離了,但是資料庫還是慢,停掉sql server的服務cpu降下來,啟動ssql server的伺服器就cpu就到100%,按照正常情況,
sql server導致cpu爆高,一般是異常sql引起,但查詢了監控:
查詢是riskcontrolanalysis,tasktrunk庫的sql比較多,先分離riskcontrolanalysis看看是否是這個庫的原因,分離後cpu還是很高,再分離tasktrunk庫,報錯,無法分離,這時懷疑是伺服器的磁碟效能問題,停sql服務,用
crystaldiskmark 6.0測試一下磁碟的效能,磁碟效能的確不怎樣,但是也沒差到這樣的地步。
後面只能進一步分離tasktrunk庫,分離後,在看伺服器cpu,發現正常了,原因就出在tasktrunk庫,後來在看看監控的sql,發現一條查詢sql:
select count(1) from tb_log e where 1=1 and e.taskid=@taskid這個tb_log 有3億條,查詢taskid欄位沒有索引,導致查詢io很慢,進而影響cpu爆高。後重建一張新的tb_log表,並在taskid欄位加上索引,以前的表做歷史資料。效能問題解決。
現在想想,就乙個簡單的sql查詢,用dmv效能檢視和實時監控的sql,為何查不出來,這個監控查sql,他的cpu和時間都不是特別高,並沒有特殊異常的情況,而且查資料庫也沒有未提交的事務在執行。
這個sql: 查詢正在執行的sql
優勢: 1,以前的dmv是查已經執行完畢的sql,如果這個sql一直假死,效能檢視就查不出來
2,和[sp_whoisactive]監控出來的sql相比,能很清晰的顯示正在執行的sql和等待事件,定位更精準,特別是正在執行的
--view code資料庫cpu很高,查詢問題的sql,根據時間「等待毫秒」,查出問題的sql
select
spid,
blocked,
db_name(sp.dbid) as
dbname,
(select
top1
s.host_process_id
from sys.dm_exec_requests r with
(nolock)
right
outer
join sys.dm_exec_sessions s with
(nolock)
on r.session_id =
s.session_id
right
outer
join sys.dm_exec_connections c with
(nolock)
on s.session_id = c.session_id where s.host_name
=sp.hostname) 應用伺服器程序id,
(select
top1
c.client_net_address
from sys.dm_exec_requests r with
(nolock)
right
outer
join sys.dm_exec_sessions s with
(nolock)
on r.session_id =
s.session_id
right
outer
join sys.dm_exec_connections c with
(nolock)
on s.session_id = c.session_id where s.host_name
=sp.hostname) ip,
a.[text]as
[textdata],
waitresource,
sp.waittime 等待毫秒,
sp.stmt_start,
lastwaittype,
sp.hostname,
a.[text]as
[textdata],
program_name,
sp.loginame,
sp.status,
substring(a.text, sp.stmt_start /2,
(case
when sp.stmt_end =-1
then
datalength(a.text) else
sp.stmt_end
end- sp.stmt_start) /
2) as
[current_cmd]a
where spid >
50--
and lastwaittype='hadr_sync_commit'
and status<>
'sleeping
'order
by sp.waittime desc;
sqlserver伺服器 急救
今天突然發現,sqlserver伺服器 遠端桌面連不上了,但是資料庫都能正常連線,記得是上次更改了遠端桌面的埠,但是防火牆上沒有開啟規則。現在通過資料庫使用者解決方法如下 作為備忘 開啟xp cmdshell sql server blocked access to procedure xp cmd...
伺服器效能監控 cpu
最近伺服器load較高,後來排查是死迴圈 這可要命了,下面介紹乙個普通排查方法 top 檢視pid 負載較高的那個 當然 jps也可以 然後 定位 這個程序ip下面的執行緒耗時情況 ps mp pid o thread,tid,time 看time 可能有乙個執行緒執行時間特別長 幾十分鐘或者更長 ...
伺服器效能之CPU
有時我們會發現開發的應用在cpu核數一樣的虛擬伺服器上效能表現出較大的差異,這是為什麼呢?上次有童鞋問到我這樣乙個問題,所以我根據自己的理解給大家簡說下!cpu生產商為了提高cpu的效能,通常做法是提高cpu的時鐘頻率和增加快取容量。不過目前cpu的頻率越來越快,如果再通過提公升cpu頻率和增加快取...