应用提交查询操作或数据修改操作时,系统需要执行大量的逻辑读操作,其中逻辑IO包含执行查询所需访问表的数据行数。所以系统需要消耗大量的CPU资源以维护从存储系统读取到内存中的数据一致性。
大量行锁冲突、行锁等待或后台任务也有可能会导致实例的CPU使用率过高,但这些情况出现的概率非常低,本文不做讨论。
下文通过一个简化的模型来说明系统资源、语句执行成本以及QPS(Query Per Second 每秒执行的查询数)之间的关系。
• 条件:应用模型恒定,即应用没有修改。
• avg_lgc_io:执行每条查询需要的平均逻辑IO。
• total_lgc_io:实例的CPU资源在单位时间内能够处理的逻辑IO总量。
• 关系公式:total_lgc_io = avg_lgc_io × QPS即单位时间CPU资源 = 查询执行的平均成本 × 单位时间执行的查询数量。
您可以利用数据管理(DMS)或者CloudDBA解决MySQL实例CPU使用率过高的问题。下文主要介绍使用DMS来解决CPU使用率过高的问题。
数据管理工具提供了辅助排查并解决实例性能问题的功能,主要有以下几种:
• 实例诊断报告。
• SQL窗口提供的查询优化建议和查看执行计划。
• 实例会话。
其中,实例诊断报告是排查和解决MySQL实例性能问题的最佳工具。无论何种原因导致的性能问题,建议您首先参考下实例诊断报告,尤其是诊断报告中的SQL优化、会话列表和慢SQL汇总。