MySql的慢查询(慢日志)

1.什么是慢查询?

慢查询日志,就是查询花费大量时间的日志,是指mysql记录所有执行超过long_query_time参数设定的时间阈值的SQL语句的日志,以帮助开发者分析和优化数据库查询性能。默认情况下,慢查询日志是关闭的,要使用慢查询日志功能,首先要开启慢查询日志功能。

2.如何定位慢SQL?

1、简单版:show profile;

执行 SHOW PROFILE 命令时,它会显示关于服务器线程执行的详细信息,包括每个线程所执行的每个语句的执行时间、I/O 操作、上下文切换等。

注意:通常在开发和问题诊断期间使用,而不是在生产环境中持续启用。

性能开销SHOW PROFILE功能在启用时会对服务器的性能产生额外负担。每当一个查询执行时,MySQL服务器会收集详细的性能信息,包括CPU时间、等待时间、上下文切换次数等。这些信息的收集和存储会消耗额外的CPU和内存资源,这在高并发的生产环境中可能是不可接受的。

复制代码
-- 启用性能监控
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的慢查询日志是否开启

如果看到slow_query_log的值是OFF,也就是mysql默认是不启用慢查询日志的。

这里还有个long_query_time,默认是10秒,也就是超过了10秒即为慢查询。建议业务配置3秒

log_queries_not_using_indexes,如果设置为ON,则会将所有没有使用索引的查询都记录为慢查询。

2、如何启用慢查询日志呢?

开启慢日志

set global slow_query_log='ON';

复制代码
-- 持久性,通过配置文件设置
[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秒,那么下面这个查询就一定会超时。

select sleep(11);

查看TABLE记录的慢日志:

select * from mysql.slow_log;

初始化慢日志表:TRUNCATE TABLE mysql.slow_log;

这里面记录了查询时间、发起查询的客户端、扫描行数、执行的sql语句等信息。

5.查看FILE记录的慢日志:

先找到日志文件

打开文件,查看记录的内容:

相关推荐
Kapaseker2 小时前
Compose 进阶—巧用 GraphicsLayer
android·kotlin
黄林晴2 小时前
Android17 为什么重写 MessageQueue
android
阿巴斯甜1 天前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker1 天前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95271 天前
Andorid Google 登录接入文档
android
黄林晴1 天前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab2 天前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿2 天前
Android MediaPlayer 笔记
android
Jony_2 天前
Android 启动优化方案
android
阿巴斯甜2 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android