log_queries_not_using_indexes参数设置

梦莱3年前技术文章4210

【现象】

通过查看慢日志发现有如下信息:


 

如上慢日志里出现较多 'index not used' warning(s) suppressed 信息;该信息主要是因为开启 log_queries_not_using_indexes 参数导致。

throttle:         55 'index not used' warning(s) suppressed.

【详情】

log_queries_not_using_indexes 参数作用:该参数开启后会在慢日志里面记录所有全表扫描或者索引全扫描的 SQL,哪怕它并没有达到 long_query_time;

开启该参数,慢日志可能会出现迅速的增长;可以通过对 log_throttle_queries_not_using_indexes 系统变量设置进行限制。设置情况如下:

log_throttle_queries_not_using_indexes设置为 0 时,意味着没有限制。

log_throttle_queries_not_using_indexes不为0时,每分钟记录的不使用索引sql的数量不能超过该值的限制。记录第一个不使用索引sql的时候会打开一个60s的时间窗口,记录的不使用索引sql数量最多为log_throttle_queries_not_using_indexes条,如果超过这个值,就会阻止记录慢日志。时间窗口结束的时候会记录一条概要,这条概要包括总共有多少条不使用索引sql以及这些不使用索引sql执行花费的总时间。在下一个60s的窗口期开始的时候才会记录下一条不使用索引的慢日志

即慢日志里看到的 throttle: 55 'index not used' warning(s) suppressed. 执行时间是所有全表扫描或者索引全扫描在一分钟内执行的时间的总和,锁表时间也是。

【建议】

目前该实例已开启 SQL 洞察,如果没有特殊需求,可以将 log_queries_not_using_indexes 该参数关闭;该参数仅是为了记录存在全表扫描、索引全扫描的 SQL ,且并不会做特殊记录,目前看暂无较大作用。

【补充】

一、参数设置

1.slow_query_log:将slow_query_log设置为0为禁用慢日志,设置为1以启用慢日志,建议启用

2.slow_query_log_file:设置slow_query_log_file以指定日志文件的名称。如果没有为慢日志文件指定名称,则默认名称为host_name-slow.log。除非为指定了绝对路径名,否则服务器将在数据目录中创建该文件。

 


3.long_query_time:设置执行多长时间的 SQL 被记录到慢日志当中,默认为1s.

4.log_slow_admin_statements:默认慢日志里不会记录 DDL 操作语句,如果需要记录,需要将该参数开启,该部分语句包括ALTER TABLE、ANALYZE TABLE、CHECK TABLE、CREATE INDEX、DROP INDEX、OPTIMIZE TABLE和REPAIR TABLE

5.min_everined_row_limit:当查询扫描行数小于此参数设置的数据,该 SQL 将不会记录到慢查询日志中。

二、参数顺序

服务器按以下顺序使用控制参数来确定是否将查询写入慢速查询日志:

1)首先判断 log_slow_admin_statements;如果关闭则过滤掉 DDL 操作语句

2)按照 long_query_time,过滤掉执行时间少于该参数的 SQL,或者如果启用 log_queries_not_using_indexes 参数,记录留下全表或索引全扫描的 SQL(即两个条件取并集)

3)min_everined_row_limit 参数不为 0 的情况下,过滤掉 SQL 扫描行数少于min_everined_row_limit行的 SQL

三、注意

1)服务器不会记录查询缓存处理的查询。

2)默认情况下,从库不会将复制的慢查询写入慢日志。要更改此设置,请启用log_slow_slave_statements系统变量。请注意,如果使用基于行的复制(binlog_format=row),则log_slow_slave_statements无效。只有当查询以语句格式记录在二进制日志中时,即当设置binlog_format=STATION时,或者当设置binlog _format=MIXED且语句以语句格式进行记录时,才会将查询添加到从库的慢日志中。设置binlog_format=MIXED时以行格式记录的慢查询,或设置binlog-format=row时记录的慢日志,即使启用了log_Slow_slave_statements,也不会添加到从库的慢日志中。


相关文章

压测实操--produce压测方案

压测实操--produce压测方案

环境信息:操作系统centos7.9,kafka版本为hdp集群中的2.0版本。 Producer相关参数使用Kafka自带的kafka-producer-perf-test.sh脚本进行压测,该脚本...

MySQL运维实战(2.4) SSL认证在MySQL中的应用

MySQL支持使用tls进行通信。tls主要有几个作用对客户端、服务端之间的通信数据进行加密。包括客户端发往服务端的SQL,服务端返回给客户端的数据。客户端可以验证服务端的身份。服务端也可以验证客户端...

CDP实操--集群扩容

CDP实操--集群扩容

一、前提准备工作1.确保OS的yum源可以正常使用,通过yum repolist命令可以查看到匹配的OS的所有包2.确保Cloudera Manager的yum源运行正常3.hosts文件配置,需要将...

数据湖技术之iceberg(四)iceberg的数据类型

1  Iceberg数据类型类型描述笔记boolean布尔类型,true或者falseint32 位有符号整数可以转换成long类型long64 位有符号整数float单精度浮点型可以转换成...

技术实践分享 用友NC财务系统上云

技术实践分享 用友NC财务系统上云

本文分享一次成功将用友NC财务系统上云的经验,主要涉及阿里云上Oracle ASM存储扩容,阿里云ESC RAC服务器扩容,阿里云上Oracle RAC数据库迁移等相关技术,一起来看看吧!01项目背景...

网络策略NetworkPolicy

网络策略NetworkPolicy

目的:为了实现细粒度的容器间网络访问隔离策略。引用:1.3版本NetworkPolicy机制 -> 1.8版本networking.k8s.io/v1稳定版本功能:对pod、ns之间网络通信限制...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。