Mysql:数据库优化步骤
数据库优化步骤
- 查看mysql是否存在周期性波动
1.1 是。代表可能遇上如618,双十一等活动对数据库暂时性的压力增大,可以mysql加缓存或更改缓存策略
1.2 不是。大概率是本身开发人员编写的SQL有问题,或者是业务量达到一定程度引发的查询慢
非周期性波动调优思路
- 开启慢查询,并设定慢查询的阈值(当sql执行完所消耗超过这个时间,被认定为慢查询SQL)
- 使用慢查询工具,找到慢查询SQL
- 使用explain或者show profiling对这些sql进行分析,看为啥慢
如果是SQL等待时间长,修改数据库参数
如果是SQL执行时间长,加索引,表优化等
- 如果上面分析并且相关调优手段都用了,效果还是不太理想。可能是达到数据库表、索引等的瓶颈了,这种是业务量导致,需要读写分离,分库分表等架构来提升了
慢查询相关操作
- 查看mysql是否开启慢查询
show variables like '%slow_query_log';
注:默认情况下是不开启慢查询的,因为记录慢查询日志会影响性能,所以在调优排查的时候开启即可,平时不用开启
- 打开或关闭慢查询(临时,重启则恢复默认出厂)
set global slow_query_log = on;
set global slow_query_log = off;
- 查看慢查询日志(慢查询SQL存放的文件)
show variables like '%slow_query_log%';
- 查看慢查询阈值
show variables like '%long_query_time%';
注:默认10s
- 设置慢查询阈值(临时,重启则恢复默认出厂)
set global long_query_time = 10;
set long_query_time = 10;
注:两个一并执行即可
- 查看慢查询SQL的数目
show global status like '%Slow_queries%';
注:这只是来判断是否存在慢sql,并不能知道哪些sql或者我们猜测的sql是否是慢查询
持久化配置
上述设置慢查询开关,阈值都是临时操作,mysql重启的话就会恢复默认出厂,如果需要重启仍然保持,需要文件配置
慢查询工具-mysqldumpslow
我们去分析慢查询日志,直接打开的话,展示的格式和排版,从效率上看是不利于我们排查和分析的,所以mysql提供了mysqldumpslow慢查询日志分析工具,可以对此日志文件进行分析,以友好的方式展示在界面上
比如说要根据sql查询最新时间进行排序,并且取前面5条。则:
mysqldumpslow -s t -t 5 /var/lib/mysql/slow.log
注意:此工具的使用,不是在mysql客户端内,是在操作系统下直接使用。-s表示排序规则,-t表示取前面多少条