数据库服务器的调优步骤

前言

在项目预上线之后,发现有一些SQL执行的很慢,如何排查定位SQL查询慢的原因呢?是索引设计的问题?服务器参数配置的问题?还是需要增加缓存的问题?下面咱们一起就从性能分析来入手,定位导致SQL执行慢的原因。

数据库服务器的优化步骤

当我们遇到数据库调优的问题,该如何思考呢?下面分享一张思考的流程图:
将整个流程划分成观察(Show status)和行动(Action)两个部分。其中字母S的部分代表观察(会使用相应的分析工具),字母A代表的部分是行动(对应分析可以采取的行动)。
在这里插入图片描述

调优流程图详解:
1、首先在 S1 部分,我们需要观察服务器的状态是否存在周期性的波动。如果存在周期性波动,有可能是周期性节点的原因,如双十一,促销活动等。这样的话,可以通过 A1 加缓存这一步骤解决,或者更改缓存失效策略。

2、如果缓存策略没有解决,或者不是周期性波动的原因,就需要进一步分析查询延迟和卡顿的原因。进入开启慢查询 S2 步骤,通过慢查询可用快速定位执行慢的SQL语句。我们可以通过设置 long_query_time 参数定义“慢”的阈值(阈值即边界值),如果SQL执行时间超过了阈值,则认为是慢查询。收集上来这些慢查询的SQL语句之后,我们就可以通过分析工具对慢查询日志进行分析。

3、在收集到慢查询的SQL语句后,我们可以进一步用Explain去查看对应SQL语句的执行计划,或者使用Show Profile查看SQL中每一个步骤的时间成本。也就是进入 S3 步骤。这样我们就能了解SQL查询慢的原因是因为执行时间长,还是等待时间长。

4、如果是SQL等待时间长,就进入 A2 步骤。进行调优服务器的参数,比如适当增加数据库缓冲池等。
如果是SQL执行时间长,就进入 A3 步骤。可以从三个方面进行优化调整:

  • 索引设计优化。比如联合索引就比多个单个索引的查询效率要快一些。
  • Join表是否过多。Join表的数据最好不要超过三张,表的数据越多,嵌套循环就越多,查询时间也就越长。
  • 数据表设计优化。虽然一般设计数据表都遵循三范式,但是我们可以适当的增加数据冗余度,以空间换取时间提高数据的查询效率。

5、如果 A2 和 A3 都不能解决问题,就要考虑数据库自身的SQL查询性能是否已经达到了瓶颈,如果确认没有达到性能瓶颈,就需要重新检查也就是重复上述步骤。
如果已经达到了性能瓶颈,进入 A4 阶段,需要考虑增加服务器,采用读写分离的架构,或者考虑对数据库进行分库分表,比如垂直分库,垂直分表和水平分表等。

小结

整个过程中通过观察数据库整体的运行状态,借助性能分析工具可以让我们了解执行慢的SQL有哪些,查看具体的SQL执行计划,甚至是SQL执行中的每一步成本代价,这样定位了问题所在,找到了问题再采取相应的行动从而完成数据库的调优。
如何用性能分析工具进行调优,看下面⬇的文章你就知道啦~
MySQL性能分析神器,你还不知道它?那你就out了

发布了193 篇原创文章 · 获赞 222 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/Sophia_0331/article/details/105480691
今日推荐