mysql开启慢查询日志

22 篇文章 1 订阅
15 篇文章 0 订阅

mysql开启慢查询日志

1、MySQL慢查询日志是什么

  • MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录MySQL中查询时间超过(大于)设置阈值(long_query_time)的语句,记录到慢查询日志中。

  • long_query_time的默认值是10。

2、如何开启MySQL慢查询日志

查看slow_query_log变量,默认是关闭的。

Last login: Fri Apr 15 16:21:56 2022 from 113.246.155.177
[root@VM-8-8-centos ~]# docker exec -it mysql8  /bin/bash
root@7af813d2f903:/# mysql -uroot -p
mysql> show variables like '%quer%';
+----------------------------------------+--------------------------------------+
| Variable_name                          | Value                                |
+----------------------------------------+--------------------------------------+
| binlog_rows_query_log_events           | OFF                                  |
| ft_query_expansion_limit               | 20                                   |
| have_query_cache                       | NO                                   |
| log_queries_not_using_indexes          | OFF                                  |
| log_throttle_queries_not_using_indexes | 0                                    |
| long_query_time                        | 10.000000                            |
| query_alloc_block_size                 | 8192                                 |
| query_prealloc_size                    | 8192                                 |
| slow_query_log                         | OFF                                  |
| slow_query_log_file                    | /var/lib/mysql/7af813d2f903-slow.log |
+----------------------------------------+--------------------------------------+
10 rows in set (0.00 sec)

临时开启

-- 开启慢查询日志,只对当前数据库生效,并且重启数据库后失效
set global slow_query_log = 1;

查询时间超过多久才算慢查询

-- 查看慢查询日志的阈值,默认10s
show variables like '%long_query_time%';

临时设置阈值

set long_query_time = 3;

配置永久生效

生产环境不建议一直打开,影响性能。测试的时候或者线上排查可以打开。

[mysqld]
slow_query_log=1
slow_query_log_file=/var/lib/mysql/dbcaptin-slow.log
long_query_time=5
log_output=FILE

查询当前系统有多少条慢查询记录

show global status like '%Slow_queries%';

模拟慢查询sql

select sleep(5);

查看记录慢查询sql的文件

mysql> select sleep(5);
+----------+
| sleep(5) |
+----------+
|        0 |
+----------+
1 row in set (5.00 sec)

mysql> show global status like '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 1     |
+---------------+-------+
1 row in set (0.00 sec)
-----------------------------------------------------------------------
root@7af813d2f903:/# cat /var/lib/mysql/dbcaptin-slow.log
/usr/sbin/mysqld, Version: 8.0.27 (MySQL Community Server - GPL). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
# Time: 2022-04-18T03:15:00.431553Z
# User@Host: root[root] @ localhost []  Id:     8
# Query_time: 5.000232  Lock_time: 0.000000 Rows_sent: 1  Rows_examined: 1
SET timestamp=1650251695;
select sleep(5);

3.如何分析慢查询日志

慢查询日志多了,不利于我们进行分析。mysqldumpslow能将相同的慢SQL归类,并统计出相同的SQL执行的次数,每次执行耗时多久、总耗时,每次返回的行数、总行数,以及客户端连接信息等。

root@7af813d2f903:/# mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

  --verbose    verbose
  --debug      debug
  --help       write this text to standard output

  -v           verbose
  -d           debug
  -s ORDER     what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time
                ar: average rows sent
                at: average query time
                 c: count
                 l: lock time
                 r: rows sent
                 t: query time  
  -r           reverse the sort order (largest last instead of first)
  -t NUM       just show the top n queries
  -a           don't abstract all numbers to N and strings to 'S'
  -n NUM       abstract numbers with at least n digits within names
  -g PATTERN   grep: only consider stmts that include this string
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all
  -i NAME      name of server instance (if using mysql.server startup script)
  -l           don't subtract lock time from total time

各参数功能

参数说明
-s表示按何种方式排序。
c访问次数。
l锁定时间。
r返回记录。
t查询时间。
al平均锁定时间。
ar平均返回记录数。
at平均查询时间。
-t返回前面多少条数据。
-g后面搭配一个正则匹配模式,大小写不敏感。

得到返回记录集最多的10 个SQL

mysqldumpslow -s r -t 10 /var/lib/mysql/dbcaptin-slow.log

得到访问次数最多的10 个SQL

mysqldumpslow -s c -t 10 /var/lib/mysql/dbcaptin-slow.log
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值