🦩

バッファヒット率とデータバッファ

に公開

データバッファとは

データバッファ(バッファキャッシュ/バッファプールとも呼ばれる)とは、ディスクから読み込んだデータページを一時的に保持するメモリ領域のことです。

  • DBMSはデータを直接ディスクから読み込むのではなく、まずバッファに載せて処理を行う。

  • 以後のアクセスはバッファから読み込むため、ディスクI/Oを大幅に削減できる。

なぜ必要か

  • ディスクI/Oは遅い(ミリ秒オーダー)。

  • メモリアクセスは速い(ナノ秒〜マイクロ秒オーダー)。
    → よく使うデータをメモリ上に置いておけば、DBの応答速度は劇的に改善される。

構造のイメージ

  • 固定長の「ページ」単位で管理(Oracle, PostgreSQL, SQL Server などは 8KB が標準)。

  • バッファプールにページを格納し、利用頻度の低いページから順に置き換え(LRUなど)。

  • 更新はバッファ上で行い、ダーティページとして保持 → チェックポイント時にディスクへ書き戻す。

バッファヒット率とは

バッファヒット率とは、データアクセスがどの程度バッファ上で完結したかを示す割合です。

バッファヒット率=キャッシュで解決できた回数/全リクエスト回数

1000回のアクセスのうち、950回がバッファで処理された場合:
→ バッファヒット率 = 95%

意味

  • 値が高いほど、ディスクI/Oが減り、ランダムアクセスの処理時間を短縮できる。

  • 一般的に 90%以上 が望ましいとされる。

  • ただし、分析系クエリ(OLAP)など、大量データをフルスキャンする処理ではヒット率が下がるのは自然な挙動。

チューニングの観点

  • バッファサイズの調整

バッファプールを大きくすると、より多くのデータを保持でき、ヒット率が上がる可能性がある。

  • インデックス設計

不要なフルスキャンを避け、必要な行を効率よく読み込めるようにする。

  • SQL最適化

無駄に大きな範囲を読み込むSQLを避けることで、バッファ効率が向上する。

Discussion