我有這個持續多年的問題,從來沒有能夠達到它的底部。我不知道是什麼可能導致這些鎖。MySql錯誤>鎖超時超時;嘗試重新啓動事務SQLState:41000 VendorError:1205
的錯誤是:Lock wait timeout exceeded; try restarting transaction SQLState: 41000 VendorError: 1205
的SQL語句是在一個事務中運行一個INSERT語句。所有刀片是這種形式的,所以沒有批量插入,也沒有混合模式插入等
系統配置: MySQL的版本:「服務器版本:61年1月5日來源分佈」(在Redhat)
存儲:INNODB
INNODB相關的配置(從my.cnf中部分編輯):
innodb_file_per_table=1
innodb_buffer_pool_size=3G
innodb_additional_mem_pool_size=20M
innodb_log_file_size=512M
innodb_log_files_in_group=2
innodb_log_buffer_size=16M
innodb_support_xa=1
innodb_doublewrite=1
innodb_thread_concurrency=0
innodb_flush_log_at_trx_commit=2
innodb_autoinc_lock_mode=2**
innodb_rollback_on_timeout=1
innodb_locks_unsafe_for_binlog=1**
thread_cache_size=8
query_cache_size=256M
query_cache_limit=4M
table_cache=2048
table_definition_cache=1024
tmp_table_size=512M
max_heap_table_size=512M
transaction-isolation=READ-COMMITTED**
innodb_table_locks=0**
innodb_lock_wait_timeout=50**
**這些已被具體添加在這個問題上。
一般:
系統(即具有每上一個MySQL實例都運行相同的數據庫結構6個應用實例)可以運行罰款天,然後可以有一個運行在那裏的鎖等待開始出現時,並通常會讓他們在一天中出現在小組中。每個單獨的錯誤都會重複發生,因爲一旦失敗,我將再次嘗試,通常重新嘗試將失敗。我已配置重試4次。通常鎖只會出現在幾個不同的表上。
今天問題的具體實例:
今天上午在attachment
表,不曾有過,因爲昨晚表上的插入。自從前一天晚上,桌面上也沒有更新。 如果鎖與更新和插入的其他用戶無關,那麼某些選擇語句會導致鎖?我試圖確保所有選擇語句使用attachment_general_index
?
由於我主要是在兩張不同的表上獲得這個結果 - 這裏是這張表的結構。
CREATE TABLE `attachment` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`entityid` int(10) unsigned DEFAULT NULL,
`entitytype` tinyint(3) unsigned NOT NULL DEFAULT '0',
`addeduserid` int(10) unsigned NOT NULL,
`deleteduserid` int(10) unsigned DEFAULT NULL,
`fullpath` varchar(255) DEFAULT NULL,
`filename` varchar(255) DEFAULT NULL,
`status` tinyint(3) unsigned NOT NULL DEFAULT '0',
`creationdate` varchar(40) DEFAULT NULL,
`lastupdated` varchar(40) DEFAULT NULL,
`deletiondate` varchar(40) DEFAULT NULL,
`hasfile` tinyint(3) unsigned NOT NULL DEFAULT '0',
`notes` text,
`history` text,
`type` tinyint(3) unsigned DEFAULT '0',
`lastupdatedby` int(10) DEFAULT '0',
`lastupdatedinfo` varchar(255) DEFAULT NULL,
`mimeinfo` varchar(255) DEFAULT NULL,
`archivedby` int(10) unsigned DEFAULT NULL,
`archivedon` varchar(40) DEFAULT NULL,
`referencedate` varchar(40) DEFAULT NULL,
`changedby` int(10) unsigned DEFAULT NULL,
`changedon` varchar(40) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `attachment_addeduserid_fkey` (`addeduserid`),
KEY `attachment_deleteduserid_fkey` (`deleteduserid`),
KEY `attachment_archivedby_fkey` (`archivedby`),
KEY `attachment_changedby_fkey` (`changedby`),
KEY `attachment_general_index` (`entitytype`,`entityid`,`status`,`type`),
CONSTRAINT `attachment_ibfk_1` FOREIGN KEY (`addeduserid`) REFERENCES `user` (`id`),
CONSTRAINT `attachment_ibfk_2` FOREIGN KEY (`deleteduserid`) REFERENCES `user` (`id`),
CONSTRAINT `attachment_ibfk_3` FOREIGN KEY (`archivedby`) REFERENCES `user` (`id`),
CONSTRAINT `attachment_ibfk_4` FOREIGN KEY (`changedby`) REFERENCES `user` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3619 DEFAULT CHARSET=latin1$$
我附上最近SHOW INNODB STATUS,這是從今天還沒有從昨天開始鎖等待。我不明白所有這些輸出,但主要的是鎖從未出現在這裏。我認爲他們沒有被歸類爲死鎖?
https://docs.google.com/document/d/1Hslf2B594n8ofAUYxN54Gh8FrSCIFNGGMtthVI_Lv4k/pub
難道只有死鎖地區,是有趣的這個問題?如果有其他地區,我會盡量收集,當它發生並可以提供。
任何幫助,將不勝感激。
尼克
'SHOW INNODB STATUS'說什麼? – Danack 2013-02-20 12:49:07
另外,還有什麼在交易中出錯?我猜測至少有一個其他插入,因爲這可以很容易地導致:http://www.xaprb.com/blog/2006/08/03/a-little-known-way-to-cause-a-database-死鎖/ – Danack 2013-02-20 12:52:44
@Danack,請參閱上面的鏈接到一些輸出到SHOW INNODB STATUS。對於失敗的事務,通常不會有大量的操作,但通常不會在同一個事務中插入同一個表中。關於xaprb鏈接(我很久以前閱讀過) - 但由於這種情況的性質,我認爲它並不適用?並感謝您的關注! – 2013-02-20 15:23:11