前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL 慢SQL查询

MySQL 慢SQL查询

原创
作者头像
dumpcat
修改2022-07-08 10:54:41
5140
修改2022-07-08 10:54:41
举报
文章被收录于专栏:数据库技术数据库技术

慢查询日志主要用来记录在MySQL数据库中执行时间超过指定阈值时间的查询语句。通过慢查询日志查找出效率底下的SQL语句,并根据需要进行优化。慢查询日志是排查SQL语句性能问题的工具,如果非优化需求不建议开启,开启后会对数据库的性能带来一定影响。


1. 默认情况下慢查询日志关闭的,可以使用以下命令来查看慢查询日志的状态、位置及记录阈值。

代码语言:javascript
复制
# 慢查询日志的状态和位置
mysql> SHOW VARIABLES LIKE 'slow_query%';
+---------------------+---------------------------------------+
| Variable_name       | Value                                 |
+---------------------+---------------------------------------+
| slow_query_log      | OFF                                   |
| slow_query_log_file | /var/lib/mysql/VM-4-4-centos-slow.log |
+---------------------+---------------------------------------+

# 慢查询日志的记录阈值
mysql> SHOW VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+

2. 在当前实例中开启慢查询日志(重启数据库会失效)

代码语言:javascript
复制
# 开启慢查询日志
mysql> set global slow_query_log = on;
Query OK, 0 rows affected (0.01 sec)

# 查看开启后的慢查询日志状态
mysql> SHOW VARIABLES LIKE 'slow_query%';
+---------------------+---------------------------------------+
| Variable_name       | Value                                 |
+---------------------+---------------------------------------+
| slow_query_log      | ON                                    |
| slow_query_log_file | /var/lib/mysql/VM-4-4-centos-slow.log |
+---------------------+---------------------------------------+

# 设置慢查询日志的阈值,单位为秒
mysql> set global long_query_time = 1;
Query OK, 0 rows affected (0.00 sec)

# 重新连接会话才能看到修改后的值
mysql> SHOW VARIABLES LIKE 'long_query_time';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+

3. 查看慢查询日志的记录

代码语言:javascript
复制
# 执行查询
mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.02 sec)

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.02 sec)

mysql> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+
1 row in set (0.01 sec)

# 慢查询日志
# Time: 2022-07-08T02:07:39.972786Z
# User@Host: root[root] @ localhost []  Id:    40
# Query_time: 0.014260  Lock_time: 0.000085 Rows_sent: 1  Rows_examined: 100000
use helloworld;
SET timestamp=1657246059;
select count(*) from sbtest1;
# Time: 2022-07-08T02:07:40.903657Z
# User@Host: root[root] @ localhost []  Id:    40
# Query_time: 0.015279  Lock_time: 0.000094 Rows_sent: 1  Rows_examined: 100000
SET timestamp=1657246060;
select count(*) from sbtest1;
# Time: 2022-07-08T02:07:41.757439Z
# User@Host: root[root] @ localhost []  Id:    40
# Query_time: 0.013896  Lock_time: 0.000085 Rows_sent: 1  Rows_examined: 100000
SET timestamp=1657246061;
select count(*) from sbtest1;

4. 永久开启慢查询日志

代码语言:javascript
复制
# 修改my.conf,在mysqld组种加入以下配置
[mysqld]

# dir是指具体的目录,filename是指具体的文件名称,如:/var/lib/mysql/VM-4-4-centos-slow.log
log-slow-queries=dir/filename

# t指的是具体阈值的时间,单位是秒
long_query_time=t

5. 慢查询日志清理

代码语言:javascript
复制
# 清理命令
[root@VM-4-4-centos mysql]# mysqladmin -uroot -p flush-logs

# 查看清理结果
[root@VM-4-4-centos mysql]# tail -f VM-4-4-centos-slow.log 
SET timestamp=1657246060;
select count(*) from sbtest1;
# Time: 2022-07-08T02:07:41.757439Z
# User@Host: root[root] @ localhost []  Id:    40
# Query_time: 0.013896  Lock_time: 0.000085 Rows_sent: 1  Rows_examined: 100000
SET timestamp=1657246061;
select count(*) from sbtest1;
/usr/sbin/mysqld, Version: 5.7.32 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 慢查询日志主要用来记录在MySQL数据库中执行时间超过指定阈值时间的查询语句。通过慢查询日志查找出效率底下的SQL语句,并根据需要进行优化。慢查询日志是排查SQL语句性能问题的工具,如果非优化需求不建议开启,开启后会对数据库的性能带来一定影响。
  • 1. 默认情况下慢查询日志关闭的,可以使用以下命令来查看慢查询日志的状态、位置及记录阈值。
  • 2. 在当前实例中开启慢查询日志(重启数据库会失效)
  • 3. 查看慢查询日志的记录
  • 4. 永久开启慢查询日志
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档