MySQL 高级(六)查询截取分析
问题:在开发环境中,分析出SQL并优化的步骤是什么?
流程:
- 观察,至少跑1天,看看生产的慢SQL情况
- 开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,并将它抓取出来
- EXPLAIN+慢SQL分析
- show profile 进一步分析
- 运维经理 or DBA ,进行SQL数据库服务器的参数调优
总结要点:
- 慢查询开启并捕获
- EXPLAIN+慢SQL分析
- show profile 查询SQL在MySQL服务器里面的执行细节和生命周期情况
- SQL数据库服务器的参数调优
1 慢查询日志
慢查询日志是MySQL提供的一种日志记录,它是用来记录MySQL中响应时间超过阈值的语句,具体指运行时间超过long_query_time值(默认10s)的SQL,则会被记录在慢查询日志中。
默认情况下,MySQL数据库没有开启慢查询日志的功能,需要我们手动设置这个参数。如果不是调优需要的话,一般不建议启动这个参数,会带来性能的消耗。
1.1 使用方法
查看是否开启:
SHOW VARIABLES LIKE '%slow_query_log%'
开启慢查询日志:
SET GLOBAL slow_query_log = 1
-- 该语句只对当前数据库生效,且mysql重启后失效
如果需要永久启动(不建议): 修改my.cnf配置文件
--在[mysqld]下新增
slow_query_log =1
slow_query_log_file=/var/lib/mysql/my-log.log
配置慢查询阈值时间:
SHOW VARIABLES LIKE '%long_query_time%'
SET GLOBAL long_query_time = 3
查询当前系统中有多少条慢查询记录:
show GLOBAL STATUS like '%Slow_queries%'
测试案例:
-- 模拟一条执行时间需要15S的sql
select sleep(15);
在慢查询日志地址查看记录:
1.2 MySQL dump slow 慢查询日志分析工具
在生产环境中,如果要手工分析日志,查找、分析sql,很麻烦。Mysql提供了日志分析工具。
2 show profile
show profile是mysql提供可以用来分析当前会话中语句执行的资源消耗情况。可以用于SQL的调优测量。
开启show profile功能:
set profiling = on
使用:
-
先运行需要分析的sql
-
查看结果
show profiles;
-
诊断结果,可以查看sql执行的完整生命周期的时间花费情况
show profile cpu,block io for query 137;
3 全局查询日志
永远不要在生产环境开启
开启:
set GLOBAL general_log = 1;
set global log_output ='TABLE';
此后,你所编写的所有sql语句,将会记录到mysql库内的general_log表中
查看执行的sql:
select * from mysql.general_log;
put =‘TABLE’;
此后,你所编写的所有sql语句,将会记录到mysql库内的general_log表中
查看执行的sql:
```sql
select * from mysql.general_log;