MySQL 高级(六)查询截取分析 慢查询日志 MySQL dump slow 慢查询日志分析工具 show profile 全局查询日志

MySQL 高级(六)查询截取分析

问题:在开发环境中,分析出SQL并优化的步骤是什么?

流程

  1. 观察,至少跑1天,看看生产的慢SQL情况
  2. 开启慢查询日志,设置阈值,比如超过5秒钟的就是慢SQL,并将它抓取出来
  3. EXPLAIN+慢SQL分析
  4. show profile 进一步分析
  5. 运维经理 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;

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44634197/article/details/108902771
今日推荐