如何定位耗时sql_mysql性能分析技巧
发布时间 - 2026-02-03 00:00:00 点击率:次定位耗时SQL需先启用慢查询日志并配置long_query_time,再用mysqldumpslow归类分析,接着通过EXPLAIN诊断执行计划,最后结合PROCESSLIST和锁等待监控长事务与阻塞。
定位耗时 SQL 是 MySQL 性能分析中最直接也最关键的一步。核心思路是:先抓“慢”的,再看“为什么慢”。重点不在查所有 SQL,而在快速聚焦真正拖慢系统的那几条。
开启并配置慢查询日志
这是最基础、最可靠的入口。MySQL 默认不记录慢查询,需手动启用:
- 在 my.cnf(或 my.ini)中添加:
slow_query_log = ON
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 1.0(单位秒,建议初设为 1,高并发场景可调至 0.5) - 动态开启(无需重启):
SET GLOBAL slow_query_log = ON;
SET GLOBAL long_query_time = 1; - 注意:long_query_time 对已建立连接不生效,新连接才生效;若用代理(如 ProxySQL),可能需额外配置其慢日志。
用 mysqldumpslow 快速归类分析
原始慢日志杂乱冗长,直接 grep 效率低。mysqldumpslow 是官方配套工具,能按模板聚合统计:
- 查看执行次数最多、平均耗时最长的前 10 条:
mysqldumpslow -s c -t 10 /var/log/mysql/mysql-slow.log - 查看总耗时最长的前 10 条(关注“拖累大盘”的 SQL):
mysqldumpslow -s t -t 10 /var/log/mysql/mysql-slow.log - 加 -g "WHERE.*status" 可过滤含特定关键词的模板,缩小范围。
结合 EXPLAIN 精准诊断执行计划
找到可疑 SQL 后,别急着改逻辑,先看 MySQL 实际怎么执行它:
- 对 SELECT 语句加 EXPLAIN FORMAT=TREE(8.0+)或 EXPLAIN(通用),重点关注:
– type:是否用了 index/ range/ ref?全表扫描(ALL)要警惕
– key
和 possible_keys:是否命中索引?为何没选最优索引?
– rows:预估扫描行数是否远超实际返回行数?
– Extra:出现 Using filesort、Using temporary、Using join buffer 意味着有优化空间 - 对 UPDATE/DELETE 也适用:
EXPLAIN UPDATE ... 或先转成等价 SELECT 再 explain。
实时抓取正在运行的长事务和阻塞
有些 SQL 并不慢,但因锁等待或事务过长,导致其他请求排队——这时慢日志可能不记录,需主动监控:
- 查当前运行超 1 秒的连接:
SELECT * FROM information_schema.PROCESSLIST WHERE TIME > 1 AND COMMAND != 'Sleep'; - 查锁等待关系(8.0+):
SELECT * FROM performance_schema.data_lock_waits;
或经典方式:
SHOW ENGINE INNODB STATUS\G,关注 TRANSACTIONS 部分的 lock wait。 - 配合 sys.schema_long_running_queries 视图(需 sys schema 已安装)可一键查长时间未结束的查询。
# mysql
# 工具
# ssl
# ai
# proxy
# 为什么
# sql
# select
# format
# using
# var
# delete
# 并发
# 关键词
# 可调
# 行数
# 这是
# 设为
# 而在
# 长时间
# 用了
# 再看
# 再用
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
如何在建站之星绑定自定义域名?
如何在万网主机上快速搭建网站?
Laravel Blade模板引擎语法_Laravel Blade布局继承用法
如何基于PHP生成高效IDC网络公司建站源码?
如何用搬瓦工VPS快速搭建个人网站?
如何构建满足综合性能需求的优质建站方案?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
如何快速搭建高效WAP手机网站吸引移动用户?
如何在服务器上三步完成建站并提升流量?
Laravel Eloquent关联是什么_Laravel模型一对一与一对多关系精讲
Python文本处理实践_日志清洗解析【指导】
如何在Ubuntu系统下快速搭建WordPress个人网站?
Angular 表单中正确绑定输入值以确保提交与验证正常工作
Edge浏览器提示“由你的组织管理”怎么解决_去除浏览器托管提示【修复】
MySQL查询结果复制到新表的方法(更新、插入)
nodejs redis 发布订阅机制封装实现方法及实例代码
Android使用GridView实现日历的简单功能
北京企业网站设计制作公司,北京铁路集团官方网站?
如何登录建站主机?访问步骤全解析
lovemo网页版地址 lovemo官网手机登录
北京的网站制作公司有哪些,哪个视频网站最好?
微信小程序 五星评分(包括半颗星评分)实例代码
个人摄影网站制作流程,摄影爱好者都去什么网站?
JS中对数组元素进行增删改移的方法总结
Laravel如何使用withoutEvents方法临时禁用模型事件
python中快速进行多个字符替换的方法小结
制作电商网页,电商供应链怎么做?
详解Android——蓝牙技术 带你实现终端间数据传输
Swift中switch语句区间和元组模式匹配
Java Adapter 适配器模式(类适配器,对象适配器)优缺点对比
详解CentOS6.5 安装 MySQL5.1.71的方法
如何快速搭建高效简练网站?
中山网站推广排名,中山信息港登录入口?
如何用PHP快速搭建CMS系统?
Laravel全局作用域是什么_Laravel Eloquent Global Scopes应用指南
浅谈javascript alert和confirm的美化
JavaScript实现Fly Bird小游戏
Laravel如何实现多级无限分类_Laravel递归模型关联与树状数据输出【方法】
Python高阶函数应用_函数作为参数说明【指导】
C++用Dijkstra(迪杰斯特拉)算法求最短路径
教你用AI润色文章,让你的文字表达更专业
在Oracle关闭情况下如何修改spfile的参数
使用Dockerfile构建java web环境
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何彻底卸载建站之星软件?
如何在云主机上快速搭建网站?
JavaScript如何实现倒计时_时间函数如何精确控制
如何在IIS中新建站点并解决端口绑定冲突?
网站建设保证美观性,需要考虑的几点问题!


