最近发现mysql 服务器的cpu 使用率 经常保持在 99% 因为是 16核的机器,所以起初没太当回事,因为有其他更紧急的事情需要处理,就没有管他,后来有时间了,就静下心来执行的排查了下, 现在把排查的过程记录下来,作为比较。供以后查看
通过htop 命名 查看 mysql 的cpu 使用率 特别高
连上mysql 数据库 mysql -u root -p
使用 show processlist 查看当前连接数(这个只列出前100条,如果想全列出可以使用show full processlist;)
通过查询 发现 有一个select 语句出现的特别频繁,通过kill 命名杀掉后,服务器恢复正常。
kill 查询id
所以定位到了问题点,通过问题点,找到对应的功能,
功能是一个同步第三方数据的接口,需要实时扫描
1. 功能业务逻辑优化,采用降级的方式,降低数据同步的时间,由原来的30s 调整到120.
改完,发布,测试,发布,发现效果不是太好,cpu 占用率还是太高。所以感觉瓶颈可能不是出在这里。
2. sql 优化,发现sql 语句上面有 使用 * 这个字符串,把* 换成了 具体的属性 uid,但是部署上去测试的时候,发现 效果还是不太明显,cpu 使用率虽有降低,但是还是不行。
3. 最后 想着 是否可以通过添加索引来解决,
因为这是一张相对于其他操作来说,select 的操作比例要远远的大于其他操作,所以就尝试着建一个索引。
create index ilogin_name on tb_d_user(login_name) ;
建好后,测试下,发现cpu 使用率 马上就下去了。
这个问题暂时得以解决。
记录下 哈哈
最后贴一张战果图