回溯日誌是與單一讀寫交易相關聯的回溯日誌記錄集合。回溯日誌記錄包含有關如何回溯交易對叢集索引記錄所做的最新變更的資訊。如果另一個交易需要查看原始資料作為一致讀取操作的一部分,則會從回溯日誌記錄中擷取未修改的資料。回溯日誌存在於回溯日誌區段中,這些區段包含在回溯區段中。回溯區段位於回溯表空間和全域暫時表空間中。
位於全域暫時表空間中的回溯日誌用於修改使用者定義暫時表格中資料的交易。這些回溯日誌不會重做記錄,因為它們不是崩潰復原所必需的。它們僅用於在伺服器執行時進行回溯。這種類型的回溯日誌透過避免重做記錄 I/O 來提高效能。
有關回溯日誌靜態資料加密的資訊,請參閱回溯日誌加密。
每個回溯表空間和全域暫時表空間個別支援最多 128 個回溯區段。innodb_rollback_segments
變數定義回溯區段的數量。
回溯區段支援的交易數量取決於回溯區段中的回溯槽數量以及每個交易所需要的回溯日誌數量。回溯區段中的回溯槽數量因InnoDB
頁面大小而異。
InnoDB 頁面大小 | 回溯區段中的回溯槽數量 (InnoDB 頁面大小 / 16) |
---|---|
4096 (4KB) |
256 |
8192 (8KB) |
512 |
16384 (16KB) |
1024 |
32768 (32KB) |
2048 |
65536 (64KB) |
4096 |
一個交易最多會指派四個回溯日誌,每個日誌用於以下其中一種操作類型
回溯日誌會根據需要指派。例如,在一般和暫時表格上執行INSERT
、UPDATE
和DELETE
操作的交易需要完整指派四個回溯日誌。僅在一般表格上執行INSERT
操作的交易只需要一個回溯日誌。
對一般表格執行操作的交易會從指派的回溯表空間回溯區段中指派回溯日誌。對暫時表格執行操作的交易會從指派的全域暫時表空間回溯區段中指派回溯日誌。
指派給交易的回溯日誌會在交易持續期間保持附加到該交易。例如,針對一般表格上的INSERT
操作指派給交易的回溯日誌會用於該交易所執行的一般表格上的所有INSERT
操作。
考慮到上述因素,可以使用以下公式來估算 InnoDB
能夠支援的並行讀寫交易數量。
在達到 InnoDB
能夠支援的並行讀寫交易數量之前,可能會遇到並行交易限制錯誤。當分配給交易的回滾區段用盡復原槽時,就會發生這種情況。在這種情況下,請嘗試重新執行交易。
當交易對暫存表格執行操作時,InnoDB
能夠支援的並行讀寫交易數量會受到分配給全域暫存表格空間的回滾區段數量限制,預設值為 128 個。
如果每個交易執行
INSERT
或UPDATE
或DELETE
操作,則InnoDB
能夠支援的並行讀寫交易數量為(innodb_page_size / 16) * innodb_rollback_segments * number of undo tablespaces
如果每個交易執行
INSERT
和UPDATE
或DELETE
操作,則InnoDB
能夠支援的並行讀寫交易數量為(innodb_page_size / 16 / 2) * innodb_rollback_segments * number of undo tablespaces
如果每個交易對暫存表格執行
INSERT
操作,則InnoDB
能夠支援的並行讀寫交易數量為(innodb_page_size / 16) * innodb_rollback_segments
如果每個交易對暫存表格執行
INSERT
和UPDATE
或DELETE
操作,則InnoDB
能夠支援的並行讀寫交易數量為(innodb_page_size / 16 / 2) * innodb_rollback_segments