Innodb
是否存在 InnoDB 最大事務大小,如果達到會發生什麼情況?
我想知道 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
. 我們需要更多資訊來分析它。