MYSQL 的CPU 使用率高,干时间长的DB们都会遇到,其实其余的数据库也都是有相似的问题,CPU一升高。大部分DBA 的首要工做就是要看是否是有大事务,大查询,慢查询等等。实际上咱们是否是有更好的快速定位的方法
mysql
下图咱们能够看到系统CPU一直在 90%, 到底什么缘由形成MYSQL的CPU 利用率一直高怎么分析。follow me.
sql
咱们经过pidstat 来查看当前MYSQL的线程中那个CPU的使用率比较高
数据库
能够经过上图看到0 和 1 号CPU 核心的使用率比较其余的核心要高,而且咱们也看到TID ,线程的数字,而后咱们拿到这些线程的ID 直接回到MYSQL 内部,咱们看看到底这两个线程在作什么。
微信
咱们能够结合上面的查询socket
1 咱们能够肯定到底多核心CPU上到底那个核心的CPU的利用率比较高spa
2 经过查找到哪一个核心的CPU的使用率多少,定位到MYSQL 中的有问题的链接。.net
另外也能够经过监控系统来查看CPU 消耗在哪里,例如可使用PMM,查看CPU 的消耗点在哪里,若是是用户user的层面,那就能够确认是用户的某些线程消耗了CPU的资源。而后能够经过上面的手段来定位当前到底那些线程在大量的使用CPU线程
这里有一个插曲,曾经听到若是遇到这样的状况,添加CPU 暂时缓解CPU LOAD 100 percent 的状况,这里作了一个test.
3d
将上面的有压力的MYSQL 的CPU 添加一倍从4 croe 变为 8核心,最终结果(至少在我这里),CPU的LOAD 基本上没有变化,在负载一样的状况。orm
另外同时能够用下面的脚本,看一下瞬时的 QPS TPS 看看是否是系统已经超负荷运行。
mysqladmin -uroot -p'password' --socket=/data/mysql/mysql.sock extended-status -i1|awk 'BEGIN{local_switch=0;print "QPS Commit Rollback TPS Threads_con Threads_run \n------------------------------------------------------- "}
$2 ~ /Queries$/ {q=$4-lq;lq=$4;}
$2 ~ /Com_commit$/ {c=$4-lc;lc=$4;}
$2 ~ /Com_rollback$/ {r=$4-lr;lr=$4;}
$2 ~ /Threads_connected$/ {tc=$4;}
$2 ~ /Threads_running$/ {tr=$4;
if(local_switch==0)
{local_switch=1; count=0}
else {
if(count>10)
{count=0;print "------------------------------------------------------- \nQPS Commit Rollback TPS Threads_con Threads_run \n------------------------------------------------------- ";}
else{
count+=1;
printf "%-6d %-8d %-7d %-8d %-10d %d \n", q,c,r,c+r,tc,tr;
}
}
}'
同时能够辅助查看当前的handler_read_rnd , handler_read_rnd_next 等参数,若是快速的增加,说明当前的查询有全表扫描或者没法有效利用索引的状况。
剩下的工做可能就要和相关的一些慢查询或者捕捉到的语句来进行相关的分析了。
本文分享自微信公众号 - AustinDatabases(AustinDatabases)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。