Innodb

是否存在 InnoDB 最大事務大小,如果達到會發生什麼情況?

  • September 28, 2021

我想知道 InnoDB 是否有最大事務大小。大概是innodb_log_file_size * innodb_log_files_in_group + innodb_log_buffer_size吧?這個最大大小將在所有正在進行的事務之間共享?

當達到這個最大尺寸時會發生什麼?交易被中止?

我問這個問題是因為我們的 MySQL 伺服器出現記憶體不足的問題,我們沒有足夠的想法來理解這個問題,並且我們想知道這是否可能是由於事務過大造成的。

當事務日誌變滿時,它會產生一個檢查點,如手冊中所述:

當 InnoDB 將重做日誌文件寫滿時,它必須在檢查點將緩衝池的修改內容寫入磁碟。

innodb_log_file_size需要至少BLOB是事務中最大的大小的 10 倍。

innodb_log_file_size * innodb_log_files_in_group受磁碟空間限制,因此不會導致OOM。

innodb_log_buffer_size在 RAM 中。它的預設值僅為 8M 可能適用於所有情況。它只是一個緩衝區。

除此之外,我認為交易的規模沒有任何限制。

UPDATEing十億行表的所有行都是一件很糟糕的事情,但這是建構巨大事務的簡單方法。它會很慢,但不會“太大”。

OOM 是另一回事。這通常可以通過減少my.cnf. 我們需要更多資訊來分析它。

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