㈠ 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使用率对比