首页 > 其他分享 >min_examined_row_limit 对慢查询日志的影响

min_examined_row_limit 对慢查询日志的影响

时间:2025-01-20 20:53:44浏览次数:1  
标签:slow log min 对慢 examined query row

执行了以下一个很慢的 SQL,但是在慢查询日志中却没有发现对应的 SQL 语句。

> select count(*) from myabc_abcde_expo_vv;
+-----------+
| count(*)  |
+-----------+
| 509600169 |
+-----------+
1 row in set (3 min 3.76 sec)

第一反应是不是库没有开启慢查询日志的功能?于是检查一下关于慢查询的相关设置:

> show variables like '%query%';
+------------------------------+----------+
| Variable_name                | Value    |
+------------------------------+----------+
| binlog_rows_query_log_events | ON       |
| ft_query_expansion_limit     | 20       |
| have_query_cache             | NO       |
| long_query_time              | 2.000000 |
| query_alloc_block_size       | 8192     |
| query_prealloc_size          | 8192     |
| slow_query_log               | ON       |
| slow_query_log_file          | slow.log |
+------------------------------+----------+
8 rows in set (0.00 sec)

> show variables like '%slow%';
+-----------------------------+----------+
| Variable_name               | Value    |
+-----------------------------+----------+
| log_slow_admin_statements   | ON       |
| log_slow_extra              | ON       |
| log_slow_replica_statements | OFF      |
| log_slow_slave_statements   | OFF      |
| slow_launch_time            | 2        |
| slow_query_log              | ON       |
| slow_query_log_file         | slow.log |
+-----------------------------+----------+
7 rows in set (0.00 sec)

> show variables like '%log_queries_not_using_indexes%';
+-------------------------------+-------+
| Variable_name                 | Value |
+-------------------------------+-------+
| log_queries_not_using_indexes | ON    |
+-------------------------------+-------+
1 row in set (0.00 sec)

> show variables like '%log_slow%';
+-----------------------------+-------+
| Variable_name               | Value |
+-----------------------------+-------+
| log_slow_admin_statements   | ON    |
| log_slow_extra              | ON    |
| log_slow_replica_statements | OFF   |
| log_slow_slave_statements   | OFF   |
+-----------------------------+-------+
4 rows in set (0.01 sec)

> show variables like '%min_examined_row_limit%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| min_examined_row_limit | 100   |
+------------------------+-------+
1 row in set (0.01 sec)

可以看到,慢查询相关的参数都做了配置。

 

根据官方文档的介绍,InnoDB 通过遍历最小的可用二级索引来处理 SELECT COUNT(*) 语句,除非索引或优化器 hint 指示优化器使用其它的索引。如果没有二级索引,InnoDB 会通过扫描聚簇索引来处理 SELECT COUNT(*) 语句。

 

而这张表上既有自增主键,也创建了二级索引。这里通过查看执行计划,也可以看到选择了二级索引:

>desc select count(*) from myabc_abcde_expo_vv;
+----+-------------+---------------------+------------+-------+---------------+-----------------+---------+------+-----------+----------+-------------+
| id | select_type | table               | partitions | type  | possible_keys | key             | key_len | ref  | rows      | filtered | Extra       |
+----+-------------+---------------------+------------+-------+---------------+-----------------+---------+------+-----------+----------+-------------+
|  1 | SIMPLE      | myabc_abcde_expo_vv | NULL       | index | NULL          | idx_symbol_data | 4       | NULL | 505767703 |   100.00 | Using index |
+----+-------------+---------------------+------------+-------+---------------+-----------------+---------+------+-----------+----------+-------------+

此外 log_queries_not_using_indexes 的值为 on,按道理无论这个 SQL 有没有使用到索引,也应该被记录到日志中。

 

其它相关参数主要是设置为是否开启,所以,这里将重点转移到了参数 min_examined_row_limit。如文档所说,查询检查的记录数少于 min_examined_row_limit 设定的行数时不会记录到慢查询日志中。

 

上面这个 SQL 检索的表包含了509600169条记录,这里的 min_examined_row_limit 的值为100,主观感觉上该参数不会导致该 SQL 不写入慢查询日志。

 

但还是做了一下尝试,将 min_examined_row_limit 的值替换成了默认值,即 0。然后执行上面的慢查询,发现慢日志中已经有了对应的SQL语句:

# Time: 2025-01-19T17:28:20.501023+08:00
# User@Host: root[root] @ localhost []  Id:     8
# Query_time: 176.989435  Lock_time: 0.000018 Rows_sent: 1  Rows_examined: 0 Thread_id: 8 Errno: 0 Killed: 0 Bytes_received: 47 Bytes_sent: 64 Read_first: 0 Read_last: 0 Read_key: 30 Re
ad_next: 34 Read_prev: 0 Read_rnd: 0 Read_rnd_next: 0 Sort_merge_passes: 0 Sort_range_count: 0 Sort_rows: 0 Sort_scan_count: 0 Created_tmp_disk_tables: 0 Created_tmp_tables: 0 Start: 20
25-01-19T17:25:23.511588+08:00 End: 2025-01-19T17:28:20.501023+08:00
use pms;
SET timestamp=1737278723;
select count(*) from myabc_abcde_expo_vv;

