## Memo
- [[Redis]]のAOFはコマンドロギング。
## Memo with LLM
**要約: Rethinking Main Memory OLTP Recovery (Malviya et al., ICDE 2014)**
**概要**
この論文では、高スループットなトランザクション処理システム(OLTP)におけるデータベースリカバリ手法を再考し、従来の**ARIESスタイルの細粒度ログ(Write-Ahead Logging, WAL)**ではなく、より軽量な**コマンドログ(Command Logging)**が有効であることを提案している。
ARIES のようなWAL方式では、データの変更前後のイメージを詳細に記録するが、これによりCPU負荷とI/Oオーバーヘッドが増大する。一方で、コマンドログでは、実行されたトランザクション自体(例えば、SQLクエリやストアドプロシージャ名+パラメータ)を記録し、リカバリ時にはそのコマンドを再実行する。これにより、ランタイムのオーバーヘッドを削減し、スループットを向上させることができる。
**提案手法(コマンドログの概要)**
1. **記録の単位:** コマンドログは、トランザクションのSQLコマンドやストアドプロシージャの名前とパラメータのみを記録する。
2. **リカバリ方法:** クラッシュ時には、**事前に取得したスナップショット**からデータベースを復元し、ログに記録されたコマンドを順番に再実行する。
3. **ARIESとの比較:**
- コマンドログは記録するデータ量が少なく、ランタイム性能が向上(約1.5倍)。
- ただし、リカバリ時間は長くなる(約1.5倍~5倍遅い)。
- 高可用性(HA)構成を前提とすれば、ノード障害時の影響を最小化できるため、リカバリ速度よりもランタイム性能が重要になる。
**実験と評価**
- **環境:** VoltDB(インメモリデータベース)を用いてTPC-Cベンチマークなどで評価。
- **結果:**
- **スループット:** コマンドログはARIESの1.5倍のトランザクション処理能力(TPC-C: 240万tpmC vs. 150万tpmC)。
- **リカバリ時間:** コマンドログは約1.5倍~5倍遅い。
- **ログサイズ:** コマンドログはARIESの10分の1のサイズで済む。
**結論**
- **OLTPシステムではコマンドログの方が適している。**
- **ただし、リカバリ速度が最優先される場合は、ARIESの方が有利。**
- **特に短いトランザクションが大量に発生する環境では、コマンドログの利点が大きい。**
- **分散トランザクションが多い場合はARIESの方がリカバリ効率が良くなるため、適用範囲に注意が必要。**
この研究は、高スループットOLTPシステムにおけるリカバリ手法の最適化に関する重要な知見を提供しており、今後のデータベースアーキテクチャにおけるログ記録方式の選択に影響を与える可能性がある。
## Abstract
ARIESのようなシステムに代表されるように、きめ細かいレコード指向の[[WAL]]は、リレーショナル・データベースの復旧のためのゴールド・スタンダードであった。 本稿では、最新の高スループット・トランザクション処理システムにおいて、これはもはやデータベースシステムをリカバリする最適な方法ではないことを示す。 特に、トランザクションのスループットが高くなるにつれて、ARIESスタイルのロギングは、トランザクション実行時間全体のごく一部を占めるに過ぎなくなる。 我々は、データベース上で実行されたトランザクションのみを記録する、より軽量で粗視化されたコマンドロギング技術を提案する。 そして、トランザクション的に一貫性のあるチェックポイントから開始し、ログ内のコマンドをあたかも新しいトランザクションであるかのように再生することでリカバリーを行う。 画像前後のきめ細かなロギングのオーバーヘッド(CPUの複雑さと関連する実質的な110の両方)を回避することにより、コマンドロギングは、実行時に著しく高いスループットをもたらすことができる。 コマンドロギングのリカバリ時間は、ARIEsスタイルの生理学的ロギングアプローチと比較して高いが、リカバリノードの停止をマスクできる高可用性技術の出現により、リカバリ速度は、ほとんどのアプリケーションのランタイムパフォーマンスの重要性において二の次になっている。 メインメモリデータベースシステム([[VoltDB]])におけるTPCCの実装で我々のアプローチを評価し、コマンドロギングがARIEsスタイルの生理学的ロギングのメインメモリ最適化実装よりも1.5倍高いスループットを提供できることを発見した。