回溯日誌是與單一讀寫交易相關聯的回溯日誌記錄集合。回溯日誌記錄包含有關如何回溯交易對叢集索引記錄所做的最新變更的資訊。如果另一個交易需要查看原始資料以作為一致讀取操作的一部分,則會從回溯日誌記錄中擷取未修改的資料。回溯日誌存在於回溯日誌區段中,而回溯日誌區段包含在回溯區段中。回溯區段位於回溯表空間和全域暫時表空間中。
位於全域暫時表空間中的回溯日誌用於修改使用者定義暫時表格中資料的交易。這些回溯日誌不會被重做記錄,因為它們不是損毀復原所必需的。它們僅在伺服器執行時用於回溯。這種回溯日誌類型透過避免重做記錄 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
可支援的並行讀寫交易數量之前,可能會遇到並行交易限制錯誤。當指派給交易的回滾段用完 undo 插槽時,就會發生這種情況。在這種情況下,請嘗試重新執行交易。
當交易對臨時表執行操作時,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