SQL ServerでNUMAノードがどのように役立つかを理解するための質問があります。
現在のセットアップでは、20個のコアとハイパースレッディングが有効になっている4つのNUMAノードがあり、合計で40個の論理プロセッサになります。メモリが400 GBの場合、各NUMAにはそれぞれ100 GBが割り当てられます。
これは、Windows 2012 R2 Standard上のSQL Server 2012 Enterprise(コアベースのライセンス)を備えた物理サーバーです。それは私が見るもののエラーログから、ソケットあたり10コアとソケットあたり20の論理プロセッサと合計80の4つのソケットを持っています。
私の理解では、4つのNUMAノードがあると、2つのNUMAよりも同じ数のNUMAを使用して移動すると(将来のSQLの更新が2017/19になると)、パフォーマンスが低下する可能性があります。
2 NUMAで400 GBがそれぞれ200 GBとして割り当てられると思うので、なぜ私はこれを言っているのですか。
したがって、私の理解は、クエリがメモリのノード間をどのように切り替えているかに基づいて、この構成にするとパフォーマンスが向上するか、または最高になると考えています。はい、いくつかのメモリの問題が発生しています。私たちが取り組んでいる他の関連する問題があることは知っていますが、この質問はSQL Server用に設定されたNUMAに固有のものです。
誰かが彼らの経験を共有してもらえますか、または私がここで間違っていると思うかもしれないので、より多くの洞察を提供することができますか?
クエリがメモリの2つの異なるNUMAをスワップするのに時間を費やしていて問題になる可能性があるかどうかを確認できる方法またはクエリはありますか?
2つのノードが将来の設計(クロスノードメモリアクセス)で4つのノードよりもうまく機能するかどうかを測定できる方法はありますか?
Windows 2012 R2標準の物理サーバー。これには、ソケットごとに10コアのソケットが4つ、ソケットごとに20個の論理プロセッサーがあり、エラーログから合計80が表示されます。 SQL2012は2017年に移行しようとしています
OK。このボックスのメモリは、それぞれが1つのソケットに接続されている4つの別々のノードに分かれています。 SQL Serverはすべてのソケットでメモリを使用し、SQL Serverメモリの多くはデータベースページとクエリプランのキャッシュに使用されるため、大量のノード間メモリアクセスが発生します。そして、それは大丈夫です。クエリメモリの付与は、タスクを実行しているワーカーのローカルノードに割り当てられます。
SQL Serverには、NUMAノードごとに割り当てるリソースがいくつかあります。SQLServer 2016以降の場合、大きなNUMAノードは Automatic Soft-NUMA 機能で自動的に細分割されます。
したがって、一方でサーバーメモリの物理構成についてできることは何もありません。他方では、SQL ServerがNUMAノードを最も効果的に使用するように自動的に構成するため、行う必要があることは何もありません。
将来の設計で、2つのノードが4つのノードよりもうまく機能するかどうかを測定できる方法はありますか?
基本的にノード数は少ない方が良いですが、1つのNUMAノードに配置できるコアの数とコアの数には制限がありますRAM.
NUMAを超えたノードのメモリアクセスのほとんどは、パフォーマンスカウンターで追跡できるバッファープールにある必要があります。
SQL Server:Buffer Node Remote Note page lookups/sec このノードからのルックアップ要求のうち、他のノードから満たされたものの数を示します。