簡體   English   中英

log_bin打開時,mysql 5.6.21更新語句非常慢

[英]mysql 5.6.21 update statement is very slow when log_bin is on

我的更新聲明是

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 transaction / second。 當log_bin被注釋掉#log_bin = mysql_bin時,jmeter測試結果為3500.2 transaction / second。

在兩個設置上的插入率都差不多,大約為8000個事務/秒。

為什么log_bin對mysql有可怕的性能影響? 打開log_bin時如何提高更新性能?

簡短的答案是沒有。 二進制日志記錄打開時,您無法提高性能。 我認為這是MySQL中最大的折衷之一。 長答案來自MySQL性能博客的主要作者Baron Schwartz的一篇文章:

啟用二進制日志會大大降低MySQL的性能。 問題不是日志本身,寫日志通常不需要太多額外的工作。 它確保了昂貴的一致性和耐用性。 將其刷新到磁盤會為每個事務添加一個fsync調用。 然后,服務器在InnoDB和二進制日志之間執行XA事務。 這增加了更多的fsync調用,並導致互斥鎖爭用,並阻止了組提交,並且可能還阻止了其他一些現在還沒有想到的事情。

您可以在此處閱讀全文

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM