sql >> Databasteknik >  >> RDS >> Sqlserver

Minnes-/lagringsteknikhierarki och SQL Server

Det finns ett gammalt nätverksordspråk som säger:"Bandbreddsproblem kan botas med pengar. Latensproblem är svårare eftersom ljusets hastighet är fixerad.”

Traditionellt har det funnits fyra primära lager i den övergripande minneshierarkin och lagringshierarkin för en databasserver. Från och med toppen av pyramiden har du static random-access memory (SRAM) cachning, som vanligtvis är uppdelad mellan relativt små, snabba L1- och L2-cachar för varje fysisk kärna i en processor och en större, långsammare, on-die, delad L3-cache för hela processorn. Till exempel har 14nm Intel Xeon E7-8890 v4-processorn (Broadwell-EX) en 64KB per core L1-cache och en 256KB per core L2-cache, tillsammans med en mycket större men långsammare 60MB L3-cache som delas över hela den fysiska processorn .

Det andra lagret är dynamiskt slumpmässigt åtkomstminne (DRAM) med licenskapaciteter på upp till 4 TB med Windows Server 2012 R2, upp till 24 TB med Windows Server 2016 och med latenser i nanosekundintervallet. Både SRAM och DRAM är flyktiga, vilket innebär att de endast lagrar data när ström är pålagd.

Det tredje lagret är SATA/SAS (NAND) SSD:er, med individuella kapaciteter upp till cirka 4TB och latenser i mikrosekundsintervallet. En begränsande faktor med äldre SATA/SAS (NAND) SSD:er är det faktum att de använder SATA/SAS-gränssnittet som begränsar deras totala bandbredd, beroende på vilken SATA/SAS-version de använder. De begränsas också genom att använda det äldre AHCI-protokollet som har mycket mer I/O-overhead och högre latens än det nyare NVMe-protokollet. Det fjärde lagret är äldre hårddiskar med magnetisk spinnande media, med individuella kapaciteter på upp till 10 TB och latenser i millisekundsintervallet.

Vart och ett av dessa traditionella lager har högre latens, men lägre kostnad per MB/GB och högre total kapacitet när du flyttar ner i minnes-/lagringshierarkin. Den relativa latensen för dessa fyra traditionella lager visas i tabell 1.

Gränssnitt Typ Relativ latens (läsning)
On core/On Die CPU SRAM-cache 1x
Direktbifoga DDR4 DRAM 10x
PCIe NVMe eller SATA/SAS AHCI SSD 100 000x
SAS/SATA Hårddisk 10 000 000x

Tabell 1:Traditionella minnes-/lagringslager

Nya minnes-/lagringslager

Under de senaste åren har vi sett introduktionen och ökande användning av NVM Express (NVMe) PCIe SSD:er baserade på befintlig NAND-flashteknik. Dessa har vanligtvis latenser i intervallet 50-100 mikrosekunder. De använder också det nyare, mycket effektivare NVMe-protokollet och PCIe-gränssnittet, vilket ger mycket bättre prestanda än äldre SAS/SATA SSD:er som använder det gamla AHCI-protokollet.

För närvarande säljer Hewlett Packard Enterprise (HPE) 8GB NVDIMM-moduler för sina HPE Proliant DL360 Gen9-servrar och HPE Proliant DL380 Gen9-servrar. Dessa moduler har 8 GB DRAM som backas upp av 8 GB flash för $899,00, vilket är ganska dyrt per gigabyte. Dessa två-sockets servrar har 24 minnesplatser som var och en stöder upp till 128 GB traditionella DDR4 DIMM. Eventuella kortplatser du använder för NVDIMM-moduler kommer inte att vara tillgängliga för vanlig minnesanvändning. Du kan använda maximalt 16 minnesplatser för NVDIMM-användning, vilket ger dig en maximal kapacitet på 128 GB. Du måste använda Intel Xeon E5-2600 v4-seriens processorer för att få officiellt NVDIMM-stöd. Micron är planerad att släppa 16 GB NVDIMM med större kapacitet i oktober 2016.

Enhet IOPS Gen. fördröjning (ns) MB/sek
NVM Express SSD 14 553 66 632 56,85
Block Mode NVDIMM 148 567 6 418 580.34
DAX Mode NVDIMM 1 112 007 828 4 343,78

Tabell 2:4K Random Write Performance Comparison (1 tråd, QD1)

Prestandasiffrorna i Tabell 2 är från en Microsoft/Intel-presentation (Persistent Memory i Windows) på IDF16 i San Francisco, med denna prestandatestmetod:

  • Arbetsbelastning :4KB slumpmässig skrivning, 1 tråd, 1 enastående I/O, synkron I/O, 1GB fil, NTFS, 3s uppvärmning, 7s mättid
  • Hårdvara :HPE ProLiant DL380 Gen9, 2x Intel Xeon E5-2650L v3 @ 1,8GHz, 96GB RAM, 2x 8GB NVDIMM-N, 1x 1600GB NVMe SSD
  • Programvara :Förutsläppt WS 2016-build, Microsofts interna I/O-verktyg

