by shigemk2

当面は技術的なことしか書かない

4.6 バッファマネージャー Mpool #read_aosa

BerkeleyDBの続き

Berkeley DB Mpoolサブシステムについて

Man page of MPOOL

ファイルページを扱うインメモリのバッファプール

  • ソフトウェアを実行する際、使用するプログラムやデータのすべてをメモリ上に読み込み、ハードディスクなどの外部記憶装置を使わない
  • 高速に実行できる反面大容量のDBの場合は大量のメモリが必要となる

インメモリとは 〔 オンメモリ 〕 【 in-memory 】 - 意味/解説/説明/定義 : IT用語辞典

バッファプール

バッファープールとは,表や索引のデータ・ページをディスクから読み取る際や変更する際に,そのデータをキャッシュに入れておくためのメモリー

用語解説

バッファー・プールの目的は、データベース・システムのパフォーマンスを改善すること

DB2 バッファー・プール

ページ

特集:基礎から理解するデータベースのしくみ - 基礎から理解するデータベースのしくみ(6):ITpro

ページには,テーブルを構成するレコードや,インデックスのエントリを複数格納する

動き

  • 実際はディスク上の永続データのキャッシュであるという前提
  • メモリ内のページを固定し、他のプロセス、スレッドがそのページをバッファプールから削除できないようにする

Mpoolのファイル抽象化

ファイルシステム上で動かすことを前提としているため、ファイルを抽象化したAPIを公開

ダーティ

DBの書き込みはディスクからデータを取り出してメモリの中で計算して修正したデータをディスクに戻す。メモリにデータを書き込まれた状態をダーティと呼ぶ。

読み込み用として固定したページはダーティになったとしてもディスクに書き込める

データの読み込みでダーティ状態が発生するのか?

固定している最中に読み込みとか書き込みとかしてもいいのか?っていう話 書き込み中に書き戻しは当然だめだけど、読み込み中に書き込みはいいんじゃないのか

ログ先行書き込み(WAL)

処理に失敗した場合の復旧 データを更新する前に変更内容のログをディスクに書き込む すべてのデータページにログシーケンス番号(LSN)を書き込み、特定のページへの直近の変更に対応するログレコードを記録する

本体とは別のところにLSNを書き込むスペースがある。DBが壊れたときはそのスペースのLSNから該当するSQLを見つけ出して復旧する

LSNからSQLを呼び出す専用のメソッドが存在し、それを呼び出さないとLSNは使われない

設計

  • ログ先行書き込みはカプセル化とレイヤー化の一例でもある
  • こうした指針は有用で、ソフトウェアの保守やテスト、デバッグ、拡張をしやすくしてくれる