動的メモリ管理

Microsoft SQL Server データベース エンジンの既定のメモリ管理動作では、システムでメモリ不足を発生させることなく、必要な量のメモリを獲得します。データベース エンジンでは、Microsoft Windows の Memory Notification API を使用してこれを実現しています。

SQL Server の仮想アドレス空間は、バッファ プールによって占有される領域とそれ以外の領域という 2 つの別個の領域に分割できます。AWE メカニズムが有効になっている場合、バッファ プールは AWE でマップされたメモリに存在し、データベース ページに追加領域を提供します。

バッファ プールは、SQL Server の主要なメモリ割り当て元となります。SQL Server プロセス内にある COM オブジェクトなどの外部コンポーネントは、SQL Server のメモリ管理機能に対応していないため、バッファ プールによって占有される仮想アドレス空間の外部のメモリを使用します。

SQL Server を起動すると、システムの物理メモリの量、サーバー スレッドの数、さまざまな起動パラメータなど、数多くのパラメータに基づいてバッファ プール用の仮想アドレス空間のサイズが計算されます。SQL Server では、計算された量のプロセス仮想アドレス空間をバッファ プール用に予約しますが、現在の負荷に必要な量だけ物理メモリを獲得 (コミット) します。

インスタンスでは、ワークロードのサポートに必要なメモリを獲得し続けます。多くのユーザーが接続してクエリを実行すると、SQL Server では要求に応じて追加の物理メモリを獲得します。SQL Server インスタンスでは、max server memory の割当量に達するか、または Windows によって余分な空きメモリがなくなったことが示されるまで、物理メモリを獲得し続けます。獲得したメモリの量が min server memory 設定よりも多く、Windows によって空きメモリの不足が示されると、メモリが解放されます。

SQL Server のインスタンスが動作しているコンピュータ上で他のアプリケーションを起動すると、メモリを消費し、物理メモリの空き領域が SQL Server の目標よりも少なくなります。SQL Server のインスタンスでは、メモリの消費を調整します。他のアプリケーションが停止され、使用可能なメモリが増えると、SQL Server のインスタンスはメモリ割り当てのサイズを大きくします。SQL Server は、数 MB のメモリの解放および獲得を毎秒行うことができるので、メモリ割り当ての変更に迅速に対応できます。