配置

建议通过使用set global show_query_log=on来开启慢查询.

配置参数说明
show_query_log启动慢查询日志
show_query_log_file慢查询日志存储路径
log_query_time记录超过执行时间的SQL
log_queries_not_using_indexes记录未使用索引的SQL

使用

-- 查询满查询配置
MySQL [(none)]> show variables like '%query%';
+------------------------------+----------------------------+
| Variable_name                | Value                      |
+------------------------------+----------------------------+
| binlog_rows_query_log_events | OFF                        |
| ft_query_expansion_limit     | 20                         |
| have_query_cache             | YES                        |
| long_query_time              | 1.000000                   |
| query_alloc_block_size       | 8192                       |
| query_cache_limit            | 2097152                    |
| query_cache_min_res_unit     | 4096                       |
| query_cache_size             | 8388608                    |
| query_cache_type             | ON                         |
| query_cache_wlock_invalidate | OFF                        |
| query_prealloc_size          | 8192                       |
| slow_query_log               | ON                         |
| slow_query_log_file          | /data/mysql/mysql-slow.log |
+------------------------------+----------------------------+
-- 查询是否记录未使用索引配置
MySQL [(none)]> show variables like 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
-- 开启log_queries_not_using_indexes
set global log_queries_not_using_indexes=on;

查看日志

一条慢查询日志包含了6条信息.

  1. 执行时区时间.
  2. 连接用户,线程id.
  3. 执行时间,使用锁时间,返回数据行,扫描到数据行.
  4. 使用的数据库.
  5. 执行时间戳
  6. 执行语句
# Time: 2020-03-09T09:11:27.542369Z
# User@Host: root[root] @ localhost []  Id:  9687
# Query_time: 0.001755  Lock_time: 0.000860 Rows_sent: 2  Rows_examined: 2
use angel;
SET timestamp=1583745087;
select * from angel_users;

分析工具

mysqldumpslow为mysql自带的慢查询分析工具.可直接使用.

参数说明

-s:按照什么样的方式排序

可指定参数说明
c总次数
t总时间
l锁时间
r总数据行
at平均时间=总时间/总次数
al平均锁时间
ar平均行

-t:输出多少条信息

-g:表达式

使用

# 语法示例
mysqldumpslow -s a -t 100 -g 'angel' /data/mysql/mysql-slow.log

Reading mysql slow query log from /data/mysql/mysql-slow.log
Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=1.0 (1), root[root]@localhost
  select user from angel_users limit N

Count: 1  Time=0.00s (0s)  Lock=0.00s (0s)  Rows=2.0 (2), root[root]@localhost
  select * from angel_users

Died at /usr/local/mysql/bin/mysqldumpslow line 167, <> chunk 3.
Last modification:March 10th, 2020 at 07:04 pm