アンドゥログ(Undo log)
MySQL/InnoDB が保持する変更前の値の記録。トランザクションの取り消し(ロールバック)と、MVCC で一貫したスナップショットを読むための古い行バージョンの復元という、2つの役目を持つ。
行を変更する前に、古い値がアンドゥログへ退避される。用途は2つ。(1) ロールバック: トランザクションが中止されると、アンドゥデータから行が元に戻される。(2) MVCC: 古い状態を見たい読み取りトランザクションは、アンドゥの連鎖をさかのぼってスナップショットを組み立てるので、書き込みをブロックしない。不要になった古いデータは、バックグラウンドの「パージ」が片付ける。
落とし穴は、長時間走るトランザクションが古いバージョンを抱え込み、アンドゥログが膨れる(history list length が伸びる)こと。Postgres のブロート問題とよく似ている。前方への復旧を担う redo log とは別物で、アンドゥは後ろ向き、つまり古い値のための仕組みだ。