MySQL中Slow-log慢查询日志的作用

对于线上响应缓慢的问题,一步步的排查过程之后还未找到问题,最终就会来到数据库,尝试对SQL或索引调优,MySQL官方支持开启慢查询日志。

当一条SQL执行的时间超过规定的阈值后,就会被记录在慢查询日志中,当线上出现响应缓慢的问题时,可以直接通过查看慢查询日志定位问题,再用explain这类工具去生成SQL的执行计划,然后根据生成的执行计划来判断为什么耗时长,是由于没走索引,还是索引失效等情况导致的。

  • slow_query_log:设置是否开启慢查询日志,默认OFF关闭。
  • slow_query_log_file:指定慢查询日志的存储目录及文件名。
  • setglobal long_query_time =1; 指定超时阈值,默认单位是秒,该参数也可不设置,默认为10s,即执行时间超过10s的查询SQL才会记录到慢查询日志中。

**慢查询阈值要设置合理:**慢查询日志在内存中是没有缓冲区的,每次记录慢查询SQL,都必须触发磁盘IO来完成,阈值设的太小,容易使得MySQL性能下降;设的太大,又会导致无法检测到问题SQL。可以先开启general log,观察后实际的业务情况后再决定。

**general log即查询日志:**写入所有收到的查询命令,如select、show等,无论SQL的语法正确还是错误、执行成功还是失败,MySQL都会将其记录下来。对于该日志可以通过下述参数开启:

  • general_log:是否开启查询日志,默认OFF关闭。
  • general_log_file:指定查询日志的存储路径和文件名(默认在库的目录下,主机名+.log)。

项目测试阶段,可以先开启查询日志,然后压测所有业务,紧接着再分析日志中SQL的平均耗时,再根据正常的SQL执行时间,设置一个偏大的慢查询阈值即可(这是个笨办法,如果项目规模较大,直接设置一个大概值,然后上灰度发布,走正式的运营场景效果会更佳)。

相关推荐
hzulwy2 分钟前
Redis常用的数据结构及其使用场景
数据库·redis
程序猿熊跃晖12 分钟前
解决 MyBatis-Plus 中 `update.setProcInsId(null)` 不生效的问题
数据库·tomcat·mybatis
Three~stone2 小时前
MySQL学习集--DDL
数据库·sql·学习
Qi妙代码2 小时前
MYSQL基础
数据库·mysql·oracle
Arbori_262152 小时前
Oracle中的UNION原理
数据库·oracle
llzcxdb2 小时前
【MySQL】理解MySQL的双重缓冲机制:Buffer Pool与Redo Log的协同之道
数据库·mysql
SelectDB技术团队2 小时前
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
大数据·数据库·数据仓库·人工智能·ai·数据分析·湖仓一体
冷凝女子2 小时前
【QT】获取文件路径中的文件名,去掉后缀,然后提取文件名中的数字
开发语言·数据库·qt
Y第五个季节2 小时前
Redis - HyperLogLog
数据库·redis·缓存
Allen Bright3 小时前
【MySQL基础-20】MySQL条件函数全面解析:提升查询逻辑的利器
数据库·mysql