死鎖檢測(cè)和回滾 |
發(fā)布時(shí)間: 2012/8/24 17:34:17 |
InnoDB自動(dòng)檢測(cè)事務(wù)的死鎖,并回滾一個(gè)或幾個(gè)事務(wù)來防止死鎖。InnoDB試著挑選小事務(wù)來回滾,事務(wù)的大小通過被插入、更新或刪除的行的數(shù)量來確定。
如果innodb_table_locks=1 (1是默認(rèn)值),InnoDB意識(shí)到表鎖定,其上的MySQL層知道row-level鎖定。另外InnoDB不能在MySQL LOCK TABLES設(shè)定表鎖定的地方或者涉及InnoDB之外的存儲(chǔ)引擎設(shè)置鎖定的地方檢測(cè)死鎖。你必須通過設(shè)定innodb_lock_wait_timeout系統(tǒng)變量的值來解決這些情況。 當(dāng)InnoD執(zhí)行完全的事務(wù)回滾之時(shí),該事務(wù)的所有鎖定被釋放。盡管如此,如果單個(gè)SQL語句被因?yàn)殄e(cuò)誤的原因被回滾,該SQL語句設(shè)定的部分鎖定可能被保留。這是因?yàn)镮nnoDB以一種方式存儲(chǔ)行鎖定,在這種方式中它不能知道隨后的哪個(gè)鎖定是被哪個(gè)SQL語句設(shè)定的。 本文出自:億恩科技【mszdt.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊(cè)頂級(jí)提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |