我的更新声明是
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时提高更新性能?
答案 0 :(得分:0)
简短的回答是否定的。启用二进制日志记录时,无法提高性能。我认为这是MySQL中最大的权衡之一。答案来自MySQL性能博客的主要作者Baron Schwartz的一篇文章:
启用二进制日志可显着降低MySQL的性能。它 记录本身不是问题 - 编写日志是 通常没有多少额外的工作。这是确保一致性和 耐用性很贵。将其刷新到磁盘会添加fsync调用 每笔交易。并且服务器执行XA事务 InnoDB和二进制日志之间。这会增加更多的fsync调用,以及 导致互斥争用,并阻止组提交,可能还有其他 现在没有想到的事情。
您可以阅读full article here。