mysql慢查询异常如何处理_mysql性能问题定位
发布时间 - 2026-02-02 00:00:00 点击率:次确认慢查询日志是否开启需检查三要素:slow_query_log必须为ON,slow_query_log_file路径可写且MySQL有权限,long_query_time设为合理值(如1或0.5);再用SHOW VARIABLES验证,若为OFF需SET GLOBAL启用并同步更新my.cnf。
如何确认慢查询日志是否真正开启并生效
很多情况下你以为开了慢查询,其实只是配置写了但没 reload 或根本没生效。关键看三件事:slow_query_log 必须为 ON,slow_query_log_file 路径可写且 MySQL 进程有权限,long_query_time 值要合理(比如设成 1 而不是默认的 10,否则多数业务慢 SQL 都不会记录)。
执行这条命令验证:
SHOW VARIABLES LIKE 'slow_query_log';
如果返回 OFF,光改配置文件没用,得执行:
SET GLOBAL slow_query_log = ON;
注意:该命令重启后失效,必须同步更新 my.cnf 中的 [mysqld] 段落。
-
long_query_time是按秒计的浮点数,设0.5表示记录所有超过 500ms 的查询 - MySQL 5.7+ 支持
log_queries_not_using_indexes,但开启后日志量暴增,仅调试期临时启用 - 日志文件路径若为相对路径(如
slow.log),实际会写到datadir下,不是当前目录
用 pt-query-digest 快速定位 Top SQL
直接打开慢日志看文本效率极低。pt-query-digest 是 Percona Toolkit 中最实用的分析工具,它能聚合、排序、统计响应时间分布,并给出索引建议。
基础用法:
pt-query-digest /var/lib/mysql/slow.log
常用参数:
-
--limit 10:只看耗时最高的 10 条 -
--filter '$event->{Bytes} > 1024':过滤掉返回数据量太小的查询(可能只是 debug 语句) -
--since "2025-06-01 00:00:00":限定时间范围,避免全量扫描 -
--no-report+--print:输出原始 SQL,方便复制进客户端重跑
注意:pt-query-digest 默认按 Query Time 排序,但有时 Lock Time 或 Rows_examined 更能暴露问题——比如一条 SQL 执行快但锁了 3 秒,或扫描了 200 万行只返回 1 行。
EXPLAIN 结果里哪些字段最值得盯
拿到可疑 SQL 后,别急着加索引,先看 EXPLAIN FORMAT=TRADITIONAL 输出。重点关注这四个字段:
-
type:值为ALL或index就是全表/全索引扫描,基本要优化;range、ref、const较健康 -
key:显示实际使用的索引名。如果为NULL,说明没走索引(可能是隐式类型转换、函数包裹字段、or 条件未命中索引等) -
rows:预估扫描行数。如果远大于结果集行数(比如rows=124800但SELECT COUNT(*)只有 1300),说明索引选择性差或统计信息过期 -
Extra:出现Using filesort或Using temporary是严重信号,意味着排序/分组无法利用索引完成
执行前记得更新统计信息:
ANALYZE TABLE orders;
为什么加了索引查询还是慢
常见原因不是没索引,而是索引没被用上,或者用了但效果差。典型场景包括:
- WHERE 条件中对字段做了函数操作,例如
WHERE YEAR(create_time) = 2025→ 改成WHERE create_time BETWEEN '2025-01-01' AND '2025-12-31' - 字符集不一致导致隐式转换,比如
utf8mb4列和utf8参数比较 → 统一字符集,或显式COLLATE - 联合索引顺序错位,比如索引是
(a,b,c),但查询只用了b = ?和c = ?→ 无法命中该索引 - MySQL 认为走索引比全表扫更慢(比如表小、缓存热),强制走索引可用
FORCE INDEX测试,但属临时手段
复杂查询建议拆成多个简单查询,尤其涉及多表 JOIN + GROUP BY + LIMIT 的场景——MySQL 优化器容易选错执行计划,而应用层合并结果往往更可控。
# mysql
# 工具
# ai
# 配置文件
# 隐式类型转换
# 隐式转换
# 为什么
# sql
# print
# NULL
# count
# select
# format
# Filter
# const
# using
# Event
# 类型转换
# 统计信息
# 若为
# 行数
# 同步更新
# 隐式
# 多个
# 设为
# 开了
# 这条
# 用了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
利用JavaScript实现拖拽改变元素大小
香港网站服务器数量如何影响SEO优化效果?
如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】
Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
Laravel怎么上传文件_Laravel图片上传及存储配置
非常酷的网站设计制作软件,酷培ai教育官方网站?
实例解析angularjs的filter过滤器
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
如何在云服务器上快速搭建个人网站?
网站制作壁纸教程视频,电脑壁纸网站?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
企业在线网站设计制作流程,想建设一个属于自己的企业网站,该如何去做?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
Python文件流缓冲机制_IO性能解析【教程】
Laravel如何使用缓存系统提升性能_Laravel缓存驱动和应用优化方案
如何挑选最适合建站的高性能VPS主机?
如何在 Python 中将列表项按字母顺序编号(a.、b.、c. …)
如何在万网自助建站平台快速创建网站?
微信小程序 wx.uploadFile无法上传解决办法
Laravel Debugbar怎么安装_Laravel调试工具栏配置指南
Win11怎么关闭透明效果_Windows11辅助功能视觉效果设置
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
Python3.6正式版新特性预览
javascript基本数据类型及类型检测常用方法小结
如何在宝塔面板创建新站点?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
EditPlus 正则表达式 实战(3)
Laravel模型关联查询教程_Laravel Eloquent一对多关联写法
香港服务器如何优化才能显著提升网站加载速度?
昵图网官方站入口 昵图网素材图库官网入口
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程
Laravel如何实现本地化和多语言支持?(i18n教程)
Laravel Sail是什么_基于Docker的Laravel本地开发环境Sail入门
JavaScript模板引擎Template.js使用详解
Laravel怎么集成Vue.js_Laravel Mix配置Vue开发环境
Laravel路由怎么定义_Laravel核心路由系统完全入门指南
Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程
php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】
,怎么在广州志愿者网站注册?
如何选择PHP开源工具快速搭建网站?
如何在IIS中新建站点并配置端口与物理路径?
Python图片处理进阶教程_Pillow滤镜与图像增强
高防服务器租用如何选择配置与防御等级?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
Laravel如何处理和验证JSON类型的数据库字段
linux写shell需要注意的问题(必看)
Swift开发中switch语句值绑定模式
Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】
详解jQuery中的事件
上一篇:ABS灯亮后重启消失
下一篇:如何开启句子控系统消息
上一篇:ABS灯亮后重启消失
下一篇:如何开启句子控系统消息


