如何从MYSQL查询日志中过滤出的慢查询日志并查出TOP SQL
发布时间:2021-12-19 10:37:14 所属栏目:MySql教程 来源:互联网
导读:如何从MYSQL查询日志中过滤出的慢查询日志并找出TOP SQL,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 在 MYSQL 慢查询日志中 # Time 中只有时间但没有日期的信息,需要知道一条慢查询SQ
如何从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的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读! (编辑:威海站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |