上一篇
2025年7月最新动态
根据MySQL官方社区报告,超过67%的开发者仍在通过日志分析或多次查询实现统计功能,而实际上只需单个SELECT语句就能完成,Oracle工程师在最近的性能优化指南中特别强调了这种高效做法。
想象你正在排查一个突然变慢的接口,发现是某个SQL查询被循环调用了N次——这时候如果提前统计过各语句的执行次数,问题早就定位了,常见的统计需求包括:
传统方案要么查slow_log
,要么上监控工具,但其实MySQL自带更轻量的解决方案。
performance_schema
打开你的MySQL客户端(5.7+版本都支持),先确认这个功能已开启:
SHOW VARIABLES LIKE 'performance_schema'; -- 如果返回OFF,在my.cnf添加: -- performance_schema=ON
关键表是events_statements_summary_by_digest
,它自动归类统计所有SQL语句:
SELECT digest_text AS query_sample, count_star AS exec_count, avg_timer_wait/1000000000000 AS avg_exec_time_sec FROM performance_schema.events_statements_summary_by_digest WHERE digest_text LIKE 'SELECT%' -- 示例:只统计SELECT ORDER BY count_star DESC LIMIT 10;
输出示例:
| query_sample | exec_count | avg_exec_time_sec |
|----------------------------------|------------|-------------------|
| SELECT * FROM users WHERE id=? | 1428 | 0.0032 |
| SELECT name FROM products | 762 | 0.0015 |
SELECT digest_text, count_star, sum_rows_examined AS total_scanned_rows FROM performance_schema.events_statements_summary_by_digest WHERE digest_text LIKE '%orders%'; -- 替换为你的表名
-- 先重置统计(可选) CALL sys.ps_truncate_all_tables(FALSE); -- 等待1小时后... SELECT * FROM performance_schema.events_statements_summary_by_digest WHERE sum_timer_wait > 0;
SELECT
权限和performance_schema
访问权限 WHERE id=?
) 下次当你怀疑"这查询到底执行了多少次"时,别再去翻日志了,5行SQL直接给你答案,这个技巧在2025年MySQL用户调查中被评为"最被低估的功能"TOP3,试试看吧!
本文由 乙思烟 于2025-07-29发表在【云服务器提供商】,文中图片由(乙思烟)上传,本平台仅提供信息存储服务;作者观点、意见不代表本站立场,如有侵权,请联系我们删除;若有图片侵权,请您准备原始证明材料和公证书后联系我方删除!
本文链接:https://vps.7tqx.com/wenda/478782.html
发表评论