mysql开启慢查询日志

背景

  近日发现公司的某个网站经常出现无响应状态,经过一系列排查后最终确认是mysql的某些查询导致了锁表。这其中mysql的慢查询log记录让我们定位到了根本原因.那么什么是慢查询呢?它又有什么作用呢?废话不多说,在接下来的内容里会解答这两个问题。

一、简介

  慢查询日志是mysql服务器将影响数据库性能的相关SQL语句记录下来生成的日志文件。开启慢查询日志,可以让MySQL记录下执行超过指定时间(long_query_time)的语句,帮我们找到执行慢的sql语句。通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能。

二、参数

slow_query_log 慢查询开启状态
slow_query_log_file 慢查询日志存放的位置(这个目录需要MySQL的运行帐号的可写权限,一般设置为MySQL的数据存放目录)
long_query_time 查询超过多少秒才记录

三、状态查询

3.1 查询开启状态
show variables like 'slow_query%';

这里写图片描述

3.2 查询long_time_query
show variables like 'long_query_time';

这里写图片描述

四、设置步骤

4.1 全局变量设置

  设置完成后不需要重启mysql即可生效,比较灵活,但重启mysql的话需要重新设置。
- 将 slow_query_log 全局变量设置为“ON”状态

set slow_query_log='ON';
  • 查询超过1秒就记录
set long_query_time=1;
  • 设置慢查询日志存放的位置
set slow_query_log_file='/home/mysql/var/slow.log';
4.2 配置文件设置

进入mysql的配置文件my.cnf(vi /etc/my.cnf),在mysqld下方添加下面语句

[mysqld]
slow_query_log = ON
slow_query_log_file = /home/mysql/var/slow.log
long_query_time = 3

这种方法重启mysql后才能生效。

五、测试

1.在上面的设置完成以后,我们查看下localhost-slow.log是否生成.
vi /home/mysql/var/localhost-slow.log

这里写图片描述
模拟一条慢sql查询语句:

select sleep(5);
2.查看慢查询日志是否记录。
vi /home/mysql/var/localhost-slow.log

超时log记录
图中已经出现了log记录,配置成功.

六、小结

  mysql里的日志包括:错误日志、二进制日志、通用查询日志、慢查询日志等等.其中通用查询日志和慢查询日志是比较常用。这里记录了慢查询的大体使用方法。下面记录一下相关常用的一些设置或查询语句。
  

  1. 当前数据库中与版本号相关的内容
showvariables like ‘%version%’;
  1. 通用日志查询是否开启
showvariables like ‘%general%’;
  1. 查看当前慢查询日志输出的格式
 showvariables like ‘%log_output%;
### 如何在 MySQL 8.0 中配置和开启慢查询日志 #### 开启慢查询日志的基础设置 默认情况下,MySQL慢查询日志功能处于关闭状态[^1]。可以通过修改 MySQL 配置文件 `my.cnf` 或者通过动态调整系统变量来启用该功能。 #### 修改配置文件的方法 编辑 MySQL 配置文件 `my.cnf` 并添加或更新以下参数: ```ini [mysqld] slow_query_log = 1 long_query_time = 0.1 slow_query_log_file = /usr/local/mysql/mysql_slow.log ``` 其中: - 参数 `slow_query_log = 1` 表示启用慢查询日志- 参数 `long_query_time = 0.1` 定义了超过多少秒的 SQL 查询会被记录到慢查询日志中。 - 参数 `slow_query_log_file` 指定了慢查询日志存储的位置和名称。 完成以上更改后,重启 MySQL 服务使配置生效[^2]。 #### 动态调整系统变量的方式 如果不想立即重启数据库实例,可以使用以下命令动态开启慢查询日志并设置相关参数: ```sql SET GLOBAL slow_query_log = 'ON'; SET GLOBAL long_query_time = 0.1; SET GLOBAL slow_query_log_file = '/usr/local/mysql/mysql_slow.log'; ``` 这些命令会即时生效而无需重启服务器。需要注意的是,这种方式仅适用于当前运行周期,在下次启动时仍需依赖配置文件中的设定[^3]。 #### 查看慢查询日志的状态 确认慢查询日志是否已成功开启以及其具体配置情况,可执行如下SQL语句: ```sql SHOW VARIABLES LIKE 'slow_query%'; ``` 此操作将返回有关慢查询日志的相关信息,包括它是否被激活(`slow_query_log`)及其对应的文件路径(`slow_query_log_file`)[^1]。 #### 查询慢 SQL 日志的内容 为了查看已经被记录下来的较慢 SQL 请求,可以从表 `mysql.slow_log` 中读取数据: ```sql SELECT CONVERT(sql_text USING utf8) AS sql_text FROM mysql.slow_log; ``` 这条指令能够帮助管理员分析哪些查询消耗时间过长从而优化性能。 ### 注意事项 当定义 `long_query_time` 值的时候,请依据实际需求合理选择数值大小;太低可能会导致大量正常范围内的请求也被标记成“缓慢”,增加不必要的负担;太高则可能遗漏一些潜在问题所在之处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值