Mysql(Mariadb)慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析
程序员文章站
2022-06-17 21:57:44
慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析 参数介绍: long_query_time:慢查询日志记录超时的时间,无论是不是有索引,单位秒。 log_queries_not_usin ......
慢查询日志中long_query_time 与log_queries_not_using_indexes与min_examined_row_limit 关系分析
参数介绍:
long_query_time:慢查询日志记录超时的时间,无论是不是有索引,单位秒。
log_queries_not_using_indexes:慢查询日志记录没有使用索引的记录,无论是否超时long_query_time。
min_examined_row_limit:慢查询日志仅仅记录扫描行数超过行min_examined_row_limit的记录(不包括该参数值本身,是大于该参数值的扫描行)。
综合分析:
记录日志关系 = (long_query_time || log_queries_not_using_indexes)&& min_examined_row_limit
可见即使满足超时条件,如果不满足扫描行数条件,也不会记录,因此这个参数要慎用。可见如果以上公式中三个参数都开启,那么满足下面2个条件其中之一才会被记录。
1.我们有只有超时 且 扫描行数大于min_examined_row_limit时候才会被记录。
2.我们有只有没有使用索引 且 扫描行数大于min_examined_row_limit时候才会被记录。
记录日志关系 = (long_query_time || log_queries_not_using_indexes)&& min_examined_row_limit
可见即使满足超时条件,如果不满足扫描行数条件,也不会记录,因此这个参数要慎用。可见如果以上公式中三个参数都开启,那么满足下面2个条件其中之一才会被记录。
1.我们有只有超时 且 扫描行数大于min_examined_row_limit时候才会被记录。
2.我们有只有没有使用索引 且 扫描行数大于min_examined_row_limit时候才会被记录。
注意的问题:
tags1:min_examined_row_limit有会话变量和全局变量,动态改变参数值的时候需要分别进行修改,实测过程中改变全局变量(set
global min_examined_row_limit=100)不会同步改变会话变量(set
min_examined_row_limit=100),因此必须手动改变会话变量,才会对当前会话有效。
tags2:需要注意的是min_examined_row_limit检测的行数有时候与explain的有些出入,有时候同一个语句,explain显示的select_type=simple的扫描行数rows与慢查询日志中记录的rows_examined:不一样,后者会多500行左右,不知道为何
tags2:需要注意的是min_examined_row_limit检测的行数有时候与explain的有些出入,有时候同一个语句,explain显示的select_type=simple的扫描行数rows与慢查询日志中记录的rows_examined:不一样,后者会多500行左右,不知道为何
下面是mariadb 5.5.64服务器上进行测试的相关代码:
explain select * from hpx_member where u_id = 888444;#u_id 有索引测试
explain select * from hpx_member where major = '8881';#major没有索引测试
explain select * from hpx_member where phone like '15933%';#phone有索引测试,测试扫描行数与min_examined_row_limit关系
select * from hpx_member where phone like '1593356%';
show global variables like '%index%'
show variables like '%index%'
show global variables like '%min_examined_row_limit%'
show variables like '%min_examined_row_limit%'
show variables like '%long_query_time%'
set global long_query_time=0.0001
set global log_queries_not_using_indexes=off
set global min_examined_row_limit=0
set min_examined_row_limit=50
select sleep(2),8888;
explain select * from hpx_member where u_id = 888444;#u_id 有索引测试
explain select * from hpx_member where major = '8881';#major没有索引测试
explain select * from hpx_member where phone like '15933%';#phone有索引测试,测试扫描行数与min_examined_row_limit关系
select * from hpx_member where phone like '1593356%';
show global variables like '%index%'
show variables like '%index%'
show global variables like '%min_examined_row_limit%'
show variables like '%min_examined_row_limit%'
show variables like '%long_query_time%'
set global long_query_time=0.0001
set global log_queries_not_using_indexes=off
set global min_examined_row_limit=0
set min_examined_row_limit=50
select sleep(2),8888;
欢迎加我们微信wang1415035017进入微信高级技术群共同进步,或者扫码加入我们哦(v_v)
欢迎加我们微信wang1415035017进入微信高级技术群共同进步,或者扫码加入我们哦(v_v)