我们观察了一些查询的高延迟,进一步挖掘发现,通过检查缓慢的查询日志,每5分钟查询一次要花费很长的时间。
我们观察到
PURGE BINARY LOGS TO 'mysql-bin-changelog.041045';
每5分钟运行一次,每次花费超过1000毫秒。同时,类似于
SET timestamp=1492673425; commit;
也需要时间和
SELECT @@session.tx_isolation;
我们在Amazon上使用MySQL 5.7.11。为什么PURGE BINARY LOGS
会花费更长的时间而导致其他查询同时陷入困境呢?
发布于 2017-04-20 17:45:23
在MySQL5.7中,这是一个相当令人讨厌的错误,我在2个月前就已经在RDS之外体验过了.有一种奇怪的互斥行为涉及到清除二进制日志的行为。
我的解决方法包括手动删除操作系统中的一些二进制日志,如bin-log.index中所列,并执行PURGE BINARY LOGS BEFORE CURDATE() + INTERVAL 2 HOUR;
(每2点进行一次夜间清除)。它加快了它的速度,有些是因为它在操作系统中需要检查的文件较少。当涉及到仍然存在的实际绑定日志时,运行PURGE BINARY LOGS ...
只需拖动即可。这就是为什么我做手工烟雾弹之类的事。
在您的特定实例中,您使用的是RDS。由于不能访问操作系统,所以您无法对绑定日志做任何其他操作,因为最大值_联木_大小不能在RDS参数组中更改。如果您有大量或多个事务需要在写入二进制日志之前缓存,则可以更改最大值_联木_缓存_大小,但这可能会有所帮助,也可能无助于您在应用程序中写入的频率。
MySQL 5.6中不存在此问题。
您可能必须将您的数据库迁移回MySQL 5.6.27RDS。
根据我的经验,MySQL 5.7.12中的这个bug使我受害。你告诉我窃听器的地址是在MySQL 5.7.14中。我真希望我能像我想的那样升级。由于您的情况出现了MySQL 5.7.11,我知道除了我以外的人注意到了这个问题。请尽快升级到5.7.16。祝你今天愉快!
发布于 2017-04-20 15:40:11
如果您可以更改配置,我建议您
max_binlog_size
expire_logs_days
设置为适当的值--而不是手动使用PURGE BINARY LOGS
。如果PURGE
是来自RDS的一些维护脚本,那么向Amazon提交一个bug报告。
https://dba.stackexchange.com/questions/171505
复制相似问题