千家信息网

如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在 MYSQL 慢查询日志
千家信息网最后更新 2026年11月01日如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL

如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。


在 MYSQL 慢查询日志中 # Time 中只有时间但没有日期的信息,需要知道一条慢查询SQL具体是哪天的,
就需要 unix_timestamp 函数把 # Time 中的时间戳信息转换为日期信息。

unix_timestamp(datetime=>timestamp)
from_unixtime(timestamp=>datetime)

mysql> select unix_timestamp('2021-10-26 17:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 17:30:00') |
+---------------------------------------+
| 1451122200 |
+---------------------------------------+
1 row in set (0.10 sec)


select from_unixtime('1451122200');

mysql> select from_unixtime('1451122200');
+-----------------------------+
| from_unixtime('1451122200') |
+-----------------------------+
| 2021-10-26 17:30:00.000000 |
+-----------------------------+



过滤出16:30到17:30的慢查询日志
方法一:使用时间戳过滤
mysql> select unix_timestamp('2021-10-26 17:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 17:30:00') |
+---------------------------------------+
| 1451122200 |
+---------------------------------------+
1 row in set (0.00 sec)


mysql> select unix_timestamp('2021-10-26 16:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 16:30:00') |
+---------------------------------------+
| 1451118600 |
+---------------------------------------+
1 row in set (0.00 sec)


sed -n '/SET timestamp=14511186../,/SET timestamp=14511222../'p QITV0223-slow.log > test3.log


方法二:
mysql> select unix_timestamp('2015-12-26 16:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 16:30:00') |
+---------------------------------------+
| 1451118600 |
+---------------------------------------+

sed -n '/SET timestamp=14511186../,$'p QITV0223-slow.log > test4.log

mysql> select unix_timestamp('2021-10-26 17:30:00');
+---------------------------------------+
| unix_timestamp('2021-10-26 17:30:00') |
+---------------------------------------+
| 1451122200 |
+---------------------------------------+


1 row in set (0.00 sec)

--使用gred 在 test4.log 定位到17:30执行的SQL,比如定位出在 1085行
grep -n 'SET timestamp=14511222..' QITV0223-slow.log test4.log
1085:SET timestamp=1451122200;

--使用sed 过滤出第一行到1085行的数据
sed -n '1,1085'p test3.log > test5.log



方法三:如果所有的SQL都有 #TIME 项,则使用 #TIME进行过滤

sed -n '/# Time: 151226 16:30:../,/# Time: 151226 17:30:../'p QITV0223-slow.log > test10.log
如果没有匹配到 "# Time: 151226 17:30:..",则会把从16:30到慢查询日志结尾的日志全过滤出来。



对于过滤好的慢查询日志检索 TOP SQL:

1. 获取执行时间最长的 10个 TOP SQL。
mysqldumpslow -s t -t 10 test10.log > slow_t_top_sql.txt


2. 获取平均查询时间最长的 10 个 TOP SQL。

mysqldumpslow -s at -t 10 test10.log > slow_at_top_sql.txt

3. 获取锁定时间最长的 10个 TOP SQL。

mysqldumpslow -s l -t 10 test10.log > slow_l_top_sql.txt


4. 获取平均锁定时间最长的 10个 TOP SQL。

mysqldumpslow -s al -t 10 test10.log > slow_l_top_sql.txt


5. 获取返回记录最多的 10个 TOP SQL。

mysqldumpslow -s r -t 10 test10.log > slow_r_top_sql.txt

6. 获取平均返回记录最多的 10个 TOP SQL。

mysqldumpslow -s ar -t 10 test10.log > slow_r_top_sql.txt


7. 获取执行次数最多的 10个 TOP SQL。

mysqldumpslow -s c -t 10 test10.log > slow_r_top_sql.txt


看完上述内容,你们掌握如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

查询 日志 时间 方法 最长 信息 内容 日期 更多 问题 定位 束手无策 为此 一行 函数 原因 只有 对此 技能 数据 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 百单网互联网科技有限公司 科技创新与互联网经济 互联网科技未来 互联网科技公司发展 互联网科技金融公司 安徽鑫晟辉互联网科技 苏州大垚互联网科技 亿人帮互联网科技 深圳卡尔迅互联网科技有限公司怎么样 新华互联网科技校企合作 哈尔滨秒房互联网科技有限公司 欧洲十大科技互联网公司 团飞科技与伯堂互联网服务平台 互联网科技产业特征 互联网高科技行业有哪些企业 互联网金融运营模式中的金融科技 科技信息时代互联网发展 北京品多多互联网科技有限公司 网互联网络科技 互联网科技自媒体灵感 深圳九邦互联网科技有限公司 互联网科技工作委员会毛军 互联网最新的科技有限公司 北京互联网络科技有限公司 互联网科技公司有哪些 移动互联网科技股 受益于互联网科技的高速发展 保山互联网科技靠谱吗 互联网科技创新创业项目 互联网的黑科技实验室
0