メモリマネージャの役割
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のアーキテクチャで異なります。