MySQL基础:参数调优:6:使用慢查询定位性能瓶颈

本文介绍了MySQL慢查询日志的基础知识和使用方法,通过实例展示了如何打开、设置阈值以及如何根据设定建议进行性能调优。通过调整long_query_time参数,定位数据库操作超过特定时间的慢查询,以解决性能问题。
摘要由CSDN通过智能技术生成

MySQL提供了慢查询可以快速定位性能瓶颈,这篇文章通过具体的示例来介绍一下如何设定方法。

基础知识

慢查询是MySQL的一种基本日志,详细信息可参看。

使用示例

接下来在一个具体的调优示例中展示一下如何使用慢查询

确认慢查询状态

可以看到缺省状态下,慢查询是关闭的状态。

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

mysql> 

打开慢查询

通过执行set global slow_query_log=1则打开了慢查询日志

mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.02 sec)

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

mysql> 

而查询日志的详细信息保存在slow_query_log_file所设定的文件里

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

mysql>

此文件缺省状况下会放到mysql数据目录下,名称为hostname-slow.log,由于本文示例的mysql在容器中运行,所以显示的日志名称为6436efce6f31-slow.log,此时刚刚打开,可以确认已经生成了如下内容:

# cat /var/lib/mysql/6436efce6f31-slow.log
mysqld, Version: 5.7.16 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# 

设定阈值

从生成的慢查询日志并未看到有用的信息,慢查询的定义,多慢算慢,则是通过long_query_time来确认的,该值的单位为秒。

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

mysql> 

由于缺省值设定为10秒,对于数据库操作超过10秒的非常之少,所以没有看到有用的信息,接下来我们将此值设定为200毫秒,即0.2

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

mysql>

退出当前的mysql终端,重新进入并确认,发现已经生效

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

mysql> 

设定建议

  • 修改配置文件

为了能够持久化的保持,而不至于重启或者容器重新生成后恢复默认状态,需要设定到配置文件中。

  • 官方的mysql镜像配置文件:/etc/mysql/mysql.conf.d/mysqld.cnf
  • 建议设定示例(数据库操作超过100毫秒认为是慢查询,可根据需要进行设定,如果过多,可逐步设定,比如先行设定为2秒,逐渐降低来确认瓶颈所在)
# slow query setting
slow_query_log=1
long_query_time=0.1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值