このページは機械翻訳したものです。
undo ログは、単一の読取り/書込みトランザクションに関連付けられた undo ログレコードの集合です。 undo ログレコードには、トランザクションによる clustered index レコードへの最新の変更を元に戻す方法に関する情報が含まれます。 別のトランザクションで読取り一貫性操作の一部として元のデータを参照する必要がある場合、未変更のデータは undo ログレコードから取得されます。 undo ログは、rollback segments 内に含まれる undo log segments 内に存在します。 ロールバックセグメントは、undo tablespaces および global temporary tablespace にあります。
グローバル一時テーブルスペースに存在する undo ログは、ユーザー定義一時テーブルのデータを変更するトランザクションに使用されます。 これらの undo ログは、クラッシュリカバリに必要ないため、redo ログには記録されません。 これらは、サーバーの実行中のロールバックにのみ使用されます。 このタイプの undo ログは、redo ロギング I/O を回避することでパフォーマンスを向上させます。
undo ログの保存データ暗号化の詳細は、undo ログの暗号化 を参照してください。
各 undo テーブルスペースとグローバル一時テーブルスペースは、それぞれ最大 128 個のロールバックセグメントをサポートします。 innodb_rollback_segments 変数は、ロールバックセグメントの数を定義します。
ロールバックセグメントでサポートされるトランザクションの数は、ロールバックセグメント内の undo スロットの数および各トランザクションに必要な undo ログの数によって異なります。
ロールバックセグメントの undo スロットの数は、InnoDB のページサイズによって異なります。
| InnoDB ページサイズ | ロールバックセグメント内の undo スロット数 (InnoDB ページサイズ / 16) |
|---|---|
4096 (4KB) |
256 |
8192 (8KB) |
512 |
16384 (16KB) |
1024 |
32768 (32KB) |
2048 |
65536 (64KB) |
4096 |
トランザクションには、次の操作タイプごとに 1 つずつ、最大 4 つの undo ログが割り当てられます:
ユーザー定義テーブルに対する
INSERT操作ユーザー定義テーブルに対する
UPDATEおよびDELETE操作ユーザー定義一時テーブルに対する
INSERT操作ユーザー定義一時テーブルに対する
UPDATEおよびDELETE操作
undo ログは必要に応じて割り当てられます。 たとえば、通常のテーブルおよび一時テーブルに対して INSERT、UPDATE および DELETE 操作を実行するトランザクションには、4 つの undo ログの完全な割当てが必要です。 通常のテーブルに対して INSERT 操作のみを実行するトランザクションには、単一の undo ログが必要です。
通常のテーブルに対して操作を実行するトランザクションには、割り当てられた undo テーブルスペースロールバックセグメントから undo ログが割り当てられます。 一時テーブルに対して操作を実行するトランザクションには、割り当てられたグローバル一時テーブルスペースロールバックセグメントから undo ログが割り当てられます。
トランザクションに割り当てられた undo ログは、その期間中トランザクションに関連付けられたままになります。 たとえば、通常のテーブルに対する INSERT 操作のトランザクションに割り当てられた undo ログは、そのトランザクションによって実行される通常のテーブルに対するすべての 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