ログ先行書き込み

ログ先行書き込み（ログせんこうかきこみ、、WAL）は、データベースシステムにおいて原子性と永続性を実現するためのテクニックのひとつである。

ログ先行書き込みを採用したシステムでは、データベースに対する変更は全て実際の操作の前にログに記録される。通常、ログにはアンドゥとリドゥ用の情報が含まれている。

この処理の目的について例を挙げて説明する。プログラムがある処理を実行中にマシンの電源が落ちた場合を考える。マシンが再起動した後、プログラムは電源断の前に実行していた処理が成功したのか、途中まで進んでいて中断されたのか、失敗したのかを検知する必要がある。ログ先行書き込みが行われていた場合、プログラムはログをチェックして、電源が落ちたときに本来行われていなければならなかった内容と、実際に行われた内容とを比較する。この比較によって、プログラムは処理の開始時までアンドゥするか、中断された処理を再開して完了させるか、そのままの状態にしておくかを判断することができる。

ログ先行書き込みを使えばデータベースの更新をin-placeで行うことが可能である。アトミックな更新処理を実装する方法としては他にシャドウページングがあるが、これはin-placeなアルゴリズムではない。更新をin-placeで行う利点は主にインデックスとブロックリストの変更を少なくできることにある。

よく知られたログ先行書き込みアルゴリズムの一つとしてARIES（Algorithm for Recovery and Isolation Exploiting Semantics）が挙げられる。

ファイルシステムの分野では、ログ先行書き込みのことをジャーナリングと呼ぶ。

データベースアルゴリズム