Mysql

innodb_table_locks=0 是個好主意嗎?

  • June 28, 2022

我已經多次注意到 mysql 中的觸發器會導致觸發器中引用的每個表上的表鎖定。即使沒有真正觸及,就像它在IF聲明中一樣。

如果我正確理解 MySql (8.x) 文件,設置innodb_table_locks=0將禁用這些。

現在這會對mysql伺服器產生負面影響嗎?任何性能/穩定性/完整性影響?

有什麼理由我什至希望通過觸發器(而不是單個查詢)來鎖定全表?(除了可能更容易的死鎖檢測?)

謝謝!

如果您使用 LOCK TABLES WRITE 鎖定表,那麼您對該表進行更改,它會呼叫觸發器,並且在該觸發器中,訪問其他表。預設行為是其他表被鎖定。

如果設置innodb_table_locks=0,則這些觸發器訪問的其他表不會被鎖定。

因此,如果其他會話在其他表中有一些行鎖,這將有所幫助,因為您呼叫觸發器的操作不必等待表鎖。

另一方面,如果您的觸發器程式碼依賴於對其他表的獨占訪問來避免競爭條件,那麼您可能會破壞它,並獲得難以調試的競爭條件。

如果您在正常使用表時不使用 LOCK TABLES WRITE,這一切都沒有實際意義。

引用自:https://dba.stackexchange.com/questions/313839