メモリ管理 - Chapter 4 Memory Management

データベースエンジンでは、ディスクブロック上のデータはメモリ上のページを介して読み書きされます。
頻繁にデータの読み書きが行われるという特性上、このディスク-メモリ間のデータのやりとりでは、データベースエンジンは 2 つの原則に従います。

原則 1: ディスクアクセスを最小限に抑える

各ストレージデバイスのアクセス時間のレイテンシを比較すると、HDD は 2,000,000 ns、SSD は 16,000 ns、DRAM は 100 ns と大きく異なります1
したがって、ブロックアクセスの回数を最小限に抑えることでより高いパフォーマンスを発揮できるということになります。
データベースエンジンではメモリページを利用してブロックにあるデータをキャッシュし、同一ブロックに対するアクセス回数を抑える戦略をとっています。

CMU Intro to Database Systems の講義資料を参考に作成

原則 2: 仮想メモリに頼らない

OS は仮想メモリによって物理メモリ以上のメモリ空間を扱えるようになっています。もし物理メモリに存在しない仮想ページにアクセスした場合、ページスワップによりディスク I/O が発生します。
もしデータベースエンジンが仮想メモリの機能に頼り切りの場合、「どのページが現在使われているのか、どのページが不要なのか」を OS は知らないため、再利用が必要なページがスワップアウトされ、無駄なディスク I/O が発生する可能性があります。
また、データベースエンジンはデータの更新より先にログレコードをディスクに書き込む必要がありますが、OS のページスワップによりその順序が担保されず、クラッシュ時のリカバリー機能が損なわれる可能性があります。

したがって、データベースエンジンは自前でページ管理を行う必要があります。物理メモリに収まるページ数に限定して バッファプール (Buffer Pool) というページの集合を割り当てます。データベースエンジンは、どのページがスワップ可能かを追跡し、ブロックを読み込む必要が生じた際には、OS ではなくデータベースエンジン自身がバッファプールから利用可能なページを選び、必要に応じてそのデータやログレコードをディスクに書き戻してから、新しいブロックを読み込みます。

results matching ""

    No results matching ""