0

0

mysql升级后的慢查询日志与性能分析

P粉602998670

P粉602998670

发布时间:2026-01-06 10:42:48

|

946人浏览过

|

来源于php中文网

原创

MySQL 8.0+慢查询日志默认关闭且输出至系统表,需显式设log_output='FILE'并配置slow_query_log_file才能写入文件;log_slow_extra开启后格式变更导致mysqldumpslow解析失败,须用8.0+版本或pt-query-digest。

mysql升级后的慢查询日志与性能分析

MySQL 8.0+ 慢查询日志默认关闭且格式变更

MySQL 5.7 升级到 8.0 后,slow_query_log 默认值从 ON 变为 OFF,且日志不再写入文件(除非显式配置),而是默认输出到系统表 mysql.slow_log(需启用 log_output = TABLE)。很多运维习惯性检查 /var/lib/mysql/hostname-slow.log 却发现文件为空,就是这个原因。

  • 确认当前状态:
    SELECT @@slow_query_log, @@long_query_time, @@log_output;
  • 若要恢复文件输出,必须同时设置:
    SET GLOBAL slow_query_log = ON;
    SET GLOBAL log_output = 'FILE';
    SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
  • long_query_time 在 MySQL 8.0 中默认仍是 10.0 秒,但注意:该阈值现在按**微秒精度**判断(内部以微秒存储),且对包含锁等待的语句更敏感;实际生效值建议用 SELECT @@long_query_time; 确认,避免因会话级覆盖导致误判

mysqldumpslow 解析失败:日志格式不兼容

