1.什么是慢查询?
2.如何定位慢SQL?
1、简单版:show profile;
执行 SHOW PROFILE 命令时,它会显示关于服务器线程执行的详细信息,包括每个线程所执行的每个语句的执行时间、I/O 操作、上下文切换等。
-- 启用性能监控
mysql> set profiling=1;
-- 执行SQL
mysql> SELECT * from member
-- 性能分析
mysql> show profiles;
2.详细版本:performance_schema(不推荐)
--查看performance_schema的属性
mysql> SHOW VARIABLES LIKE 'performance_schema';
通义tongyi.ai_你的全能AI助手-通义千问 (lxblog.com)
3. 开启慢日志
1、查看mysql的慢查询日志是否开启
log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引的查询都记录为慢查询。
2、如何启用慢查询日志呢?
开启慢日志
-- 持久性,通过配置文件设置
[mysqld]
log_output=FILE,TABLE
slow_query_log=ON
long_query_time=0.001
slow_query_log_file = /usr/local/mysql/mysql-8.0/logs/slow_query.log
#一次性的,通过命令设置, long_query_time 是时间阈值。为方便测试,此处认为超过0.001s的就属于慢查询
mysql> SET GLOBAL log_output = 'FILE,TABLE';
mysql> set GLOBAL slow_query_log=ON;
mysql> SET GLOBAL long_query_time = 0.001;
mysql> SET GLOBAL slow_query_log_file = '/usr/local/mysql/mysql-8.0/logs/slow_query.log';
3、指定日志的输出格式
MySQL慢日志支持两种输出格式:TABLE和FILE 日志持久化
1. TABLE格式(推荐):慢日志以表格的形式存储在MySQL数据库中的`slow_log`表中。每个查询都作为一个记录插入到表中,每条记录包含了查询的详细信息,如执行时间、查询语句等。这种格式的主要优点是便于查询和分析,可以直接使用SQL语句对记录进行过滤和聚合操作。通过查询`slow_log`表,可以轻松地获取慢查询信息,比较适合进行简单的查询分析。
2. FILE格式:慢日志以文本文件的形式存储在磁盘上。每条慢日志记录都以一行文本的形式存储,记录中包含了查询的详细信息,如执行时间、查询语句等。这种格式的主要优点是方便日志的传输和存储,可以通过文件操作实现更复杂的查询和分析。通过阅读慢查询日志文件,可以详细了解查询的执行情况,包括执行时间等信息,并进行更深入的分析。
MySQL支持TABLE和FILE两种输出格式,可以用下面的命令来查看当前的输出格式:
show variables like '%log_output%';
设置输出格式:
set global log_output=’FILE’;
set global log_output=’TABLE’;
set global log_output=’FILE,TABLE’;
4、测试
因为我们的超时时间设置为10秒,那么
下面这个查询就一定会超时。
查看TABLE记录的慢日志:
初始化慢日志表:TRUNCATE TABLE mysql.slow_log;
这里面记录了查询时间、发起查询的客户端、扫描行数、执行的sql语句等信息。
5.查看FILE记录的慢日志:
先找到日志文件
打开文件,查看记录的内容: