前回SQL Server 2008 R2 までのメモリ管理についてご紹介しましたが、今回はDenaliでのメモリ管理についてご紹介します。
メモリマネージャの役割
Denali以前のメモリの獲得や内部コンポーネントへの割り当てなどの主要なメモリ管理は、バッファ プールとMulti Page Allocatorによっておこなわれていました。Denaliでは新しいメモリマネージャがその役割をもつようになります。バッファプールはメモリマネージャのクライアントになり、バッファ プールの役割のひとつであったメモリ管理の機能の多くはメモリマネージャに移行されました。そのため、バッファプールは本来のデータベースの情報のI/Oを管理するコンポーネントとなるのです。
また8KBと8KBを超える場合のメモリの獲得は異なるメカニズムで行われていましたが、新しいメモリマネージャによって1つのメカニズムで行われるようになります。この変更によってSQL Serverが獲得する全てのメモリを‘max server memory’で制御できるようになりました。

Denaliでは内部コンポーネントがメモリマネージャにメモリの要求をおこなうと、Workspaceからメモリの割り当てが行われます。Workspaceには複数のFixed size block Allocatorコンポーネントがあり、要求したメモリサイズに応じてFixed size block Allocator が選択されます。また、Workspaceはバッファプール用やキャッシュ用など様々な種類があり、それぞれの WorkspaceがもつFixed size block Allocatorのメモリ サイズや数は、Workspaceの種類や32bitと64bitのアーキテクチャで異なります。

この記事は参考になりましたか?
- あたらしいSQL Server/Denaliの世界連載記事一覧
- この記事の著者
-
坂輪貴行(サカワ タカユキ)
日本マイクロソフトの Premier Field Engineering 部にて、SQL Server ユーザーの支援を行う。前職はシステム エンジニアであり、長く Sybase を使用したプロジェクトに従事。業界歴 14 年の月一ゴルファー。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア