在分析优化慢SQL时,除考虑慢SQL对应执行计划外,还需要考虑
1、 慢SQL发生时间点的数据库服务器性能
2、慢SQL发生时间点的应用程序服务器性能
3、 慢SQL发生时间点数据库服务器和应用服务器之间网络
如果应用服务器上存在性能压力,会导致对应用服务器:
1、无法快速处理MySQL服务器返回的数据
2、无法及时处理已开启的事务如提交或回滚事务
如果数据库服务器和应用服务器之间网络存在问题:
1、数据丢包重传,MySQL数据库返回数据量较大时花费较长时间在网络传输上
2、未提交事务,网络抖动导致连接断开,由于缺少TCP“四次挥手”操作,MySQL服务器未察觉到连接断开而一直等待应用服务器提交或回滚事务。
下面是应用服务器出现性能瓶颈时的场景描述:
某数据库一段时间内出现大量超过30秒的INSERT/UPDATE/DELETE慢SQL,经排查发现无阻塞,数据库无性能瓶颈,且在该时间范围内性能压力有明显下降。
数据库服务器CPU使用率下降:
数据库服务器CPU负载下降:
数据库服务器磁盘写入速度下降明显:
数据库服务器磁盘读取速度轻微下降:
由于所有慢SQL均来自同一台应用服务器,排查该应用服务器发现:
应用服务器CPU使用率暴涨:
应用服务器CPU负载超过100:
应用服务器内存使用率接近100%:
应用服务器磁盘使用率接近100%,中间有明显波动:
应用服务器SWAP使用率在故障恢复后下降: