バッファー プール拡張

適用対象:Windows 上の SQL Server

バッファー プール拡張機能は、SSD ストレージを データベース エンジン バッファー プールと統合して、追加メモリの高コストを発生させることなく、データベースのパフォーマンスを向上させます。

バッファー プール拡張機能は、すべての SQL Server エディションで使用できるわけではありません。 詳細については、「 SQL Server 2025 のエディションとサポートされている機能」を参照してください。

バッファー プール拡張機能の利点

ディスク I/O 操作の完了には比較的長い時間がかかる可能性があるため、多くのワークロードでパフォーマンスのボトルネックになります。

ディスク I/O を減らす一般的な方法は、データ キャッシュとして使用するメモリを追加することです。 役に立ちますが、この方法の欠点は、高いメモリ コストです。

バッファー プール拡張機能は、ローカル SSD ドライブなどの不揮発性ストレージを使用してバッファー プール キャッシュを拡張します。 この拡張機能を使用すると、バッファー プールはより大きなデータベース ワーキング セットに対応でき、低速なリモート I/O の大部分を高速のローカル SSD I/O に置き換えることができます。 SSD の待機時間が短く、I/O パフォーマンスが向上するため、バッファー プール拡張機能は、特にリモート I/O システムの速度が遅い場合にパフォーマンスを向上させることができます。

バッファー プール拡張機能の利点を次の一覧に示します。

  • I/O スループットの向上
  • I/O 待機時間の削減
  • トランザクションのスループットの向上
  • より大きなハイブリッド バッファー プールによる読み取りパフォーマンスの向上
  • 現在および将来の低コストのメモリ ドライブを使用できるキャッシュ アーキテクチャ

バッファー プール拡張機能の概念

バッファー プール拡張機能に関連する用語を次に示します。

任期 説明
バッファ データベース エンジンでは、バッファーはメモリ内の 8 KB のページであり、データ ページまたはインデックス ページと同じサイズです。 したがって、バッファー キャッシュは 8 KB 単位のページに分割されます。 ページは、バッファー マネージャーが、より多くのデータを読み取るためにバッファー領域を必要とするまで、バッファー キャッシュ内に留まります。 データは、変更された場合にのみディスクに書き戻されます。 これらのメモリ内の修正されたページは、"ダーティ ページ" と呼ばれます。 ディスク上のデータベース イメージと同等の場合、ページはクリーンです。 バッファー キャッシュ内のデータは、ディスクに書き戻す前に何度でも変更できます。
バッファー プール バッファー キャッシュとも呼ばれます。 すべてのデータベースは、キャッシュされたデータ ページのグローバル リソースとしてバッファー プールを使用します。 スタートアップ プロセスまたはsp_configureは、バッファー プール キャッシュの最大サイズと最小サイズを決定するために、データベース エンジン インスタンスを動的に再構成します。 このサイズにより、インスタンスがバッファー プールにキャッシュできるページの最大数が決まります。

外部メモリ不足により、バッファー プールのサイズが縮小され、バッファー プール拡張機能でキャッシュできるメモリが制限される可能性があります。
Checkpoint チェックポイントによって、予期しないシャットダウンやクラッシュの後の復旧中に、トランザクション ログに格納されている変更を データベース エンジン が適用するための最適なポイントが作成されます。 チェックポイントは、ダーティ ページとトランザクション ログ情報をメモリからディスクに書き込みます。 詳細については、「Database Checkpoints (SQL Server)」 (データベース チェックポイント (SQL Server)) をご覧ください。

バッファー プール拡張機能のアーキテクチャ

バッファー プール拡張機能を使用すると、ディスク サブシステムの一部ではなく、メモリ サブシステムの拡張機能として SSD ストレージを使用できます。 バッファー プール拡張ファイルを使用すると、バッファー プール マネージャーは DRAM と NAND フラッシュ メモリの両方を使用して、SSD 上のページのはるかに大きなバッファー プールを維持できます。

このアーキテクチャでは、レベル 1 (L1) を DRAM として、レベル 2 (L2) を SSD 上のバッファー プール拡張ファイルとして持つマルチレベル キャッシュ階層が作成されます。 データの安全性を維持するため、L2 キャッシュにはクリーンなページのみが書き込まれます。 バッファー マネージャーは、L1 キャッシュと L2 キャッシュの間のクリーンなページの移動を処理します。

次の図は、他のデータベース エンジン コンポーネントに対するバッファー プールのアーキテクチャの概要を示しています。

SSD バッファー プール拡張機能アーキテクチャの図。

