如何定位耗时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如何实现API速率限制?(Rate Limiting教程)  浅谈javascript alert和confirm的美化  微信推文制作网站有哪些,怎么做微信推文,急?  php在windows下怎么调试_phpwindows环境调试操作说明【操作】  Android滚轮选择时间控件使用详解  Win11怎么更改系统语言为中文_Windows11安装语言包并设为显示语言  香港服务器租用每月最低只需15元?  如何在VPS电脑上快速搭建网站?  Bootstrap整体框架之CSS12栅格系统  EditPlus中的正则表达式 实战(2)  谷歌浏览器下载文件时中断怎么办 Google Chrome下载管理修复  JS中对数组元素进行增删改移的方法总结  如何破解联通资金短缺导致的基站建设难题?  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  如何在香港服务器上快速搭建免备案网站?  中山网站制作网页,中山新生登记系统登记流程?  Python制作简易注册登录系统  iOS UIView常见属性方法小结  如何在阿里云服务器自主搭建网站?  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  jQuery validate插件功能与用法详解  javascript中对象的定义、使用以及对象和原型链操作小结  如何用好域名打造高点击率的自主建站?  千库网官网入口推荐 千库网设计创意平台入口  如何将凡科建站内容保存为本地文件?  标题:Vue + Vuex + JWT 身份认证的正确实践与常见误区解析  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  Laravel项目结构怎么组织_大型Laravel应用的最佳目录结构实践  Laravel怎么在Blade中安全地输出原始HTML内容  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  js实现点击每个li节点,都弹出其文本值及修改  Laravel怎么进行数据库回滚_Laravel Migration数据库版本控制与回滚操作  消息称 OpenAI 正研发的神秘硬件设备或为智能笔,富士康代工  Linux系统命令中screen命令详解  如何使用 jQuery 正确渲染 Instagram 风格的标签列表  Python函数文档自动校验_规范解析【教程】  油猴 教程,油猴搜脚本为什么会网页无法显示?  百度输入法ai组件怎么删除 百度输入法ai组件移除工具  Laravel怎么进行浏览器测试_Laravel Dusk自动化浏览器测试入门  青岛网站建设如何选择本地服务器?  Laravel如何为API生成Swagger或OpenAPI文档  如何登录建站主机?访问步骤全解析  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  Laravel怎么实现软删除SoftDeletes_Laravel模型回收站功能与数据恢复【步骤】  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  简单实现Android验证码  Laravel策略(Policy)如何控制权限_Laravel Gates与Policies实现用户授权  东莞市网站制作公司有哪些,东莞找工作用什么网站好?