Det finns en bra kanal 9-video som heter Accelerating SQL Server 2016 Performance with Persistent Memory i Windows Server 2016 med Lindsey Allen och Tobias Klima. En demo i videon visar hur SQL Server 2016 som körs på Windows Server 2016 stöder DAX-läge (med en ospecificerad spårningsflagga). När Windows Server 2016 går till GA kommer spårningsflaggan inte att behövas med en framtida version av SQL Server.

Dessa nya minneslagringslager kommer att placeras mellan traditionellt DRAM-minne och SATA/SAS SSD-enheter.

En lagringsvolym som har formaterats i DAX-läge skulle kunna användas för att vara värd för en SQL Server 2016 transaktionsloggfil i ett scenario där du behöver absolut bästa möjliga skrivprestanda och du inte vill använda fördröjd hållbarhet eller OLTP i minnet. Ett annat möjligt scenario skulle vara att använda en DAX Mode-volym för att vara värd för dina tempdb-datafiler om du hade en arbetsbelastning som belastade tempdb extremt mycket.

Framtida minnes-/lagringslager

I slutet av 2016/början av 2017 bör vi se introduktionen av Intel Optane SSD:er som använder NVMe-protokollet. Dessa kommer att vara flashlagringsenheter som använder Intel/Micron 3D XPoint Technology (uttalas som cross-point), som kommer att fungera i befintliga servrar. I Intels interna tester visar dessa enheter cirka 10 gånger lägre latens och cirka 10 gånger högre IOPS än befintliga, mycket högpresterande Intel DC P3700 Series PCIe NVMe SSD-enheter.

I mitten/slutet av 2017 bör vi också se lanseringen av en ny form av beständig DIMM som kan användas som beständigt minne med mycket stor kapacitet, eller som extremt högpresterande lagring med låg kapacitet. Dessa kommer att vara elektriskt och fysiskt kompatibla med nuvarande DDR4 DIMM och kommer att stödjas i nästa generations Intel Xeon-processorbaserade plattform (Skylake "Purley"-plattformen). Dessa produkter kommer också att baseras på Intel/Micron 3D XPoint Technology. Dessa Intel DIMMs kommer att erbjuda upp till dubbelt så mycket systemminneskapacitet till en betydligt lägre kostnad än traditionellt DDR4 DRAM, förutsatt att din processor/serverplattform stöder det (och Microsoft höjer licensminnesgränsen efter att Windows Server 2016 släpps). Dessa DIMM:er kommer inte att ha samma latens som traditionella DRAM (de kommer att vara långsammare), men de kommer att erbjuda mycket lägre latens än PCIe NVMe-lagringsenheter.

Ur ett bredare, branschomfattande perspektiv kommer denna nya kategori av Persistent Memory (PM)-enheter att erbjuda icke-flyktig lagring med nästan DRAM-liknande prestanda. PM-enheter finns direkt på minnesbussen, vilket ger dem mycket låg latens och hög bandbredd. Microsoft stöder PM-enheter i Windows 10 Anniversary Update och Windows Server 2016. Det kommer att finnas stöd för en ny klass av lagringsvolym, som kallas en Direct Access Storage (DAX) Volume. DAX Volumes använder minnesmappade filer för att ge applikationer direkt åtkomst till PM-enheter för den absolut bästa prestandan.

En anledning till att DAX-läget är så mycket snabbare är att när du väl har minnesmappat området för NVDIMM på en DAX-volym, går ytterligare interaktioner med den lagringen helt förbi lagringsstacken. Det är bokstavligen bara en minneskopia för att få data att vara beständiga. Det är en hel del kod som du inte behöver köra vid varje interaktion med lagringen. Det är en annan mycket betydande bidragsgivare till latens (tillsammans med ljusets hastighet). DAX-volymer stöds på NTFS och du måste välja DAX-läge när du formaterar volymen. Applikationer (som SQL Server 2016) måste ha modifierats (av Microsoft) för att stödja och använda DAX-läge, och du måste även aktivera en spårningsflagga.

För bakåtkompatibilitet på PM-hårdvara kommer det också att finnas blocklägesvolymer, som upprätthåller all befintlig lagringssemantik. Alla I/O-operationer kommer att passera lagringsstacken till PM-diskdrivrutinen. Detta gör blockläget fullt kompatibelt med befintliga applikationer. Om du har en PM-hårdvaruenhet, med ett operativsystem som stöds, får du betydande lagringsprestanda utan någon applikationsändring i blockläge. Detta innebär att versioner på lägre nivå av SQL Server kommer att kunna använda lagringsvolymer i blockläge.

Summan av kardemumman på allt detta är att vi kommer att ha mycket mer flexibilitet och nya alternativ för hur man designar och konfigurerar dina minnes- och lagringsundersystemlager under de kommande 12-18 månaderna, så länge du använder SQL Server 2016 på Windows Server 2016 och har tillräckligt med ny hårdvara som kan stödja PM-enheter. Äldre versioner av SQL Server kommer att kunna använda PM-volymer i blockläge om de körs på Windows Server 2016. Äldre hårdvara och äldre versioner av Windows Server kommer att kunna använda Intel Optane SSD:er. Detta kommer att ge oss många ytterligare val för att förbättra lagringsprestanda!


  1. Betydelsen av transaktionslogg i SQL Server

  2. ADDM på SearchOracle.com

  3. TODATETIMEOFFSET() Exempel i SQL Server

  4. Anslut till mysql på Amazon EC2 från en fjärrserver