Grundlegendes zu NUMA (Non-Uniform Memory Access)

Microsoft Microsoft SQL Server ist NUMA-fähig (Non-Uniform Memory Access) und liefert hervorragende Leistungen auf NUMA-Hardware, ohne dass eine besondere Konfiguration notwendig wäre. Mit immer schnelleren Prozessoren und einer wachsenden Anzahl von Prozessoren wird es zunehmend schwieriger, die Speicherlatenzzeit zu verringern, die für die Verwendung dieser zusätzlichen Verarbeitungsleistung erforderlich ist. Für die Umgehung dieser Schwierigkeit stellen Hardwarehersteller große L3-Caches bereit; dies ist jedoch nur eine eingeschränkte Lösung. Die NUMA-Architektur stellt eine skalierbare Lösung für dieses Problem bereit. SQL Server kann die Vorteile NUMA-basierter Computer nutzen, ohne dass Anwendungsänderungen erforderlich sind.

Konzepte von NUMA

Der Trend hinsichtlich Hardware geht dahin, mehrere Systembusse zu verwenden, von denen jeder eine kleine Gruppe von Prozessoren bedient. Jede Gruppe von Prozessoren verfügt über ihren eigenen Arbeitsspeicher und möglicherweise über eigene E/A-Kanäle. Jede CPU kann jedoch auf kohärente Weise auf Arbeitsspeicher zugreifen, der den anderen Gruppen zugeordnet ist. Jede dieser Gruppen stellt einen NUMA-Knoten dar. Die Anzahl der CPUs in einem NUMA-Knoten ist je nach Hardwarehersteller unterschiedlich. Der Zugriff auf den lokalen Speicher ist schneller als auf den Arbeitsspeicher, der anderen NUMA-Knoten zugeordnet ist. Aus diesem Umstand ergibt sich der Name NUMA-Architektur (Non-Uniform Memory Access, nicht einheitlicher Speicherzugriff).

Auf NUMA-Hardware befinden sich einige Speicherbereiche physisch auf einem anderen Bus als andere Bereiche. Bei NUMA wird sowohl lokaler Speicher als auch fremder Speicher verwendet, sodass der Zugriff auf bestimmte Speicherbereiche mehr Zeit in Anspruch nehmen kann als bei anderen Bereichen. Lokaler Speicher und Fremdspeicher werden im Allgemeinen im Hinblick auf einen derzeit ausgeführten Thread verwendet. Lokaler Speicher ist der Speicher, der sich auf demselben Knoten befindet wie die CPU, die den Thread gerade ausführt. Speicher, der nicht zu dem Knoten gehört, auf dem der Thread gerade ausgeführt wird, gilt als Fremdspeicher. Fremdspeicher wird gelegentlich auch als Remotespeicher bezeichnet. Das Verhältnis der Kosten für den Zugriff auf fremden Speicher zu den Kosten für den lokalen Speicher wird als NUMA-Verhältnis bezeichnet. Wenn das NUMA-Verhältnis 1 ist, liegt symmetrisches Multiprocessing (SMP) vor. Je größer das Verhältnis, um so höher sind die Kosten für den Zugriff auf den Arbeitsspeicher anderer Knoten. Windows-Anwendungen, die nicht NUMA-fähig sind (einschließlich SQL Server 2000 SP3 und früher), erzielen auf NUMA-Hardware manchmal nur unzureichende Leistungen.

Der wichtigste Vorteil von NUMA ist die Skalierbarkeit. Beim Entwurf der NUMA-Architektur stand das Ziel im Vordergrund, die Einschränkungen bei der Skalierbarkeit der SMP-Architektur zu überwinden. Bei SMP wird der gesamte Speicherzugriff an denselben freigegebenen Speicherbus gesendet. Diese Vorgehensweise ist bei einer relativ kleinen Anzahl von CPUs sicher in Ordnung, nicht aber, wenn Dutzende oder gar Hunderte CPUs um den Zugriff auf den freigegebenen Speicherbus konkurrieren. NUMA vermindert die Auswirkungen dieser Engpässe, indem die Anzahl der CPUs eingeschränkt wird, die sich auf einem bestimmten Speicherbus befinden, und indem die verschiedenen Knoten mithilfe einer Hochgeschwindigkeitsverbindung zusammengeschlossen werden.

NUMA-Knoten mit 4 Prozessoren

Hardware-NUMA und Soft-NUMA

NUMA kann durch spezielle Hardware (NUMA-Hardware) oder durch Konfigurieren des SQL Server-Arbeitsspeichers (Soft-NUMA) eine Zuordnung zwischen Arbeitsspeicher und CPUs vornehmen. Beim Starten konfiguriert sich SQL Server selbst auf Basis der zugrunde liegenden Betriebssystem- und Hardwarekonfiguration oder auf Basis der Soft-NUMA-Einstellung. Wenn SQL Server in einer NUMA-Konfiguration gestartet wird, zeichnet das SQL Server-Protokoll sowohl bei Hardware- als auch bei Soft-NUMA für jeden Knoten zusammen mit der CPU-Maske eine Meldung für eine Multimoduskonfiguration auf.

Hardware-NUMA