バッファー プール拡張機能を有効にする場合は、SSD 上のバッファー プール キャッシュ ファイルのサイズとファイル パスを指定します。 このファイルは、SSD 上の連続した記憶域の範囲であり、データベース エンジン インスタンスの起動時に静的に構成されます。 ファイル構成パラメーターは、バッファー プール拡張機能が無効になっている場合にのみ変更できます。 バッファー プール拡張機能を無効にすると、関連するすべての構成設定がレジストリから削除されます。 システムは、データベース エンジンのシャットダウン時にバッファー プール拡張ファイルを削除します。

バッファー プール拡張機能の構成

バッファー プール拡張機能を構成するには、 ALTER SERVER CONFIGURATION を使用します。

システムは、最小および最大バッファー プール拡張サイズを適用するために、起動時にデータベース エンジン インスタンスで使用できる物理メモリを考慮します。

最大サイズ

バッファー プールの拡張機能の最大サイズは、SQL Serverエディションによって異なり、物理マシンと仮想マシンによって異なります。

最大サイズを超えるサイズを構成した場合、データベース エンジンはエラー 864 を返し、バッファー プール拡張機能は有効になりません。

  • SQL Server Enterprise、Enterprise Developer、Developer の各エディションでは、物理メモリの最大 32 倍がサポートされます。

  • 物理マシン上の SQL Server Standard および Standard Developer エディションは、物理メモリの最大 4 倍をサポートします。

    • SQL Server 2022 (16.x) 以前のバージョンでは最大 512 GB。

    • SQL Server 2025 (17.x) 以降のバージョンでは最大 1 TB。

  • SQL Server仮想マシン上の Standard および Standard Developer エディションでは、物理メモリの最大 16 倍がサポートされます。

詳細については、「 SQL Server 2025 のエディションとサポートされている機能」を参照してください。

最小サイズ

バッファー プール拡張機能のサイズは、物理メモリの最小値と 最大サーバー メモリ (MB) の値より大きくする必要があります。 構成されたサイズがこの最小値より小さい場合、データベース エンジンはエラー 868 を発生させます。 インスタンスの起動時に構成されたサイズがこの最小値より小さい場合、エラー 861 がログに記録され、バッファー プール拡張機能が有効になっていません。

構成変更の動作

拡張機能が有効になっている間、バッファー プール拡張機能のサイズより大きい値に max server memory (MB) を増やすことができます。 データベース エンジンは、情報メッセージ (エラー 5866) をログに記録し、変更を適用します。 ただし、新しい値は最小サイズ要件に違反するため、次回インスタンスが再起動されるときにバッファー プール拡張機能は無効になります。

max server memory (MB)以下のサイズのバッファー プール拡張機能を有効にすると、操作はエラー 868 で失敗します。

バッファー プール拡張機能のベスト プラクティス

次のベスト プラクティスを検討してください。

  • バッファー プール拡張機能を初めて有効にした後、データベース エンジン インスタンスを再起動して、パフォーマンスの最大の利点を得ます。
  • 物理メモリのサイズとバッファー プール拡張機能のサイズの比率が 1:16 以下になるように、バッファー プール拡張機能を設定します。 1:4 から 1:8 の範囲の低い比率が最適な場合があります。 max server memory (MB) オプションの設定については、「サーバー メモリ構成オプション」を参照してください。
  • 運用環境で実装する前に、バッファー プール拡張機能を十分にテストします。 運用環境に入ったら、ファイルに構成を変更したり、機能をオフにしたりしないでください。 これらのアクティビティは、機能を無効にするとバッファー プールのサイズが大幅に小さくなるため、サーバーのパフォーマンスに悪影響を及ぼす可能性があります。 無効にすると、機能をサポートするために使用されるメモリは、SQL Server のインスタンスが再起動されるまで再利用されません。 ただし、機能が再び有効になっている場合は、インスタンスを再起動せずにメモリが再利用されます。

バッファー プール拡張機能の監視

次の動的管理ビューを使用して、バッファー プール拡張の構成を表示し、拡張のデータ ページに関する情報を取得できます。

パフォーマンス カウンターは、バッファー プール拡張ファイル内のデータ ページを追跡するSQL ServerオブジェクトBuffer Managerで使用できます。 詳細については、「SQL Server、バッファー マネージャー オブジェクト」を参照してください。

バッファー プール拡張機能の詳細を監視するには、次の拡張イベントを使用できます。

Event 説明
buffer_pool_extension_pages_written ページまたはページのグループがバッファー プールから削除され、バッファー プール拡張ファイルに書き込まれると発生します。
buffer_pool_extension_pages_read ページがバッファー プール拡張ファイルからバッファー プールに読み取られると発生します。
buffer_pool_extension_pages_evicted ページがバッファー プール拡張ファイルから削除されると発生します。
buffer_pool_eviction_thresholds_recalculated 削除のしきい値が再計算されたときに発生します。