SQL Server での NUMA のサポート状況

SQL Server 2005 では NUMA (non-uniform memory access) アーキテクチャを活用するために、次の点が主に変更されました。

共通 CPU のグループ化

SQL Server では、Windows によって公開されるハードウェア NUMA 境界に基づいて、スケジューラがグループ化され、CPU のグループにマップされます。たとえば、CPU を 4 基ずつ備えたノード 4 つから 16 ウェイのコンピュータを構成できます。この構成により、ノードでのタスク処理時に、スケジューラのそのグループに対するメモリ局所性が高まります。SQL Server では、あるハードウェア NUMA ノードに属する CPU を複数の CPU ノードに再分割できます。この再分割をソフト NUMA といいます。CPU の再分割は、CPU ノード間で作業をパーティションに分割するために行われるのが一般的です。ソフト NUMA の詳細については、「Non-Uniform Memory Access について」を参照してください。

特定のハードウェア NUMA ノードで実行中のスレッドからメモリを割り当てるとき、SQL Server のメモリ マネージャは参照の局所性を得るために、その NUMA ノードに属するメモリから割り当てます。同様に、バッファ プール ページがハードウェア NUMA ノード間に分散されます。スレッドからメモリにアクセスするときは、ローカル メモリに割り当てられたバッファ ページのメモリにアクセスする方が、外部メモリにアクセスするよりも効率的です。詳細については、「NUMA 環境下でのバッファ プールの拡張と縮小」を参照してください。

各 NUMA ノード (ハードウェア NUMA またはソフト NUMA) には、ネットワーク I/O の処理に使用する I/O 完了ポートが関連付けられています。このしくみを利用して、ネットワーク I/O 処理が複数のポート間に分散されます。SQL Server にクライアント接続が確立されると、ノードの 1 つに接続がバインドされます。そのクライアントからのすべてのバッチ要求はそのノードで処理されます。

SQL Server インスタンスが NUMA 環境で起動されるたびに、SQL エラー ログには NUMA 構成について説明する情報メッセージが記録されます。

SQL Server でのソフト NUMA ノードのハードウェア NUMA ノードへのマップ

ソフト NUMA はコンピュータ上のすべての SQL Server インスタンスについて定義されるため、複数のデータベース エンジン インスタンスがすべて同じソフト NUMA ノードを参照します。各データベース エンジン インスタンスは、affinity mask オプションを使用して適切な CPU を選択します。各インスタンスはこれらの CPU に関連付けられたソフト NUMA ノードを使用します。

Windows の起動時に、ハードウェア NODE 0 からオペレーティング システムにメモリが割り当てられます。そのため、ハードウェア NODE 0 では、他のアプリケーションで使用可能なローカル メモリは他のノードより少なくなります。この問題は、大きいシステム ファイル キャッシュがある場合に顕著になります。複数の NUMA ノードがあるコンピュータ上で SQL Server を起動する場合、グローバルな構造をローカル メモリに割り当てることができるように、NODE 0 以外の NUMA ノードを使用して起動しようとします。ソフト NUMA を構成するには、「ソフト NUMA を使用するように SQL Server を構成する方法」を参照してください。

NUMA ノードへの接続の割り当て

TCP と VIA はどちらも、接続を 1 つ以上の特定の NUMA ノードに関係付けることができます。関係付けない場合、または名前付きパイプか共有メモリに接続する場合、接続はラウンド ロビン方式で NUMA ノードに分散されます。NUMA ノード内では、接続はそのノードで負荷が最小のスケジューラ上で実行されます。新しい接続を割り当てるラウンド ロビン方式の特性により、あるノードではすべての CPU がビジー状態になる一方で、別のノードはアイドル状態になる可能性があります。CPU の数が非常に少ない場合 (たとえば 2 つ)、および一括読み込みなどの時間のかかるバッチ処理のためにスケジューリングのバランスが大きく崩れている場合、NUMA をオフにするとパフォーマンスが向上する場合があります。詳細については、「NUMA ノードに TCP/IP ポートをマッピングする方法」を参照してください。

SQL Server のバージョンによる制限‎‎‎‏‏

SQL Server 2000 の Service Pack 3 までは、NUMA の特別なサポートはありません。しかし、Service Pack 4 では限定的な NUMA の最適化をサポートしています。SQL Server 2005 では多くの点が強化されているので、NUMA アーキテクチャの機能をすべて利用するためには、SQL Server 2005 にアップグレードすることをお勧めします。