Es gibt ein altes Netzwerk-Sprichwort, das lautet:„Bandbreitenprobleme können mit Geld geheilt werden. Latenzprobleme sind schwieriger, weil die Lichtgeschwindigkeit festgelegt ist.“
Traditionell gab es vier primäre Schichten in der gesamten Arbeitsspeicher- und Speicherhierarchie eines Datenbankservers. An der Spitze der Pyramide beginnend haben Sie statisches Random-Access-Memory (SRAM)-Caching, das normalerweise zwischen relativ kleinen, schnellen L1- und L2-Caches für jeden physischen Kern eines Prozessors und einem größeren, langsameren On-Die-Caching aufgeteilt ist. gemeinsam genutzter L3-Cache für den gesamten Prozessor. Beispielsweise verfügt der 14-nm-Prozessor Intel Xeon E7-8890 v4 (Broadwell-EX) über einen L1-Cache von 64 KB pro Kern und einen L2-Cache von 256 KB pro Kern, zusammen mit einem viel größeren, aber langsameren 60 MB L3-Cache, der vom gesamten physischen Prozessor gemeinsam genutzt wird .
Die zweite Schicht ist dynamischer Direktzugriffsspeicher (DRAM) mit Lizenzkapazitäten von bis zu 4 TB bei Windows Server 2012 R2, bis zu 24 TB bei Windows Server 2016 und mit Latenzen im Nanosekundenbereich. Sowohl SRAM als auch DRAM sind flüchtig, was bedeutet, dass sie Daten nur dann speichern, wenn elektrische Energie angelegt wird.
Die dritte Schicht sind SATA/SAS (NAND)-SSDs mit individuellen Kapazitäten bis zu etwa 4 TB und Latenzen im Mikrosekundenbereich. Ein einschränkender Faktor bei älteren SATA/SAS (NAND)-SSDs ist die Tatsache, dass sie die SATA/SAS-Schnittstelle verwenden, die ihre Gesamtbandbreite begrenzt, abhängig von der verwendeten SATA/SAS-Version. Sie werden auch durch die Verwendung des alten AHCI-Protokolls eingeschränkt, das einen weitaus höheren I/O-Overhead und eine höhere Latenz als das neuere NVMe-Protokoll hat. Die vierte Schicht sind Legacy-Festplattenlaufwerke mit magnetischen Spinning-Medien mit Einzelkapazitäten von bis zu 10 TB und Latenzen im Millisekundenbereich.
Jede dieser traditionellen Schichten hat eine höhere Latenz, aber niedrigere Kosten pro MB/GB und eine höhere Gesamtkapazität, wenn Sie sich in der Speicher-/Speicherhierarchie nach unten bewegen. Die relative Latenz dieser vier traditionellen Schichten ist in Tabelle 1 dargestellt.
Oberfläche | Typ | Relative Latenz (Lesevorgänge) |
Auf dem Kern/Auf der CPU | SRAM-Cache | 1x |
Direkter Anhang | DDR4-DRAM | 10x |
PCIe NVMe oder SATA/SAS AHCI | SSD | 100.000x |
SAS/SATA | Festplatte | 10.000.000x |
Tabelle 1:Herkömmliche Speicher-/Speicherschichten
Neue Speicher-/Speicherschichten
In den letzten Jahren haben wir die Einführung und zunehmende Nutzung von NVMe-PCIe-SSDs (NVM Express) auf Basis bestehender NAND-Flash-Technologie erlebt. Diese haben typischerweise Latenzen im Bereich von 50–100 Mikrosekunden. Sie verwenden auch das neuere, viel effizientere NVMe-Protokoll und die PCIe-Schnittstelle, was eine viel bessere Leistung bietet als ältere SAS/SATA-SSDs, die das alte AHCI-Protokoll verwenden.
Derzeit verkauft Hewlett Packard Enterprise (HPE) 8-GB-NVDIMM-Module für seine HPE Proliant DL360 Gen9-Server und HPE Proliant DL380 Gen9-Server. Diese Module verfügen über 8 GB DRAM, die durch 8 GB Flash für 899,00 $ unterstützt werden, was pro Gigabyte ziemlich teuer ist. Diese Server mit zwei Sockeln verfügen über 24 Speichersteckplätze, die jeweils bis zu 128 GB herkömmliche DDR4-DIMMs unterstützen. Alle Steckplätze, die Sie für NVDIMM-Module verwenden, stehen nicht für die normale Speichernutzung zur Verfügung. Sie können maximal 16 Speichersteckplätze für die NVDIMM-Nutzung verwenden, was Ihnen eine maximale Kapazität von 128 GB gibt. Sie müssen Prozessoren der Intel Xeon E5-2600 v4-Serie verwenden, um offiziellen NVDIMM-Support zu erhalten. Micron wird voraussichtlich im Oktober 2016 16-GB-NVDIMMs mit größerer Kapazität auf den Markt bringen.
Gerät | IOPS | Durchschn. Latenz (ns) | MB/s |
NVM Express-SSD | 14.553 | 66.632 | 56,85 |
NVDIMM im Blockmodus | 148.567 | 6.418 | 580,34 |
NVDIMM im DAX-Modus | 1.112.007 | 828 | 4.343,78 |
Tabelle 2:Vergleich der 4K-Zufallsschreibleistung (1 Thread, QD1)
Die Leistungsdaten in Tabelle 2 stammen aus einer Microsoft/Intel-Präsentation (Persistenter Speicher in Windows) auf der IDF16 in San Francisco unter Verwendung dieser Leistungstestmethode:
- Arbeitsbelastung :4 KB zufällige Schreibvorgänge, 1 Thread, 1 ausstehende E/A, synchrone E/A, 1 GB Datei, NTFS, 3 s Aufwärmzeit, 7 s Messzeit
- Hardware :HPE ProLiant DL380 Gen9, 2 x Intel Xeon E5-2650L v3 @ 1,8 GHz, 96 GB RAM, 2 x 8 GB NVDIMM-N, 1 x 1600 GB NVMe SSD
- Software :Vorab veröffentlichter WS 2016-Build, internes E/A-Tool von Microsoft
Es gibt ein gutes Channel 9-Video mit dem Titel Accelerating SQL Server 2016 Performance with Persistent Memory in Windows Server 2016 mit Lindsey Allen und Tobias Klima. Eine Demo im Video zeigt, wie SQL Server 2016 unter Windows Server 2016 den DAX-Modus unterstützt (mit einem nicht spezifizierten Ablaufverfolgungsflag). Sobald Windows Server 2016 allgemein verfügbar ist, ist das Trace-Flag mit einer zukünftigen Version von SQL Server nicht mehr erforderlich.
Diese neuen Speicherebenen werden zwischen herkömmlichem DRAM-Speicher und SATA/SAS-SSDs eingefügt.
Ein Speichervolume, das im DAX-Modus formatiert wurde, könnte zum Hosten einer SQL Server 2016-Transaktionsprotokolldatei in einem Szenario verwendet werden, in dem Sie die absolut bestmögliche Schreibleistung benötigen und Delayed Durability oder In-Memory OLTP nicht verwenden möchten. Ein weiteres mögliches Szenario wäre die Verwendung eines DAX-Modus-Volumes zum Hosten Ihrer tempdb-Datendateien, wenn Sie eine Arbeitslast hatten, die tempdb extrem belastet.
Zukünftige Speicher-/Speicherschichten
Ende 2016/Anfang 2017 sollten wir die Einführung von Intel Optane SSDs sehen, die das NVMe-Protokoll verwenden. Dabei handelt es sich um Flash-Speichergeräte, die die Intel/Micron 3D XPoint-Technologie (ausgesprochen als Crosspoint) verwenden, die in bestehenden Servern funktionieren wird. In internen Tests von Intel zeigen diese Geräte eine etwa 10-mal niedrigere Latenz und etwa 10-mal höhere IOPS als vorhandene PCIe-NVMe-SSD-Geräte der Intel DC P3700-Serie mit sehr hoher Leistung.
Mitte/Ende 2017 sollten wir auch die Einführung einer neuen Form von persistentem DIMM sehen, das als persistenter Speicher mit sehr großer Kapazität oder als extrem leistungsstarker Speicher mit geringer Kapazität verwendet werden kann. Diese sind elektrisch und physisch mit aktuellen DDR4-DIMMs kompatibel und werden in der nächsten Generation der auf Intel Xeon-Prozessoren basierenden Plattform (der Skylake „Purley“-Plattform) unterstützt. Diese Produkte werden ebenfalls auf der Intel/Micron 3D XPoint Technology basieren. Diese Intel DIMMs bieten bis zu doppelt so viel Systemspeicherkapazität zu deutlich geringeren Kosten als herkömmliches DDR4-DRAM, vorausgesetzt, Ihre Prozessor-/Serverplattform unterstützt dies (und Microsoft erhöht die Lizenzspeichergrenze nach der Veröffentlichung von Windows Server 2016). Diese DIMMs haben nicht die gleiche Latenz wie herkömmliches DRAM (sie werden langsamer sein), aber sie bieten eine viel geringere Latenz als PCIe-NVMe-Speichergeräte.
Aus einer breiteren, branchenweiten Perspektive wird diese neue Kategorie von Persistent Memory (PM)-Geräten einen nichtflüchtigen Speicher mit nahezu DRAM-ähnlicher Leistung bieten. PM-Geräte befinden sich direkt auf dem Speicherbus, was ihnen eine sehr geringe Latenz und eine hohe Bandbreite verleiht. Microsoft unterstützt PM-Geräte in Windows 10 Anniversary Update und Windows Server 2016. Es wird Unterstützung für eine neue Klasse von Speichervolumes geben, die als DAX-Volume (Direct Access Storage) bezeichnet werden. DAX-Volumes verwenden speicherabgebildete Dateien, um Anwendungen mit direktem Zugriff auf PM-Geräte für die absolut beste Leistung bereitzustellen.
Ein Grund, warum der DAX-Modus so viel schneller ist, liegt darin, dass, sobald Sie die Region von NVDIMM auf einem DAX-Volume speicherzugeordnet haben, weitere Interaktionen mit diesem Speicher den Speicherstapel vollständig umgehen. Es ist buchstäblich nur eine Speicherkopie, damit die Daten persistent sind. Das ist eine ganze Menge Code, den Sie nicht bei jeder Interaktion mit dem Speicher ausführen müssen. Das ist ein weiterer sehr wichtiger Beitrag zur Latenz (zusammen mit der Lichtgeschwindigkeit). DAX-Volumes werden von NTFS unterstützt, und Sie müssen den DAX-Modus auswählen, wenn Sie das Volume formatieren. Anwendungen (z. B. SQL Server 2016) müssen (von Microsoft) geändert worden sein, um den DAX-Modus zu unterstützen und zu verwenden, und Sie müssen auch ein Ablaufverfolgungsflag aktivieren.
Für die Abwärtskompatibilität auf PM-Hardware wird es auch Blockmodus-Volumes geben, die die gesamte vorhandene Speichersemantik beibehalten. Alle E/A-Operationen durchlaufen den Speicherstapel zum PM-Plattentreiber. Dadurch ist der Blockmodus vollständig kompatibel mit bestehenden Anwendungen. Wenn Sie über ein PM-Hardwaregerät mit einem unterstützten Betriebssystem verfügen, erhalten Sie eine erhebliche Speicherleistung ohne Anwendungsänderungen im Blockmodus. Dies bedeutet, dass niedrigere Versionen von SQL Server Speichervolumes im Blockmodus verwenden können.
Unter dem Strich werden wir in den nächsten 12 bis 18 Monaten viel mehr Flexibilität und neue Optionen zum Entwerfen und Konfigurieren Ihrer Arbeitsspeicher- und Speichersubsystemschichten haben, solange Sie SQL Server 2016 unter Windows verwenden Server 2016 und verfügen über ausreichend neue Hardware, die PM-Geräte unterstützen kann. Ältere Versionen von SQL Server können PM-Volumes im Blockmodus verwenden, wenn sie auf Windows Server 2016 ausgeführt werden. Ältere Hardware und ältere Versionen von Windows Server können Intel Optane SSDs verwenden. Dadurch erhalten wir viele zusätzliche Möglichkeiten zur Verbesserung der Speicherleistung!