2011-08-22 85 views
5

我們正在創建一個MySQL作爲數據庫(innodb引擎)的高度事務性系統。我們在表t1上有一個插入和更新觸發器,它正在更新表t2和t3。我們已經觀察到,無論何時併發用戶量很大,我們都會在表t1上獲得死鎖。我們假設觸發器發出一個表鎖,直到它完成它的執行。我們在t1上放棄了觸發器,並且出乎意料地沒有死鎖。高交易系統中的觸發器

我的問題:

  1. 難道不建議在觸發的高事務系統
  2. 如果沒有引發什麼是我們其他的選擇來實現相同的邏輯。

表t1有大約70,000行,並且每天增加。

欣賞任何輸入。

在此先感謝。

+4

您沒有提供足夠的信息。發佈'SHOW ENGINE INNODB STATUS'會顯示死鎖的原因。 70k行是真的沒什麼,你應該做什麼(如果你想幫助)發佈有問題的查詢,表結構和觸發器。您可以用字母替換實際的字段名稱,這樣業務邏輯就不會顯示出來。 –

回答

0

您可以使用事務代替,並執行所有處理客戶端。

START TRANSACTION; 

insert into t1; 
update t2; 
update t3; 

COMMIT; 

嘗試,而不是使用「更新選擇」和「插入選擇」構建,如果你可以使用客戶端提供的數據脫身。 另外InnoDB使用行鎖,這比MyISAM使用的表鎖更好。