阿里云MySQL CPU 使用率高的原因及解决方法
在日常使用 MySQL 实例的时候,可能会遇到 CPU 使用率过高甚至达到 100% 的情况。阿里云代理商就通过本文来分析造成CPU使用率过高的常见原因以及解决方法,来帮助用户能够及时的解决CPU使用率过高或者达到100% 的情况。
造成用户使用MySQL CPU使用率过高的常见原因
系统执行应用提交查询(包括数据修改操作)时需要大量的逻辑读(逻辑 IO,执行查询所需访问的表的数据行数),所以系统需要消耗大量的 CPU 资源以维护从存储系统读取到内存中的数据一致性
注:大量行锁冲突、行锁等待或后台任务也有可能会导致实例的 CPU 使用率过高,但这些情况出现的概率非常低,本文不做讨论。
阿里云代理商通过一个简化的模型来说明系统资源、语句执行成本以及 QPS(Query Per Second 每秒执行的查询数)之间的关系:
条件:应用模型恒定(应用没有修改)。
avg_lgc_io:执行每条查询需要的平均逻辑 IO。
total_lgc_io:实例的 CPU 资源在单位时间内能够处理的逻辑 IO 总量。
关系公式:total_lgc_io = avg_lgc_io x QPS -- 单位时间 CPU 资源 = 查询执行的平均成本 x 单位时间执行的查询数量
解决方法
阿里云数据管理(DMS)工具中提供有几种可以辅助排查并解决MySQL 实例性能问题的功能:
1】实例诊断报告
2】SQL 窗口提供的查询优化建议和查看执行计划
3】实例会话
上述这几种功能中,实例诊断报告是我们进行排查以及解决 MySQL 实例的性能问题的最佳工具。不管是什么原因造成的 MySQL实例的性能问题,阿里云代理商都首先建议用户参考实例的诊断报告,尤其是诊断报告中的 SQL 优化、会话列表和慢 SQL 汇总分
MySQL 实例使用中避免出现 CPU 使用率达到 100% 的一般原则
1】通过设置 CPU 使用率告警,保证实例 CPU的使用率上有一定的冗余度
2】应用设计和开发过程中,要考虑查询的优化,遵守 MySQL 优化的一般优化原则,降低查询的逻辑 IO,提高应用可扩展性
3】新功能、新模块上线前,要使用生产环境数据进行压力测试(可以考虑使用阿里云 PTS 压力测试工具)
4】新功能、新模块上线前,阿里云代理商建议使用生产环境数据进行回归测试
5】建议经常关注和使用 DMS 中的诊断报告
我有话说: