🦩
バッファヒット率とデータバッファ
データバッファとは
データバッファ(バッファキャッシュ/バッファプールとも呼ばれる)とは、ディスクから読み込んだデータページを一時的に保持するメモリ領域のことです。
-
DBMSはデータを直接ディスクから読み込むのではなく、まずバッファに載せて処理を行う。
-
以後のアクセスはバッファから読み込むため、ディスクI/Oを大幅に削減できる。
なぜ必要か
-
ディスクI/Oは遅い(ミリ秒オーダー)。
-
メモリアクセスは速い(ナノ秒〜マイクロ秒オーダー)。
→ よく使うデータをメモリ上に置いておけば、DBの応答速度は劇的に改善される。
構造のイメージ
-
固定長の「ページ」単位で管理(Oracle, PostgreSQL, SQL Server などは 8KB が標準)。
-
バッファプールにページを格納し、利用頻度の低いページから順に置き換え(LRUなど)。
-
更新はバッファ上で行い、ダーティページとして保持 → チェックポイント時にディスクへ書き戻す。
バッファヒット率とは
バッファヒット率とは、データアクセスがどの程度バッファ上で完結したかを示す割合です。
バッファヒット率=キャッシュで解決できた回数/全リクエスト回数
例
1000回のアクセスのうち、950回がバッファで処理された場合:
→ バッファヒット率 = 95%
意味
-
値が高いほど、ディスクI/Oが減り、ランダムアクセスの処理時間を短縮できる。
-
一般的に 90%以上 が望ましいとされる。
-
ただし、分析系クエリ(OLAP)など、大量データをフルスキャンする処理ではヒット率が下がるのは自然な挙動。
チューニングの観点
- バッファサイズの調整
バッファプールを大きくすると、より多くのデータを保持でき、ヒット率が上がる可能性がある。
- インデックス設計
不要なフルスキャンを避け、必要な行を効率よく読み込めるようにする。
- SQL最適化
無駄に大きな範囲を読み込むSQLを避けることで、バッファ効率が向上する。
Discussion