当log_bin打开时,mysql 5.6.21更新语句非常慢

时间:2014-11-28 11:07:33

标签: mysql performance logging bin

我的更新声明是

update ptest set amount = amount - 2000 where id = 2

表ptest是

CREATE TABLE `ptest` (
  `id` bigint(19) NOT NULL AUTO_INCREMENT,
  `developerId` bigint(19) DEFAULT NULL,
  `appId` bigint(19) DEFAULT NULL,
  `caller` varchar(20) DEFAULT NULL,
  `callerDisplay` varchar(20) DEFAULT NULL,
  `called` varchar(20) DEFAULT NULL,
  `calledDisplay` varchar(20) DEFAULT NULL,
  `startTime` datetime DEFAULT NULL,
  `endTime` datetime DEFAULT NULL,
  `callTime` int(11) DEFAULT NULL,
  `callId` varchar(32) NOT NULL ,
  `billingTime` int(11) DEFAULT NULL,
  `callResult` varchar(10) DEFAULT NULL,
  `amount` bigint(20) DEFAULT NULL ,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=200001 DEFAULT CHARSET=utf8;

当系统变量log_bin设置为:log_bin = mysql_bin时,jmeter测试结果为237.4事务/秒。 当log_bin注释掉#log_bin = mysql_bin时,jmeter测试结果为3500.2事务/秒。

两者都设置插入率类似,大约8000交易/秒。

为什么log_bin对mysql的性能影响很大? 如何在打开log_bin时提高更新性能?

1 个答案:

答案 0 :(得分:0)

简短的回答是否定的。启用二进制日志记录时,无法提高性能。我认为这是MySQL中最大的权衡之一。答案来自MySQL性能博客的主要作者Baron Schwartz的一篇文章:

  

启用二进制日志可显着降低MySQL的性能。它   记录本身不是问题 - 编写日志是   通常没有多少额外的工作。这是确保一致性和   耐用性很贵。将其刷新到磁盘会添加fsync调用   每笔交易。并且服务器执行XA事务   InnoDB和二进制日志之间。这会增加更多的fsync调用,以及   导致互斥争用,并阻止组提交,可能还有其他   现在没有想到的事情。

您可以阅读full article here