Mysql
innodb_table_locks=0
是個好主意嗎?
我已經多次注意到 mysql 中的觸發器會導致觸發器中引用的每個表上的表鎖定。即使沒有真正觸及,就像它在
IF
聲明中一樣。如果我正確理解 MySql (8.x) 文件,設置
innodb_table_locks=0
將禁用這些。現在這會對mysql伺服器產生負面影響嗎?任何性能/穩定性/完整性影響?
有什麼理由我什至希望通過觸發器(而不是單個查詢)來鎖定全表?(除了可能更容易的死鎖檢測?)
謝謝!
如果您使用 LOCK TABLES WRITE 鎖定表,那麼您對該表進行更改,它會呼叫觸發器,並且在該觸發器中,訪問其他表。預設行為是其他表被鎖定。
如果設置
innodb_table_locks=0
,則這些觸發器訪問的其他表不會被鎖定。因此,如果其他會話在其他表中有一些行鎖,這將有所幫助,因為您呼叫觸發器的操作不必等待表鎖。
另一方面,如果您的觸發器程式碼依賴於對其他表的獨占訪問來避免競爭條件,那麼您可能會破壞它,並獲得難以調試的競爭條件。
如果您在正常使用表時不使用 LOCK TABLES WRITE,這一切都沒有實際意義。