log_queries_not_using_indexes参数设置

梦莱2年前技术文章3375

【现象】

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


 

如上慢日志里出现较多 '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,也不会添加到从库的慢日志中。


相关文章

远程DEBUG HADOOP源码方法

远程DEBUG HADOOP源码方法

1. 安装IDEA2. 下载hadoop源码,必须与集群服务代码版本一致,否则会导致有的类无法找到3. 将源码导入IDEA工程并完成build4. 点击 菜单栏--运行--编辑配置 进行相关debug...

Yarn界面详解

Yarn界面详解

1.Active Nodes:表示Yarn集群管理的节点的个数,其实就是NodeManager的个数,集群有2个NodeManager从配置中可以看到每一个NodeManager管理的内存大小是163...

CDH实操--修改集群主机名

CDH实操--修改集群主机名

1、停止集群2、停止cmsystemctl stop cloudera-scm-serversystemctl stop cloudera-scm-agnet3、修改服务器主机名修改下列配置文件下的主...

MySQL运维实战(5.6) 字符集设置对mysqldump的影响

mysqldump不指定字符集不指定字符集时,默认使用了utf8。可能和环境有关系。mysqldump -uroot test test_load >&n...

presto参数优化

presto参数优化

总体参数1)session级别的参数配置 query.max-run-time=600s 在终止查询之前,允许在群集上处理查询的最大时间。时间包括分析和计划的时间,也包括在队列中等待的时间,因此本...

kubernetes openelb

1、背景在云服务环境中的 Kubernetes 集群里,通常可以用云服务提供商提供的负载均衡服务来暴露 Service,但是在本地没办法这样操作。而 OpenELB 可以让用户在裸金属服务器、边缘以及...

发表评论    

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