1. 简介
上一篇文章我们介绍了哪些情况下适合创建索引,哪些情况下不适合创建索引,下面就介绍一下数据库优化步骤 【MySQL从入门到精通】【高级篇】(二十)适合创建索引的11种情况&不适合创建索引的7种情况,万字长文
在数据库调优中,我们的目标就是响应时间更快,吞吐量更大。利用宏观的监控工具和微观的日志分析可以帮我们快速找到调优的思路和方式。
2. 数据库服务器的优化步骤
当我们遇到数据库调优问题的时候,该如何思考呢?
整个流程划分成了观察(Show status) 和行动(Action) 两个部分。字母S的部分代表观察(会使用)
首先观察服务器状态是否存在周期性波动,如果缓存策略没有解决,或者不是周期性波动的原因,我们就需要进一步分析查询延迟和卡顿的原因。
接下来进入S2这一步,我们需要开启慢查询。慢查询可以帮我们定义执行慢的SQL语句。我们可以通过设置long_query_time 参数定义"慢"的阈值,如果SQL执行时间超过了 long_query_time,则会认为是慢查询,当手机上来这些慢查询之后,我们就可以通过分析工具对慢查询日志进行分析。
在S3这一步骤中,我们就知道了执行慢的SQL,这样就可以针对性地用EXPLAIN查看对应SQL语句的执行计划,或者使用** show profile** 查看SQL中每一个步骤的时间成本,这样我们就可以了解SQL查询慢是因为执行时间长,还是等待时间长。
如果是SQL等待时间长,我们进入A2步骤。这一步骤中,我们可以调优服务器参数。比如适当增加数据库缓冲池等。如果SQL执行时间长,就进入A3步骤,这一步中我们需要考虑是索引设计的问题?还是查询关联的数据表过多?还是因为数据表的字段设计问题导致了这一现象。然后在这些维度上进行对应的调整。
如果A2和A3都不能解决问题,我们需要考虑数据库自身的SQL查询性能是否达到了瓶颈,如果确认没有达到性能瓶颈,就需要重新检查,重复以上的步骤,如果已经达到了性能瓶颈,进入A3阶段,需要考虑增加服务器,采用读写分离的架构,或者考虑对数据库进行分库分表,比如垂直分库,垂直分表和水平分表等。
以上就是数据库调优的流程思路。如果我们发现执行SQL时存在不规则延迟或卡顿的时候,就可以采用分析工具帮我们定位有问题的SQL,这三种分析工具你可以理解是SQL调优的三个步骤:慢查询,EXPLAIN和SHOW PROFILING。
3. 查看系统性能参数
在MySQL中,可以使用SHOW STATUS 语句查询一些MySQL数据库服务器的性能参数、执行频率。
SHOW STATUS语句语法如下:
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:删除操作的次数。
若查询MySQL服务器的连接次数,则可以执行如下语句:
SHOW STATUS LIKE 'connections%';
总结
本文展示了数据库优化的步骤以及查询性能参数的方式,总体来说,数据优化的步骤主要的思路是:先观察,后处理,观察服务器状态,观察慢查询,进行SQL优化,调优服务器参数。最后才是加硬件,进行分库分表等操作。