SQL Server伺服器CPU爆高解決

2022-04-01 00:17:51 字數 2532 閱讀 5324

昨天下午,測試反映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和等待事件,定位更精準,特別是正在執行的

--

資料庫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;

view code

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頻率和增加快取...