文章目录
- 第一节、数据库服务器的优化步骤
- 第二节、查看系统性能参数
- 第三节、 慢查询日志
- 第四节、 查看 SQL 执行成本
- 第五节、 分析查询语句:EXPLAIN
第一节、数据库服务器的优化步骤
当我们遇到数据库调优问题的时候,可以按照以下流程进行分析。整个流程划分成了 观察(Show status)
和 行动(Action)
两个部分。字母 S 的部分代表观察(会使用相应的分析工具),字母 A 代表的部分是行动(对应分析可以采取的行动)。
第二节、查看系统性能参数
在MySQL中,可以使用 SHOW STATUS
语句查询一些MySQL数据库服务器的 性能参数 、 执行频率 。
SHOW [GLOBAL|SESSION] STATUS LIKE '性能参数';
性能参数包括:
- Connections:连接MySQL服务器的次数
- Uptime:MySQL服务器的上线时间
- Slow_queries:慢查询的次数
- Innodb_rows_read:Select查询返回的行数
- Innodb_rows_inserted:执行INSERT操作插入的行数
- Innodb_rows_updated:执行UPDATE操作更新的行数
- Innodb_rows_deleted:执行DELETE操作删除的行数
- Com_select:查询操作的次数
- Com_insert:插入操作的次数。对于批量插入的 INSERT 操作,只累加一次
- Com_update:更新操作的次数
- Com_delete:删除操作的次数
- last_query_cost:一条SQL查询语句在执行前需要确定查询执行计划,如果存在多种执行计划的话,MySQL会计算每个执行计划所需要的成本,从中选择
成本最小
的一个作为最终执行的执行计划,如果我们想要查看某条SQL语句的查询成本,可以在执行完这条SQL语句之后,通过查看当前会话中的last_query_cost
变量值来得到当前查询的成本。它通常也是我们评价一个查询的执行效率的一个常用指标。这个查询成本对应的是SQL语句所需要读取的页的数量
。
第三节、 慢查询日志
- 目前公司里有DBA做这些事情,如果以后有需要再详细学习。
- MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句。具体指运行时间超过
long_query_time
值的SQL,会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。| - 它的主要作用是:帮助我们发现那些执行时间特别长的SQL查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生
阻塞、运行变慢
的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。比如一条sql执行超过5秒钟,我们就算慢SQL,希望能收集超过5秒的sql,结合explain进行全面分析。 - 默认情况下,MySQL数据库
没有开启
慢查询日志,需要我们手动来设置这个参数。如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。 - 慢查询日志支持将日志记录写入文件。
第四节、 查看 SQL 执行成本
Show Profile
是MysQL提供的可以用来分析当前会话中SQL都做了什么、执行的资源消耗情况的工具,可用于sql调优的测量。默认情况下处于关闭状态,并保存最近15次的运行结果。
如上图,可以看到一条SQL语句执行过程中的各个步骤,以及每个步骤的耗时。还可以添加查询参数,比如:cpu。