欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

mysql慢查询日志

程序员文章站 2022-06-02 12:15:19
...

问题: 如何发现查询慢的语句???
mysql提供慢查询日志功能,如果查询超过一定的阈值,就会记录下来!这样便于我们分析系统慢的原因。

查看慢查询日志功能是否开启:

MariaDB [(none)]> show variables like 'slow_query_log'
    -> ;//
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+

如上显示我的数据库的慢查询功能是关闭的。

如何开启慢查询日志功能;

在mysql的启动配置文件中进行配置,我以前的问题中提到过,如何查找mysql的启动配置文件,如何检验是否生效。

在[mysqld] 项目下添加如下配置

slow_query_log=1
slow-query-log-file=/Users/wangqiupeng/mysql_slow.log
long_query_time = 1
log-queries-not-using-indexes = true

下面对以上进行说明:

slow_query_log =1 代表开启 0代表关闭
slow-query-log-file 代表日期存放的位置
long_query_time 慢查询的阈值,多少秒才算慢查询? 注意单位是秒如果想表示毫秒 0.1代表100毫秒
log-queries-not-using-indexes = true 代表没有走索引的查询也会写入日志中

如上我们配置了以后执行查询看下效果:

MariaDB [prf]> select count(1) from test_myisam where status =1;
+----------+
| count(1) |
+----------+
|  1997133 |
+----------+
1 row in set (1.76 sec)

这个查询消耗了1.76秒,自然大于1秒,慢查询日志中应该进行显示
现在查看慢查询日志,显示如下,这样我们能够分析这个sql进一步定义问题了。

ss:~ wqp$ cat mysql_slow.log
/usr/local/Cellar/mariadb/10.1.13/bin/mysqld, Version: 10.1.13-MariaDB (Homebrew). started with:
Tcp port: 3306  Unix socket: /tmp/mysql.sock
Time                 Id Command    Argument
# Time: 160730 14:58:02
# [email protected]: root[root] @ localhost []
# Thread_id: 4  Schema: prf  QC_hit: No
# Query_time: 1.856922  Lock_time: 0.004052  Rows_sent: 1  Rows_examined: 6000006
# Rows_affected: 0
use prf;
SET timestamp=1469861882;
select count(1) from test_myisam where status =1;