常见原因
1、大量行锁冲突、行锁等待或后台任务也有可能会导致实例的 CPU 使用率过高,但这些情况出现的概率非常低,本文不做讨论。
2、语句执行成本和QPS(每秒执行的查询数)之间的关系
avg_lgc_io:执行每条查询需要的平均逻辑io
total_lgc_io:实例的cpu资源在单位时间内能够处理的逻辑io总量
关系公式: total_lgc_io = avg_lgc_io
∗
\ast
∗QPS – 单位时间cpu资源=查询执行的平均成本*单位时间执行的查询数量
应用负载(QPS)高
现象描述
特征:实例的 QPS(每秒执行的查询次数)高,查询比较简单、执行效率高、优化余地小。
表现:没有出现慢查询(或者慢查询不是主要原因),且 QPS 和 CPU 使用率曲线变化吻合。
常见场景:该状况常见于应用优化过的在线事务交易系统(例如订单系统)、高读取率的热门 Web 网站应用、第三方压力工具测试(例如 Sysbench)等。
查询执行成本(查询访问表数据行数 avg_lgc_io)高
现象描述
特征:实例的 QPS(每秒执行的查询次数)不高;查询执行效率低、执行时需要扫描大量表中数据、优化余地大。
表现:存在慢查询,QPS 和 CPU 使用率曲线变化不吻合。
原因分析:由于查询执行效率低,为获得预期的结果即需要访问大量的数据(平均逻辑 IO高),在 QPS 并不高的情况下(例如网站访问量不大),就会导致实例的 CPU 使用率高。
执行每条查询需要的平均逻辑io,mysql查询数据的原理