栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

慢SQL查询日志

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

慢SQL查询日志

TIPS
本文基于MySQL 8.0,理论支持MySQL 5.0及更高版本。
本文来自于课程:《Java架构师体系课:跟随千万级项目从0到100全过程高效成长》

本文探讨慢SQL查询日志。

相关参数与默认值
参数 作用 默认值
log_output 日志输出到哪儿,默认FILE,表示文件;设置成TABLE,则将日志记录到mysql.slow_log中。也可设置多种格式,比如 FILE,TABLE FILE
long_query_time 执行时间超过这么久才记录到慢查询日志,单位秒,可使用小数表示小于秒的时间 10
log_queries_not_using_indexes 是否要将未使用索引的SQL记录到慢查询日志中,此配置会无视long_query_time的的配置。生产环境建议关闭;开发环境建议开启。 OFF
log_throttle_queries_not_using_indexes 和log_queries_not_using_indexes配合使用,如果log_queries_not_using_indexes打开,则该参数将限制每分钟写入的、未使用索引的SQL数量。 0
min_examined_row_limit 扫描行数至少达到这么多才记录到慢查询日志 0
log_slow_admin_statements 是否要记录管理语句,默认关闭。管理语句包括ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROp INDEX, OPTIMIZE TABLE, and REPAIR TABLE。 OFF
slow_query_log_file 指定慢查询日志文件路径 /var路径
log_slow_slave_statements 该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL。如果binlog格式是row,则该参数无效 OFF
log_slow_extra 当log_output=FILE时,是否要记录额外信息(MySQL 8.0.14开始提供),对log_output=TABLE的结果无影响。 OFF
使用方式

方式一、修改配置文件my.cnf,在[mysqld]段落中加入如上参数即可

例如:

[mysqld]
# ...
log_output = 'FILE,TABLE';
slow_query_log = ON
long_query_time = 0.001

然后重启MySQL,例如:

service mysqld restart

方式二、通过全局变量设置

这种方式无需重启即可生效,但一旦重启,配置又会丢失。

例如:

set global log_output = 'FILE,TABLE';
set global slow_query_log = 'ON';
set global long_query_time =0.001;

这样设置之后,就会将慢查询日志同时记录到文件以及mysql.slow_log表中。

分析慢查询日志 分析慢查询日志表

当log_output = TABLE时,可直接用如下语句分析:

select * from `mysql`.slow_log

然后按照条件做各种查询、统计、分析。

分析慢查询日志文件 mysqldumpslow

当log_output = FILE时,可使用mysqldumpslow分析

➜ mysqldumpslow --help
Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]

Parse and summarize the MySQL slow query log. Options are

  --verbose    verbose
  --debug      debug
  --helpwrite this text to standard output

  -v    展示更详细的信息
  -d    debug
  -s ORDER     以哪种方式排序,默认at
  al: 平均锁定时间
  ar: 平均返回记录数
  at: 平均查询时间
   c: 访问计数
   l: 锁定时间
   r: 返回记录
   t: 查询时间
  -r    将-s的排序倒序
  -t NUMtop n的意思,展示最前面的几条
  -a    不去将数字展示成N,将字符串展示成'S'
  -n NUMabstract numbers with at least n digits within names
  -g PATTERN   后边可以写一个正则,只有符合正则的行会展示
  -h HOSTNAME  慢查询日志以 主机名-slow.log的格式命名,-h可指定读取指定主机名的慢查询日志,默认情况下是*,读取所有的慢查询日志
  -i NAME      MySQL Server的实例名称(如果使用了mysql.server startup脚本的话)
  -l    不将锁定时间从总时间中减去

示例:

# 得到返回记录集最多的10条SQL
mysqldumpslow -s r -t 10 /var/lib/mysql/8945073c23e0-slow.log

# 得到按照查询时间排序,并且带有left join的10条SQL
mysqldumpslow -s t -t 10 -g “left join” /var/lib/mysql/8945073c23e0-slow.log
pt-query-digest

出MySQL自带的mysqldumpslow外,也可以用pt_query_digest分析慢查询日志文件。pt-query-digest是Percona公司开发的工具,是Percona Toolkit工具套件中的工具之一。本文暂不展开,后面专门探讨Percona Tookit如何使用吧。

参考文档

The Slow Query Log


学习更多:
慕课网为大家准备了一门按演进思路进行讲授的课程:《Java架构师体系课:跟随千万级项目从0到100全过程高效成长》 希望能够帮助大家在演进的过程跟随千万级项目从0到100全过程高效成长。

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号