Computer mit Hardware-NUMA verfügen über mehrere Systembusse, von denen jeder eine kleine Gruppe von Prozessoren bedient. Jede Gruppe von Prozessoren verfügt über ihren eigenen Arbeitsspeicher und möglicherweise über eigene E/A-Kanäle, aber jede CPU kann auf kohärente Weise auf Arbeitsspeicher zugreifen, der anderen Gruppen zugeordnet ist. Jede dieser Gruppen stellt einen NUMA-Knoten dar. Die Anzahl der CPUs in einem NUMA-Knoten ist je nach Hardwarehersteller unterschiedlich. Der Hardwarehersteller kann Ihnen sagen, ob Ihr Computer NUMA-Hardware unterstützt.

Wenn Sie über NUMA-Hardware verfügen, können Sie sie ggf. so konfigurieren, dass anstelle von NUMA Interleave-Speicher verwendet wird. In diesem Fall erkennt Windows, und damit auch SQL Server, die Hardware nicht als NUMA. Führen Sie die folgende Abfrage aus, um die für SQL Server verfügbare Anzahl von Speicherknoten zu suchen:

SELECT DISTINCT memory_node_id
FROM sys.dm_os_memory_clerks

Wenn SQL Server nur einen einzigen Speicherknoten (Knoten 0) zurückgibt, verfügen Sie entweder nicht über NUMA-Hardware, oder die Hardware ist als interleaved konfiguriert (Nicht-NUMA). Wenn Sie den Eindruck haben, dass die Hardware-NUMA falsch konfiguriert ist, setzen Sie sich zum Aktivieren von NUMA mit Ihrem Hardwarehersteller in Verbindung. SQL Server ignoriert die NUMA-Konfiguration, wenn die Hardware-NUMA vier CPUs oder weniger und ein Knoten nur eine CPU aufweist.

Soft-NUMA

SQL Server ermöglicht es, CPUs in Knoten zu gruppieren. Dieser Vorgang wird als Soft-NUMA bezeichnet. Im Allgemeinen konfigurieren Sie Soft-NUMA, wenn Sie über viele CPUs und keine NUMA-Hardware verfügen. Sie können mit Soft-NUMA aber auch Hardware-NUMA-Knoten in kleinere Gruppen unterteilen. Nur das SQL Server-Zeitplanungsmodul und die SQL Server-Netzwerkschnittstelle (Network Interface, SNI) sind Soft-NUMA-fähig. Speicherknoten werden auf der Grundlage von Hardware-NUMA erstellt und werden somit nicht von Soft-NUMA beeinflusst. Wenn Sie beispielsweise bei einem SMP-Computer, der über acht CPUs verfügt, vier Soft-NUMA-Knoten mit jeweils zwei CPUs erstellen, werden alle vier NUMA-Knoten von nur einem Speicherknoten versorgt. Soft-NUMA stellt keine Affinität zwischen Speicher und CPU bereit.

Zu den Vorteilen von Soft-NUMA zählt das Reduzieren von E/A- und LAZY WRITER-Prozess-Engpässen (verzögertes Schreiben) auf Computern, die zwar viele CPUs, aber keine NUMA-Hardware haben. Für jeden NUMA-Knoten gibt es einen einzelnen E/A-Thread sowie einen einzelnen LAZY WRITER-Thread. Abhängig von der Auslastung der Datenbank kann es durch diese jeweils nur einmal vorhandenen Threads zu einem erheblichen Leistungsengpass kommen. Werden vier Soft-NUMA-Knoten konfiguriert ergeben sich daraus vier E/A-Threads und vier Threads für LAZY WRITER-Prozesse, wodurch sich die Leistung verbessern lässt.

Sie können kein Soft-NUMA erstellen, das CPUs aus unterschiedlichen NUMA-Hardwareknoten enthält. Verfügt Ihre Hardware beispielsweise über acht CPUs (0..7), und es existieren zwei Hardware-NUMA-Knoten (0-3 and 4-7), können Sie durch Kombinieren von CPU (0, 1) und CPU (2, 3) Soft-NUMA erstellen. Sie können Soft-NUMA nicht mit CPU (1, 5) erstellen, aber Sie können mithilfe der CPU-Affinität einer Instanz von SQL Server CPUs aus unterschiedlichen NUMA-Knoten zuordnen. Verwendet SQL Server im Rahmen des vorhergehenden Beispiels die CPUs 0-3, liegt nur ein E/A-Thread und ein LAZY WRITER-Thread vor. Verwendet SQL Server im Rahmen des vorhergehenden Beispiels die CPUs 1, 2, 5 und 6. greifen Sie auf zwei NUMA-Knoten bei zwei E/A-Threads und zwei LAZY WRITER-Threads zu.

HinweisHinweis

Manche Hardwarekonfigurationen verwenden gemeinsam freigegebene Ressourcen wie z. B. einen L3/L4-Cache. Prozessoren können um diese freigegebenen Ressourcen gruppiert werden, um Soft-NUMA-Knoten zu erstellen.

Weitere Informationen finden Sie unter Vorgehensweise: Konfigurieren von SQL Server für die Verwendung von Soft-NUMA.