文章目录
一、总体思路
拿到问题,我们可以采取横向思考和纵向思考。
横向思考就是首先判断是全局性问题还是单独SQL的问题。
纵向思考就是对交易/事务的执行路径进行诊断(从连接到执行等各个阶段进行排查,涉及事务、日志、数据的处理、以及底层服务器)
- 如全局级别的问题,先确定是否是数据库的问题。比如数据库负载低,又出现大面积交易性能问题,问题原因可能在数据库之外,如网络、应用容器等;同时对比同一时段上周的性能报表情况,用作对比;如数据库服务器CPU冲高,是数据库的问题的话再确定具体瓶颈原因和具体优化方案(比如扩容或分库等)。
- 如单独SQL问题,比如慢SQL,结合视图、监控信息、报表等中该SQL的信息,分析SQL语句的执行计划,并进行测试优化。
- 纵向思考,需要收集分析问题所需的信息,从连接、到事务、数据、日志、服务器等。
1.1全局级别问题-横向思路
1.1.1 cpu繁忙-TOP SQL
cpu使用率和SQL响应时间的关系是,当CPU使用率超过一定阈值(不同数据库可能不一样),SQL响应时间会大幅增加。
报表TOP SQL信息中包含 单条SQL平均CPU、平均更新数、逻辑IO,物理IO、平均运行时间等
分析各SQL CPU 使用占比,确定待优化的SQL,进入单独SQL的优化(见单独SQL)