当前位置: 首页 > news >正文

什么是sql 慢日志。哈罗面试:没开sql慢日志,怎么发现慢 sql?

本文 的 原文 地址

原始的内容,请参考 本文 的 原文 地址

本文 的 原文 地址

尼恩说在前面:

在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如得物、阿里、滴滴、极兔、有赞、shein 希音、shopee、百度、网易的面试资格,遇到很多很重要的面试题:

MySQL的慢查询、如何监控、如何排查?

你知道如何排查慢sql嘛?

你知道如何对mysql进行优化嘛?

mysql慢查询如何定位分析?哪些情况会导致慢查询?

没开sql慢查询日志,怎么发现慢 sql?

前几天 小伙伴面试 哈罗,遇到了这个问题。但是由于 没有回答好,导致面试挂了。

小伙伴面试完了之后,来求助尼恩。

那么,遇到 这个问题,该如何才能回答得很漂亮,才能 让面试官刮目相看、口水直流。

所以,尼恩给大家做一下系统化、体系化的梳理,使得大家内力猛增,可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”,然后实现”offer直提”。

当然,这道面试题,以及参考答案,也会收入咱们的 《尼恩Java面试宝典》V145版本PDF集群,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

最新《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请关注本公众号【技术自由圈】获取,后台回复:领电子书

一:什么是 慢 SQL(慢查询) 日志?

MySQL的慢查询日志是MySQL提供的一种日志记录。

MySQL的慢查询日志 ,主要 用来记录在MySQL中响应的时间超过 执行时长阈值的语句, 执行时长阈值 通过 一个 参数 long_query_time(默认是10秒)配置。

一个SQL的执行,只要 超过 这个 long_query_time 时长, 就会被判为慢查询, 会被记录到慢查询日志中。

二: SQL 到底 执行 多长时间,才为慢SQL ?

慢 SQL 时间 长度是 “执行耗时超出业务或数据库的合理阈值”,但具体定义需结合数据库类型、业务场景、硬件配置综合判断,无绝对统一标准。

慢 SQL 时间 长度 通常分为 通用阈值 和 业务定制阈值 两类:

第一个维度:通用参考阈值(以 MySQL 为例)

数据库层面默认有基础标准,最典型的是 MySQL 的long_query_time参数(慢查询日志的核心触发条件):

默认值: 10 秒 (即执行时间≥10 秒的 SQL 会被标记为慢 SQL);

实际场景:多数业务会将阈值下调至1-2 秒(因 10 秒远超用户可接受的响应时间,比如 Web 页面加载通常要求 < 2 秒,接口响应 < 500ms)。

第二个维度:业务定制阈值(更关键)

通用阈值仅作参考,真正的慢 SQL 定义需贴合业务场景,例如:

  • 高频核心业务(如电商下单、支付接口):阈值可能设为500ms(若 SQL 执行 1 秒,会直接导致用户卡顿);

  • 低频非核心任务(如每日数据统计):阈值可放宽至1 秒 - 20s(后台执行,不影响用户体验);

三:如何设置 慢SQL 相关参数?

下面是一些关键参数设置:

  • slow_query_log:控制慢查询日志的开关。

    设置成 1,日志就开启;设置成 0,日志就关闭。

  • log-slow-queries(旧版本 5.6 以下使用)和slow-query-log-file(5.6 及以上版本使用):

    这两个参数用来指定慢查询日志的保存位置。如果不设置,系统会自动生成一个默认文件,名字是 “主机名 - slow.log”。

  • long_query_time:慢查询阈值:

    它决定了什么样的查询算慢查询,只要 SQL 语句执行时间超过这里设置的时长,就会被记录到日志里。

  • log_queries_not_using_indexes:

    这是个可选参数,打开后,没命中索引的查询语句也会被记录下来。

  • log_output:用来选择日志保存方式。

    有 FILE(快) , TABLE(满) 两种方式保持日志。设置成FILE,日志就存到文件里,这是默认方式;

    设置成 TABLE,日志会存到数据库的mysql.slow_log表里。

    也可以同时用两种方式,写成FILE,TABLE。不过,存到数据库表比存到文件更费资源,如果既想开慢查询日志,又想数据库跑得快,建议优先把日志存到文件里。

slow_query_log 的 参数查看:

