Mysql慢查询日志

11 篇文章 0 订阅
6 篇文章 0 订阅

概念

  • Mysql的慢查询是一种日志, 主要用于记录 Mysql中响应时间超过设定的阀值的语句.

常用参数

类型说明默认值
slow_query_log是否开启慢查询日志OFF
slow_query_log_file配置慢查询日志存储路径(版本5.6及以上版本)host_name-slow.log
long_query_time慢查询阈值,当查询时间大于设定的阈值时,记录日志10.000000(秒)
log_queries_not_using_indexes未使用索引的查询也被记录到慢查询日志中OFF
log_output日志存储方式FILE

查询与设定

  1. slow_query_log
  • 开启: 1/ON, 关闭: 0/OFF

mysql> SHOW VARIABLES LIKE 'slow_query_log';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set

mysql> SET GLOBAL slow_query_log=1;
Query OK, 0 rows affected

  1. slow_query_log_file

mysql> SHOW VARIABLES LIKE 'slow_query_log_file';
+---------------------+--------------------------+
| Variable_name       | Value                    |
+---------------------+--------------------------+
| slow_query_log_file | DESKTOP-HCBV7NE-slow.log |
+---------------------+--------------------------+
1 row in set

mysql> SET GLOBAL slow_query_log_file="/tmp/mysql_slow.log";
Query OK, 0 rows affected

  1. long_query_time

mysql> SHOW VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set

mysql> SET GLOBAL long_query_time=5.555555;
Query OK, 0 rows affected

  1. log_queries_not_using_indexes

mysql> SHOW VARIABLES LIKE 'log_queries_not_using_indexes';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | OFF   |
+-------------------------------+-------+
1 row in set

mysql> SET GLOBAL log_queries_not_using_indexes=ON;
Query OK, 0 rows affected

  1. log_output
  • FILE表示将日志存入到文件
  • TABLE表示将日志存入到 mysql.slow_log表中
  • FILE,TABLE同时支持两种日志存储

mysql> SHOW VARIABLES LIKE 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output    | FILE  |
+---------------+-------+
1 row in set

mysql> SET GLOBAL log_output='FILE,TABLE';
Query OK, 0 rows affected

注: 通过 SET GLOBAL设定的值,查询时需重新连接会话再 SHOW VARIABLES LIKE才会显示更改后的状态,或使用 SHOW GLOBAL VARIABLES LIKE查询的话无需重新连接
注: 通过 SET GLOBAL设定的值,一旦数据库重启将会失效.如果需要永久生效,就必须配置到 my.cnf

查询慢查询记录数


mysql> SHOW GLOBAL STATUS LIKE '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 111   |
+---------------+-------+
1 row in set

mysqldumpslow工具

  • 从慢查询日志中筛选日志

$ 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, ae, c, l, r, e, t), 'at' is default
                al: average lock time 平均锁定时间
                ar: average rows sent 平均访问记录数
                at: average query time 平均查询时间
                aa: average rows affected
                 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

  • 得到返回记录最多的20个查询语句
    mysqldumpslow -s r -t 20 sqlslow.log
  • 得到访问次数最多的10个查询语句
    mysqldumpslow -s c -t 10 sqlslow.log
  • 得到按照时间排序的前10条里面含有左连接的查询语句
    mysqldumpslow -s t -t 10 -g “left join” sqlslow.log
  • 建议结合 | more使用, 避免出现刷屏的情况
    mysqldumpslow -s r -t 10 sqlslow.log | more

如果您觉得有帮助,欢迎点赞哦 ~ 谢谢!!

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
MySQL 慢查询日志可以记录执行时间超过指定阈值的 SQL 查询语句,用于帮助 DBA 或开发者监控和优化 SQL 查询性能。 以下是 MySQL 慢查询日志分析的一般步骤: 1. 开启 MySQL 慢查询日志。在 MySQL 配置文件中设置 `slow_query_log` 参数为 `ON`,并指定 `slow_query_log_file` 参数为日志文件路径。 2. 查看慢查询日志。可以使用 `mysqldumpslow` 工具或者其他第三方工具来查看慢查询日志,例如: ``` mysqldumpslow -s t /path/to/slow_query_log_file ``` 上面的命令会按照时间排序并显示执行时间最长的 SQL 查询语句。 3. 分析慢查询语句。对于执行时间较长的 SQL 查询语句,可以进行如下分析: - 检查 SQL 查询语句是否存在索引。可以使用 `EXPLAIN` 命令或者其他第三方工具来查看 SQL 查询语句的执行计划,判断是否存在全表扫描或者索引失效等问题。 - 检查 SQL 查询语句的优化方式。可以考虑对 SQL 查询语句进行重构,使用更优的语法或者查询方式,例如使用 JOIN、子查询等方式来替代多次查询。 - 检查 MySQL 数据库的配置参数。可以根据查询语句的特点来调整 MySQL 数据库的配置参数,例如 `innodb_buffer_pool_size`、`max_connections`、`query_cache_size` 等参数。 4. 优化慢查询语句。根据分析结果,对 SQL 查询语句、MySQL 数据库配置参数等进行优化,提高查询性能。 总之,MySQL 慢查询日志分析需要结合实际情况和经验进行,需要不断地监控和优化,以提高 MySQL 数据库的性能和稳定性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值