MySQL 8.0 的慢查询日志(尤其是开启 log_slow_extra 后)新增了 Rows_examinedLock_timeQuery_time 等字段,并采用键值对格式(如 # Rows_examined: 12345),而传统 mysqldumpslow(来自 MySQL 5.x 工具包)无法识别这些行,直接跳过或报错解析失败。

  • 验证日志格式是否含 extra 字段:
    head -n 20 /var/log/mysql/mysql-slow.log | grep -E '^(# Time|Rows_examined|Lock_time)'
  • 解决方法只有两个:
    – 使用 MySQL 8.0 自带的 mysqldumpslow(路径通常是 /usr/bin/mysqldumpslow,确保版本 ≥ 8.0)
    – 或改用更现代的分析工具,如 pt-query-digest(Percona Toolkit),它原生支持 8.0 日志格式,且能聚合 microsecond 级时间、识别 prepared statement 占位符
  • 若坚持用 mysqldumpslow,必须关闭 log_slow_extra
    SET GLOBAL log_slow_extra = OFF;
    ,但这会丢失关键性能上下文(如是否命中索引、扫描行数等)

performance_schema.events_statements_summary_by_digest 不替代 slow_log

有人以为启用 performance_schema 就不用开慢日志了,这是误解。events_statements_summary_by_digest 表只保留最近的聚合摘要(受 performance_schema_digests_size 限制,默认 2000 条),且不记录原始 SQL 文本(仅 digest hash)、无详细时间戳、不保存执行计划信息。它适合实时监控 TOP SQL,但无法替代慢日志做归档分析或复现问题。

CRMEB Min开源商城
CRMEB Min开源商城

CRMEB Min是CRMEB品牌全新推出的一款轻量级、高性能、前后端分离的开源电商系统,完善的后台权限管理、会员管理、订单管理、产品管理、客服系统、CMS管理、多端管理、页面DIY、数据统计、系统配置、组合数据管理、日志管理、数据库管理,一键开通短信、产品采集、物流查询等接口,系统采用TP6+Mysql+Uniapp+iView+Redis+workerman+form-builder等最流行热

下载
  • 检查是否启用 digest 收集:
    SELECT * FROM performance_schema.setup_consumers WHERE NAME = 'statements_digest';
    (需为 ENABLED
  • 对比二者用途:
    – 慢日志:完整语句 + 精确时间 + 错误码 + 扫描行数 → 用于根因分析、审计、合规
    events_statements_summary_by_digest:按 digest 分组的平均耗时/次数 → 用于发现高频低效模式
  • 两者可并存,但不要互相替代;尤其在升级后,务必确认 slow_query_log 已打开,否则可能漏掉偶发长事务或单次超时查询

升级后 log_queries_not_using_indexes 行为变化

该参数在 MySQL 8.0 中依然存在,但触发条件更严格:仅当语句满足「未使用任何索引」且「全表扫描行数 ≥ min_examined_row_limit」(默认 0)时才记录。更重要的是,它**不记录**使用了索引但效率低下的情况(如索引选择性差、回表过多),这类问题在 8.0 中更依赖 log_slow_extra 中的 Rows_examinedRows_sent 对比来发现。

  • 检查是否启用:
    SELECT @@log_queries_not_using_indexes, @@min_examined_row_limit;
  • 常见误判场景:
    SELECT * FROM t WHERE status = ?(status 列有索引但基数极低)→ 不触发此日志,但实际很慢
    – 此时应关注慢日志中 Rows_examined: 1000000Rows_sent: 10 的巨大差异
  • 建议组合使用:
    SET GLOBAL log_slow_extra = ON;
    SET GLOBAL long_query_time = 1;
    SET GLOBAL log_queries_not_using_indexes = ON;
    ,再配合 pt-query-digest --filter '$event->{Rows_examined} > 10000' 定向筛查

慢查询日志不是“开了就行”,MySQL 8.0 把它从一个简单开关变成了需要理解字段语义、输出通道、工具链兼容性的性能基础设施。最容易被忽略的是 log_output 的默认值和 log_slow_extra 带来的格式断裂——这两点不手动确认,日志就等于没开。

相关文章

数码产品性能查询
数码产品性能查询

该软件包括了市面上所有手机CPU,手机跑分情况,电脑CPU,电脑产品信息等等,方便需要大家查阅数码产品最新情况,了解产品特性,能够进行对比选择最具性价比的商品。

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
数据分析工具有哪些
数据分析工具有哪些

数据分析工具有Excel、SQL、Python、R、Tableau、Power BI、SAS、SPSS和MATLAB等。详细介绍:1、Excel,具有强大的计算和数据处理功能;2、SQL,可以进行数据查询、过滤、排序、聚合等操作;3、Python,拥有丰富的数据分析库;4、R,拥有丰富的统计分析库和图形库;5、Tableau,提供了直观易用的用户界面等等。

676

2023.10.12

SQL中distinct的用法
SQL中distinct的用法

SQL中distinct的语法是“SELECT DISTINCT column1, column2,...,FROM table_name;”。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

320

2023.10.27

SQL中months_between使用方法
SQL中months_between使用方法

在SQL中,MONTHS_BETWEEN 是一个常见的函数,用于计算两个日期之间的月份差。想了解更多SQL的相关内容,可以阅读本专题下面的文章。

346

2024.02.23

SQL出现5120错误解决方法
SQL出现5120错误解决方法

SQL Server错误5120是由于没有足够的权限来访问或操作指定的数据库或文件引起的。想了解更多sql错误的相关内容,可以阅读本专题下面的文章。

1092

2024.03.06

sql procedure语法错误解决方法
sql procedure语法错误解决方法

sql procedure语法错误解决办法:1、仔细检查错误消息;2、检查语法规则;3、检查括号和引号;4、检查变量和参数;5、检查关键字和函数;6、逐步调试;7、参考文档和示例。想了解更多语法错误的相关内容,可以阅读本专题下面的文章。

356

2024.03.06

oracle数据库运行sql方法
oracle数据库运行sql方法

运行sql步骤包括:打开sql plus工具并连接到数据库。在提示符下输入sql语句。按enter键运行该语句。查看结果,错误消息或退出sql plus。想了解更多oracle数据库的相关内容,可以阅读本专题下面的文章。

674

2024.04.07

sql中where的含义
sql中where的含义

sql中where子句用于从表中过滤数据,它基于指定条件选择特定的行。想了解更多where的相关内容,可以阅读本专题下面的文章。

571

2024.04.29

sql中删除表的语句是什么
sql中删除表的语句是什么

sql中用于删除表的语句是drop table。语法为drop table table_name;该语句将永久删除指定表的表和数据。想了解更多sql的相关内容,可以阅读本专题下面的文章。

412

2024.04.29

PPT动态图表制作教程大全
PPT动态图表制作教程大全

本专题整合了PPT动态图表制作相关教程,阅读专题下面的文章了解更多详细内容。

13

2026.01.07

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.6万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 783人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号