慢SQL未被记录

博客探讨了MySQL启用slow query log且long_query_time=0.01时,部分慢SQL未被记录的原因。包括在线动态设置对当前连接不生效、log_slow_admin_statements为0、min_examined_row_limit非0、slow log文件句柄变化以及误将文件名当开关等情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MySQL已启用了slow query log且long_query_time=0.01,为什么有些慢SQL还是没被记录呢?
1、在线动态设置long_query_time=0.01,但该设置对当前已建立的连接不会生效
2、log_slow_admin_statements=0,因此ALTER、CREATE INDEX、ANALYZE TABLE等操作即使超过long_query_time不会记录
3、min_examined_row_limit设置非0值,SQL检查行数未超过该值不会记录
4、slow log文件句柄发生了变化,如运行期间用vim打开log,最后又保存退出,此时文件句柄发生变化,需要执行flush slow logs
5、误将slow_query_log_file当做slow log的开关,设置为1(此时slow log文件名为1)

### 配置和查看 Druid SQL 记录 #### 1. 配置 SQL 时间阈值 为了定义什么是“”的SQL语句,在`application.properties`文件中设置属性来指定SQL的时间阈值。默认情况下,超过1秒的SQL被认为是SQL。 ```properties # 设置SQL时间阈值为1000毫秒(即1秒) druid.stat.slow-sql-millis=1000 ``` 此配置项可以通过Java代码中的注解读取并应用到应用程序逻辑中[^2]: ```java @Value("${druid.stat.slow.sql.millis:1000}") private long slowSqlMillis; ``` #### 2. 开启统计功能 确保开启了Druid的数据源监控统计功能,这允许收集必要的性能指标用于识别查询。 ```properties # 启用Druid内置的WebStatFilter过滤器来进行URL级别的SQL执行情况跟踪 spring.datasource.druid.web-stat-filter.enabled=true # 打开统计数据收集开关 spring.datasource.druid.stat-view-servlet.enabled=true ``` #### 3. 查看 SQL 日志 当上述配置完成后,任何超出设定阈值的SQL都会被记录下来,并可通过多种方式访问这些日志信息: - **控制台输出**:如果项目中有相应的日志框架配置,则可以直接在运行时通过控制台看到警告级别以上的SQL通知。 - **页面展示**:借助于Druid提供的内嵌Servlet接口,可以在浏览器端浏览详细的数据库操作历史以及查询报告。通常路径类似于 `/druid/index.html` ,具体取决于实际部署环境下的映射规则。 - **持久化存储**:对于生产环境中长期保存的需求,还可以考虑将SQL写入外部的日志系统或数据库表里做进一步分析处理。 ```xml <!-- 如果希望把SQL存入特定位置 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-log4j2</artifactId> <!-- 或者其他适合的日志实现库 --> </dependency> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值