暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql之慢sql

运维家 2023-06-20
1516


sql
,顾名思义就是执行的慢的sql
语句,无论是增删改查都会存在慢sql
,一旦有大量的慢sql
出现,就会导致整个程序变慢,卡顿。

1、mysql如何开启慢sql记录(修改配置文件)

[root@jier ~]# vim etc/my.cnf
[mysqld]
# 开启慢SQL查询日志
slow_query_log=1
# 慢SQL日志文件的位置
slow_query_log_file=/data/mysql/logs/mysql-slow.log
# 慢SQL的时间阈值。超过long_query_time设定的,就会记录到/data/mysql/logs/mysql-slow.log日志文件中
long_query_time=3
[root@jier ~]# vim etc/my.cnf

以上执行完毕之后需要重启数据库方可生效哈。

2、mysql如何开启慢sql记录(临时生效,重启失效)

如果我们的数据库在最初修改配置文件的时候,没有配置有关于慢sql
的内容,且数据库已经投产了,不能重启。

那我们应该如何操作的,这种时候我们就可以通过临时生效的方式来配置。

(1)连接数据库

我们需要先连接数据库,到以下状态:


(2)查看是否开启了慢sql
记录

mysql> show VARIABLES like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | OFF |
+----------------+-------+
1 row in set (0.00 sec)

mysql>

参数含义:

OFF:关闭
ON:开启

可以看到上面是OFF
,也就是关闭的状态,那么我们开启一下;

(3)开启慢sql
查询记录

mysql> set global slow_query_log='ON';
Query OK, 0 rows affected (0.00 sec)

mysql>

我们再查一下结果:

mysql> show VARIABLES like 'slow_query_log';
+----------------+-------+
| Variable_name | Value |
+----------------+-------+
| slow_query_log | ON |
+----------------+-------+
1 row in set (0.00 sec)

mysql>

(4)配置慢sql时长

mysql
中默认是操作10秒的sql
是慢sql

mysql> show VARIABLES like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

mysql>

我们可以根据我们的需要进行手动配置,如下:

mysql> set global long_query_time = 3;
Query OK, 0 rows affected (0.00 sec)

mysql>

这样我们就配置了执行时间大于3秒的sql
都将记录到慢sql
文件中;

看下配置是否生效了没有吧;

mysql> show VARIABLES like 'long_query_time';
+-----------------+-----------+
| Variable_name | Value |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

mysql>

为什么没有生效呢???

注意:配置慢sql
阈值,只有重启数据库才可以生效。

(5)慢sql
日志保存位置

mysql> show VARIABLES like 'slow_query_log_file';
+---------------------+------------------------------+
| Variable_name | Value |
+---------------------+------------------------------+
| slow_query_log_file | var/lib/mysql/jier-slow.log |
+---------------------+------------------------------+
1 row in set (0.00 sec)

mysql>

修改该文件存放位置:

# 先创建该文件,并将属主属组修改成mysql
[root@jier ~]# touch home/mysql-slow.log
[root@jier ~]# chown mysql:mysql home/mysql-slow.log

# 然后执行以下语句来修改,并验证是否生效了。
mysql> set GLOBAL slow_query_log_file='/home/mysql-slow.log';
Query OK, 0 rows affected (0.00 sec)

mysql> show VARIABLES like 'slow_query_log_file';
+---------------------+----------------------+
| Variable_name | Value |
+---------------------+----------------------+
| slow_query_log_file | home/mysql-slow.log |
+---------------------+----------------------+
1 row in set (0.00 sec)

mysql>

3、慢SQL
文件简单分析

如下是一个慢sql
文件中记载内容的示例;

# Time: 2023-05-11T09:44:52.481135Z
# User@Host: devdb[devdb] @  [192.168.121.251]  Id: 2099943
# Query_time: 8.165586  Lock_time: 0.000027 Rows_sent: 0  Rows_examined: 171249
SET timestamp=1657532692;
DELETE FROM `order_202207`;

以下为释义:

Time # sql开始执行的时间
User@Host # 执行sql的主机信息
Query_time # sql的查询时间
Lock_time  # 锁定时间
Rows_sent  # 所影响的行数
Rows_examined  # 扫描的行数

以上即为本章内容。

文章转载自运维家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论