mysql> show VARIABLES like '%slow_query_log%';
+---------------------+-----------------------------------------------------------+
| Variable_name       | Value                                                     |
+---------------------+-----------------------------------------------------------+
| slow_query_log      | OFF                                                       |
| slow_query_log_file | d:\java\mysql-5.7.28-winx64\data\DEEP-2020AEBKQR-slow.log |
+---------------------+-----------------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)

long_query_time 的 参数查看:


mysql> show VARIABLES like 'long_query_time%';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set, 1 warning (0.00 sec)

设置启用慢查询日志:

SET GLOBAL slow_query_log = 'ON';
SET GLOBAL long_query_time = 1;

注意:修改全局参数后,当前连接会话仍使用旧值,需新建会话才会生效,需要重新登录

查看修改后参数:

mysql> show VARIABLES like '%slow_query_log%';
+---------------------+-----------------------------------------------------------+
| Variable_name       | Value                                                     |
+---------------------+-----------------------------------------------------------+
| slow_query_log      | ON                                                        |
| slow_query_log_file | d:\java\mysql-5.7.28-winx64\data\DEEP-2020AEBKQR-slow.log |
+---------------------+-----------------------------------------------------------+
2 rows in set, 1 warning (0.00 sec)mysql> show VARIABLES like 'long_query_time%';
+-----------------+----------+
| Variable_name   | Value    |
+-----------------+----------+
| long_query_time | 1.000000 |
+-----------------+----------+
1 row in set, 1 warning (0.00 sec)

四:3大 慢 SQL 分析工具

慢查询分析一般分为三个步骤

1、 EXPLAIN
2、 OPTIMIZER_TRACE
3、 PROFILE

上面三大工具的 具体使用方法,请参见尼恩之前的博客文章:

凌晨2点,报警群炸了:一条sql 执行200秒!搞定之后,我总结了一个慢SQL查询、定位分析解决的完整套路

五、没开慢查询日志,怎么发现慢 SQL? (4个方法)

慢查询日志是 “事后追溯” 的核心工具,但未开启时,可通过「实时监控」「资源排查」「业务反馈」三类手段主动发现慢 SQL,覆盖实时问题定位历史问题追溯场景。

...................由于平台篇幅限制, 剩下的内容(5000字+),请参参见原文地址

原始的内容,请参考 本文 的 原文 地址

本文 的 原文 地址

http://www.hskmm.com/?act=detail&tid=16120

相关文章:

  • Spring连环炮。哈罗面试:Spring Bean生命周期,Spring怎么创建Bean的,BFPP和BPP的x别
  • redis 大 key 优化。哈罗面试:redis 有个大 key需要在线优化, 不能影响现有业务,请求不能大量到库,怎么优化?
  • ACL高可用架构。希音面试:第三方挂了,我们总在背锅。来一 靠谱的 高可用方案,让 外部依赖 稳如泰山
  • 软工9.24
  • 2025CSP-S模拟赛51
  • 2025年9月24日 - 20243867孙堃2405
  • 【星海随笔】RabbitMQ开发篇 - 教程
  • P13754 【MX-X17-T3】Distraction
  • 2025.9.24
  • 初学汇编
  • 架构图设计还得是华为 - 智慧园区
  • 解决zsh: corrupt history file /home/sgud4h5gh/.zsh_history的办法
  • StarRocks GitHub 工作流程
  • 对象初始化器的使用方法
  • C++、Java 和 Python 在输入输出差别
  • 我的学习记录之自我介绍、思维导图和监督措施
  • 用 Java 和 Tesseract 进行验证码识别:基础实现与优化
  • Java第二次实验
  • 详细介绍:【2025PolarCTF秋季个人赛】WEB方向wp
  • 英语_阅读
  • Nuget安装以及西门子PLC通信
  • 每日反思(2025_09_24)
  • 安装Flask库
  • 《新概念英语》在线朗读,单句点读,随时随地在线学习。
  • P10004 [集训队互测 2023] Permutation Counting 2
  • 毕赤酵母细胞工厂升级:CRISPR 技术破局传统局限,解锁多基因代谢工程新可能
  • 日总结 7
  • 读书笔记:OpenPBR 规范(1)
  • 9月24号
  • linux系统下nginx网站ssl证书自动续签