mysql开启审计日志会导致性能下降(MySQL 一则慢日志监控误报的问题分析与解决)
mysql开启审计日志会导致性能下降
MySQL 一则慢日志监控误报的问题分析与解决之前因为各种原因,有些报警没有引起重视,最近放假马上排除了一些潜在的人为原因,发现数据库的慢日志报警有些奇怪,主要表现是慢日志报警不属实,收到报警的即时通信提醒后,隔一会去数据库里面去排查,发现慢日志的性能似乎没有那么差(我设置的一个阈值是60)。
排查过几次代码层面的逻辑,没有发现明显的问题,几次下来,问题依旧,这可激发了修正的念头,决定认真看看到底是什么原因。
后端使用的是基于ORM的模式,数据都存储在模型MySQL_slowlog_sql_history对应的表中。
代码层面是类似如下的逻辑:
MySQL_slowlog_sql_history.objects.filter(create_time__gt='2020-01-29 11:00:00',Query_time_pct_95__gt=60)
传入的时间是动态的,然后阈值取60秒,按照预期如果报警出来就肯定是有问题的。
为了进一步验证,我把阈值时间修改为600,竟然还是报出错误,执行7~8秒的慢查询照样会报出来。
我使用debug的方式得到了ORM解析得到的SQL:
|
SELECT ...`mysql_slowlog_sql_history`.`create_time`, `mysql_slowlog_sql_history`.`memo` FROM `mysql_slowlog_sql_history` WHERE (`mysql_slowlog_sql_history`.`create_time` > '2020-01-29 11:00:00' AND `mysql_slowlog_sql_history`.`Query_time_pct_95` > '600' ) LIMIT 21; args=(u '2020-01-29 11:00:00' , u '600' ) |
看SQL没问题啊。
我自己在客户端执行,确实是好好的,只过滤出了600秒以上的结果。
|
select ip_addr,db_port from mysql_slowlog_sql_history where create_time> '2020-01-29 00:00:00' and Query_time_pct_95 > 600; |
对着这个结果我开始反思,到底是什么原因呢?
我看着模型的字段定义开始有所悟,然后快速验证了一番。
为了方便说明,我创建了一个测试表test_dummy.
|
create table test_dummy(id int primary key auto_increment,Query_time_pct_95 varchar (100)); |
初始化几条数据。
|
insert into test_dummy(Query_time_pct_95 ) values ( '8.83736' ),( '7.70056' ),( '5.09871' ),( '4.32582' ); + ----+-------------------+ | id | Query_time_pct_95 | + ----+-------------------+ | 1 | 8.83736 | | 4 | 7.70056 | | 7 | 5.09871 | | 10 | 4.32582 | + ----+-------------------+ 4 rows in set (0.00 sec) |
然后使用如下的两条语句来进行对比测试。
|
mysql> select * from test_dummy where Query_time_pct_95>600; Empty set (0.00 sec) |
|
mysql> select * from test_dummy where Query_time_pct_95> '600' ; + ----+-------------------+ | id | Query_time_pct_95 | + ----+-------------------+ | 1 | 8.837364 | | 2 | 7.700558 | + ----+-------------------+ 2 rows in set (0.00 sec) |
可以看到,使用了整型数值的时候,没有返回结果,而使用了字符类型的时候,匹配的结果是按照最左匹配的模式来进行过滤的,也就意味着在数据库层面对于浮点数的处理还是差别很大的。
所以这个问题的快速修复方式就是在数据库层面修改数据表的类型为float,而在精度损失方面这块的影响是可以忽略不计的。
再次验证,这个问题就没有再次出现。
以上就是MySQL 一则慢日志监控误报的问题分析与解决的详细内容,更多关于MySQL慢日志监控误报的资料请关注开心学习网其它相关文章!
原文链接:https://cloud.tencent.com/developer/article/1586775
- mysql重新安装失败
- mysqlsql语句的优化(MySQL优化之如何写出高质量sql语句)
- mysql变量技巧(mysql用户变量与set语句示例详解)
- mysql双主状态不一致(MySQL GTID主备不一致的修复方案)
- mysql事务特性和隔离级别(Mysql事务特性和级别原理解析)
- mac版本php环境搭建(在Mac OS X中配置Apache+PHP+MySQL运行环境的详细步骤)
- navicat15激活页面不显示(Navicat for MySQL 15注册激活详细教程)
- mysql数据库基本使用方法(详解MySQL 数据库范式)
- mysql的复制原理(浅析MySQL的WriteSet并行复制)
- mysql优化方案最新(记一次MySQL的优化案例)
- mac更改mysql密码(Mac下mysql 8.0.22 找回密码的方法)
- mysql的日志怎么清除(MySQL删除了记录不生效的原因排查)
- mysql数据库死锁原理(MySQL数据库锁机制原理解析)
- mysql简单查询基本语句(详解MySQL 查询语句的执行过程)
- mysql给字段加默认值(MySQL 如何处理隐式默认值)
- mysql清空数据库所有表格(MySQL用truncate命令快速清空一个数据库中的所有表)
- 北京旅游攻略(北京旅游攻略5日游及其花费)
- 四川旅游攻略(四川旅游攻略自由行攻略)
- 上海迪士尼攻略(上海迪士尼攻略旅游)
- 哪里可以看熊猫(成都哪里可以看熊猫)
- oppo手机的三种录屏方法,你知道有哪些吗(oppo手机的三种录屏方法)
- 吉林神秘传染链跨省 传染源尚未找到,舒兰 封城(吉林神秘传染链跨省)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9