㈠ sql佔用了CPU將近100%的資源
SQL佔用了CPU將近100%的資源,解決方法如下:
1、伺服器CPU過高,首先查看系統進程,確定引發CPU過高的進程;
2、通過SQLServer Profiler能夠輕易監控到哪些SQL語句執行時間過長,消耗最多的CPU;
3、通過SQL語句是可以查看每條SQL語句消耗的CPU是多少;
4、導致CPU高的都是進行大量計算的語句:包括內存排序、表掃描、編譯計劃等;
5、如果使用Top刷選前面幾條語句,則盡量為Order By子句建立索引,這樣可以減少對所有的刷選結果進行排序;
6、使用Count查詢記錄數時,盡量通過為where字句的相關欄位建立索引以減少表掃描。如果多個表進行join操作,則把相關的表連接欄位建立在包含索引中;
7、通過服務端通知的方式,減少SQL語句的查詢;
8、通過表分區,盡量降低因為添加索引而導致表插入較慢的影響。
㈡ sql cpu佔用率高怎麼解決
1、佔用率高,多數是因為SQL語句的問題,可以使用以下語句進行排查
USEmaster
GO
--若要指定資料庫就修改USE後面的部分
SELECT*FROMsys.[sysprocesses]WHERE[spid]>50--ANDDB_NAME([dbid])='gposdb'
SELECTCOUNT(*)FROM[sys].[dm_exec_sessions]WHERE[session_id]>50
2、檢查程序是否存在高頻率的循環
3、檢查SQL是否有嵌套觸發器,這個是最難檢查,也是最難發現的
4、CPU本來就很次,需要更換更好的CPU
㈢ 請問大家如果解決SQL導致的CPU佔用率過高
解決方案
將mysqld的內存庫函數替換成tcmalloc,相比ptmalloc,tcmalloc可以更好的支持高並發調用。
修改my.cnf,添加如下參數並重啟
[mysqld_safe]malloc-lib=tcmalloc
上周五早上7點執行的操作,到現在超過72小時,期間該實例沒有再出現cpu長期飆高的情形。
以下是修改前後cpu使用率對比