配置
建议通过使用
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条信息.
- 执行时区时间.
- 连接用户,线程id.
- 执行时间,使用锁时间,返回数据行,扫描到数据行.
- 使用的数据库.
- 执行时间戳
- 执行语句
# 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.