NUMA は、専用のハードウェアにより (ハードウェア NUMA)、または SQL Server のメモリを構成することで (ソフト NUMA)、CPU とメモリを対応させることができます。起動時に、SQL Server は、動作しているオペレーティング システムおよびハードウェア構成またはソフト NUMA の設定に基づいて、自分自身を構成します。ハードウェア NUMA でもソフト NUMA でも、NUMA 構成で SQL Server が起動するときには、SQL Server のログに、ノードごとのマルチモード構成メッセージが CPU マスクと共に記録されます。
ハードウェア NUMA
ハードウェア NUMA を使用するコンピュータには、それぞれがプロセッサの小さなセットとして機能する複数のシステム バスがあります。プロセッサの各グループには専用のメモリが搭載されており、場合によっては専用の I/O チャネルを備えています。ただし、各 CPU は、他のグループに関連付けられているメモリに、一貫した方法でアクセスできます。この CPU の各グループのことを NUMA ノードと呼びます。NUMA ノード内の CPU 数は、ハードウェア ベンダにより異なります。コンピュータがハードウェア NUMA をサポートするかどうかは、ハードウェアの製造元に問い合わせてください。
ハードウェア NUMA を使用する場合は、NUMA ではなくインターリーブされたメモリを使用するように構成できます。その場合、Windows および SQL Server では、この構成が NUMA として認識されません。SQL Server が使用できるメモリ ノードの数を調べるには、次のクエリを実行します。
SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks
SQL Server が単一のメモリ ノード (ノード 0) だけを返す場合は、ハードウェア NUMA を備えていないか、またはハードウェアがインターリーブ (非 NUMA) として構成されています。ハードウェア NUMA が正しく構成されていないと考えられる場合は、ハードウェアのベンダに連絡して、NUMA を有効にしてください。ハードウェア NUMA の CPU の数が 4 つ以下で、1 つ以上のノードに CPU が 1 つしかない場合、SQL Server は NUMA 構成を無視します。
ソフト NUMA
SQL Server では、CPU をソフト NUMA と呼ばれるノードにグループ化できます。通常は、CPU の数が多く、ハードウェア NUMA を装備していない場合にソフト NUMA を構成しますが、ハードウェア NUMA のノードを小さなグループに分割するためにソフト NUMA を使用することもできます。SQL Server スケジューラと SQL Server ネットワーク インターフェイス (SNI) だけが、ソフト NUMA に対応しています。メモリ ノードは、ハードウェア NUMA に基づいて作成されます。したがって、ソフト NUMA の影響は受けません。たとえば、8 個の CPU を備える SMP コンピュータがあり、それぞれが 2 個の CPU を含む 4 つのソフト NUMA ノードを作成した場合、メモリ ノードは 1 つだけで、このノードが 4 つの NUMA ノードすべてを管理します。ソフト NUMA は、CPU アフィニティにメモリを提供しません。
ソフト NUMA の利点には、CPU の数が多くてハードウェア NUMA を装備しないコンピュータにおける、I/O およびレイジー ライタのボトルネックの抑制があります。各 NUMA ノードには、単一の I/O スレッドと単一のレイジー ライタ スレッドがあります。データベースの使用状況によっては、これらの単一スレッドがパフォーマンスの重大なボトルネックになる可能性があります。4 つのソフト NUMA を構成すると、4 つの I/O スレッドと 4 つのレイジー ライタ スレッドが提供されるため、パフォーマンスが向上します。
異なるハードウェア NUMA ノードの CPU を含むソフト NUMA を作成することはできません。たとえば、ハードウェアが 8 個の CPU (0 ~ 7) を備え、2 つのハードウェア NUMA ノード (0 ~ 3 と 4 ~ 7) がある場合は、CPU (0、1) および CPU (2、3) の組み合わせでソフト NUMA を作成できます。CPU (1、5) を使用してソフト NUMA を作成することはできませんが、CPU アフィニティを使用して、SQL Server のインスタンスを異なる NUMA ノードの CPU に関係付けることはできます。したがって、上記の例では、SQL Server が CPU 0 ~ 3 を使用する場合は、I/O スレッドとレイジー ライタ スレッドは 1 つずつです。一方、上記の例で SQL Server が CPU 1、2、5、6 を使用する場合は、2 つの NUMA ノードにアクセスするようになり、I/O スレッドとレイジー ライタ スレッドはそれぞれ 2 つになります。
メモ : |
|---|
|
一部のハードウェア構成では、L3/L4 キャッシュのような共通リソースを共有します。このような共有リソースを中心にしてプロセッサをグループ化し、ソフト NUMA ノードを作成することができます。
|
詳細については、「ソフト NUMA を使用するように SQL Server を構成する方法」を参照してください。