不过,这里可以清楚的看到:

Rows_examined: 0 

这里的 Rows_examined 的实际含义是:

The number of rows examined by the server layer (not counting any processing internal to storage engines).

因为慢SQL在引擎层通过二级索引完成对表记录数的统计,并将结果直接返给server层,server层检查的行数就是0,在 min_examined_row_limit = 100 的时候,就不会将该SQL记录到慢日志中。

 

 

标签:slow,log,min,对慢,examined,query,row
From: https://www.cnblogs.com/abclife/p/18680000

相关文章

  • Centos7.9安装phpldapadmin
    @目录一、背景二、正文2.1安装phpldapadmin2.4登录phpldapadmin界面三、安装途中可能碰到的报错错误场景1:执行步骤“安装phpldapadmin”执行命令:yuminstall-yphpldapadmin时报错错误场景2:安装phpldapadmin完成后,apache启动报错,执行启动命令systemctlstarthttpd、systemctl......
  • 如何解决phpMyAdmin导出时提示“当前表单包含的字段多于 1000,受限于PHP 中 max_input_
    常见原因max_input_vars 设置过低:默认情况下,max_input_vars 的值为1000,当表单字段超过这个数量时,就会触发警告。表单字段过多:某些大型数据库或复杂的表单可能会包含超过1000个字段。解决方法方法一:修改 php.ini 文件找到 php.ini 文件:php.ini 文件通常位于PHP安......
  • Oracle LogMiner SCN 跳跃检测分析
    OracleLogMinerSCN跳跃检测分析1.SCN跳跃的概念SCN跳跃是指在连续的日志记录中,发现两个相邻记录的SCN之间存在较大的间隙。这可能意味着:数据丢失归档日志缺失数据库重启系统时间调整2.检测机制2.1基本检测逻辑publicbooleanhasScnJump(ScncurrentSc......
  • Xmind 2023 v23 pro 破解版下载及安装教程
    Xmind应该是目前最好用的一款思维导图软件了。拥有优秀的用户体验,凭借简单易用,功能强大的特点,XMind在2013年被著名互联网媒体Lifehacker评选为全球最受欢迎的思维导图软件。Xmind具有如下优点①、用心打磨16年的思维导图软件②、评分高,多次获得推荐③、装机量超过1亿,深受全......
  • Ubuntu 安装Miniconda
    1.下载Miniconda安装脚本访问Miniconda官方下载页面,找到适合Linux的安装脚本链接。使用wget下载最新版本的Miniconda安装脚本:wgethttps://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh2.安装Miniconda运行安装脚本:bashMiniconda3-la......
  • windows快速部署minIO,springboot快速集成
    一、Windows快速部署1.在MinIO官网下载Windows版本2.只需要下载minIOserver即可 3.在下载好的文件夹下打开cmd我是下载到了D:\MinIOminio.exeserverD:\MinIO\Data--console-address":9000"--address":9090" 在浏览器输入localhost:9000即可正常使用4.每次都要......
  • Spring Boot Admin服务监控
    目录AdminServerAdminClient添加认证SpringBootAdmin监控SpringCloud服务结合Eureka注册中心SpringBootAdmin是一个用于管理和监控SpringBoot应用程序的工具。它通过SpringBootAdminClient通过HTTP注册,或者使用SpringCloud如Eureka进行服务发现。其用户界面是......
  • libsql bottomless 集成minio 简单使用
    libsql支持bottomless可以方便的将wal数据存储在s3中(基于了虚拟wal接口实现),以下是一个简单使用环境准备docker-compose环境开启了namespace以及集成主从服务services:db1:image:ghcr.io/tursodatabase/libsql-server:latestentrypoint:/bin/sqld--db-p......
  • Toyota Programming Contest 2025(AtCoder Beginner Contest 389)
    A-9x9题意:给你一个长度为\(3\)的乘法式,求答案。直接求即可。点击查看代码voidsolve(){std::strings;std::cin>>s;std::cout<<(s[0]-'0')*(s[2]-'0')<<"\n";}B-tcaF题意:求一个\(n\),使得\(n!=x\)。模拟即可。点......
  • k8s集成MinIo
    本篇文章分享一下在k8s怎么集成 minio做存储,并实现PersistentVolume(PV)、PersistentVolumeClaim(PVC)、动态存储卷StorageClass,以及演示让pod使用这些存储卷的完整流程。一、理论1、PV概念PV是对K8S存储资源的抽象,PV一般由运维人员创建和配置,供容器申请使用。没有PV......