mysql慢查询

数据库的慢查询是影响项目性能的一大因素,对于数据库我们要优化SQL,首先要找到需要优化的SQL,这就需要我们知道sql执行时间等信息,除了使用SHOW PROFILES;外,mysql也提供了“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到症结所在,以便对症下药。

一、慢查询配置

关于慢查询日志,主要涉及三个参数:

  • slow_query_log :是否开启慢查询日志功能(必填)

  • long_query_time :超过设定值,将被视作慢查询,并记录至慢查询日志文件中(必填)

  • slow_query_log_file :慢查询日志文件(不必填),可以通过show variables like '%slow_query%';查询日志位置

打开慢查询日志有两种方式:

1. 通过命令行

不需要重启命令行,临时性的,退出mysql终端就失效。

# 以下操作管理员才有权限

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

# 设置查询“超时”时间(这里为了方便日志打印,将超过0.001s的都作为慢查询)
mysql> set GLOBAL long_query_time = 0.001;
Query OK, 0 rows affected (0.00 sec)

2. 通过配置文件

需要重启mysql

二、慢日志查询

如果操作正确,那么在日志里面就会看到类似下面的:

当慢查询日志不断增大时,mysqldumpslow命令可以帮助DBA更方便的格式化查询日志,比如下面这个就是得到执行时间最长的10条sql语句:

mysql5.0.1开始将慢查询的日志放在mysql.slow_log表中。

参数log_output指定了慢查询日志的输出格式,默认为file,改为TABLE就可以将慢查询日志存储到mysql.slow_log了。

Last updated

Was this helpful?