はじめまして。日本マイクロソフトPremier Field Engineering部の坂輪です。平山、古賀の二人によってDenaliの機能について紹介が行われているこのシリーズですが、今回と次回の2回にわたってDenaliで変更されたメモリ管理について紹介していきます。どうぞおつきあいください。
Denaliで変わる!メモリ管理
SQL Serverは既定でシステムの物理メモリの空き状況に応じて、自分自身が使用しているメモリのサイズを調整します。そのため、SQL Serverをインストールしているコンピュータがデータベース専用のサーバーとして使用される際は、多くの場合SQL Serverに任せておいても問題はありません。しかし、同じコンピュータで他のアプリケーションが実行される場合などで物理メモリの空きをあらかじめ残しておきたい場合、 SQL Serverの構成オプション‘max server memory’を設定されると思います。 しかし、ご存知のように 'max server memory' はバッファプールの制御を行うオプションであり、SQL Serverが獲得するメモリの全体を制御するためのものでないことは多くの方がご存知と思います。
この制約はSQL Server 2008 R2までのメモリ マネージャのアーキテクチャに依存したものであり、SQL Server 2008で実装されたリソースガバナーにも影響を与えています。リソースガバナーはクライアントからの要求によって消費されるリソースを制御することができる機能ですが、指定できるメモリの制限は消費されるメモリのすべてを制御することはできないのです。
このような問題から次期バージョンのDenaliではメモリ管理の仕組みが大きく変更されました。この変更を 弊社内部では、Memory Manager Re-Architecture (MMR) と呼んでいます。MMRでどのようにメモリ管理が変わったかをお話しする前に、SQL Server 2008 R2までのメモリ管理の仕組みについてご説明したいと思います。