Jeg har talt om vigtigheden af sekventiel gennemløbsydelse for SQL Server i et stykke tid. Sekventiel gennemstrømning er afgørende vigtig for mange almindelige operationer i SQL Server, herunder:
- Fuld database backup og gendannelse
- Indeksoprettelse og vedligeholdelsesarbejde
- Initialisering af replikeringsøjebliksbilleder og abonnementer
- Initialisering af AlwaysOn AG-replikaer
- Initialisering af databasespejle
- Initialisering af logforsendelsessekundære
- Arbejdsbelastninger for relationelle datavarehusforespørgsler
- Relationel datavarehus ETL-drift
På trods af vigtigheden af sekventiel gennemløb for SQL Server, ser jeg stadig mange mennesker, der kun fokuserer på tilfældig I/O-ydeevne og latency, mens man stort set ignorerer sekventiel gennemløbsydelse. Mens du tænker på sekventiel gennemløbsydelse, er du nødt til at overveje dataenes fulde vej, fra de er i hvile på dit lagringsmedie, til de forbruges af dine processorkerner.
Afhængigt af hvilken type lagerteknologi du bruger, kan den være forbundet til din værtsserver via et Ethernet-netværksinterfacekort (NIC) eller InfiniBand-værtskanaladapter (HCA)-kort. Denne type forbindelse er mest almindelig for iSCSI SAN'er og for fjernservermeddelelsesblok (SMB) 3.0-filshares. Microsoft TechNet har en god reference om dette emne, kaldet Forbedre ydeevne af en filserver med SMB Direct.
Den teoretiske sekventielle gennemstrømning af en enkelt NIC/HCA-enhed (pr. port) er vist i figur 1:
Figur 1:Teoretisk NIC/HCA-gennemstrømning
Bare hvis du undrer dig over, hvad InfiniBand (QDR) eller Infiniband (FDR) refererer til, vedligeholder InfiniBand Trade Association en InfiniBand-køreplan, der viser historien og de planlagte fremskridt i InfiniBand-båndbredden over de næste mange år. Infiniband har en liste over akronymer, der beskriver den relative ydeevne af et InfiniBand-link som vist nedenfor:
- SDR – Single Data Rate
- DDR – Dobbelt datahastighed
- QDR – Quad Data Rate
- FDR – fjorten datahastighed
- EDR – Enhanced Data Rate
- HDR – Høj datahastighed
- NDR – Næste datahastighed
Traditionelle fiberkanal-SAN'er (FC) bruger typisk en eller flere værtsbusadaptere (HBA), der har en eller flere porte til optiske kabler, der forbindes til en FC-switch eller direkte til selve FC SAN'et. Det er stadig relativt sjældent at se 16 Gb FC HBA'er i udbredt brug, så de fleste værtsservere har stadig enten 4Gb eller 8Gb FC HBA'er.
Den teoretiske sekventielle gennemstrømning af en enkelt HBA-enhed (pr. port) er vist i figur 2:
Figur 2:Teoretisk HBA-gennemstrømning
Uanset hvilken type interfaceenhed eller teknologi du bruger, skal du være bekymret over, hvilken slags udvidelsesbusslot den er tilsluttet på din værtsserver. Afhængigt af alderen på din server og hvilken type processor den bruger, kan dette have en enorm indflydelse på den samlede båndbredde, som bus slot kan understøtte. Peripheral Component Interconnect Express (PCIe) Gen 3-slots har dobbelt så stor båndbredde pr. bane som en ældre PCIe Gen 2-slot. Du kan bestemme, hvor mange og hvilken type udvidelsespladser du har i din værtsserver ved at se på specifikationerne og dokumentationen for dit mærke og din servermodel. Indtil videre er det kun Intel Xeon E3 v2, Xeon E3 v3, Xeon E5, Xeon E5 v2, Xeon E5 v3 og Xeon E7 v2 familie-processorer, der understøtter PCIe Gen 3-slots. Alt, der er ældre end dette, vil have PCIe Gen 2-slots, eller måske endda PCIe Gen 1-slots, hvis det er ekstremt gammelt (i computertermer).
Den teoretiske sekventielle gennemstrømning af et enkelt PCIe slot er vist i figur 3:
Figur 3:Teoretisk udvidelsespladsgennemløb
Siden introduktionen af Intel Nehalem-mikroarkitekturen tilbage i 2008, har alle 2P og større Intel-serverprocessorer understøttet Intel QuickPath Interconnect (QPI) til forbindelser mellem processorerne og hukommelsen i en server, hvilket giver disse nyere processorer understøttelse af ikke-uniform hukommelsesadgang (NUMA), som erstattede den ældre front-side bus (FSB). NUMA forbedrer skalerbarheden ret betydeligt, efterhånden som antallet af fysiske processorer i et system stiger, især når du har fire eller flere fysiske processorer i et værtssystem.
Moderne Intel-processorer har integrerede hukommelsescontrollere, der understøtter Intel QPI. Når du ser på specifikationerne for en bestemt Intel-processor i online ARK-databasen, vil du være i stand til at se dens nominelle QPI-ydeevne i GigaTransfers per sekund (GT/sek). En GigaTransfer per sekund er simpelthen en milliard operationer, der overfører data per sekund.
For eksempel har en moderne, avanceret Intel Xeon E5-2667 v3-processor (Haswell-EP) en Intel QPI-hastighed på 9,6 GT/sek., mens en ældre, low-end Intel Xeon E5503-processor (Nehalem-EP) har en Intel QPI-hastighed på kun 4,8 GT/sek. Selv blandt processorer fra samme generations mikroarkitektur vil du se variationer i den vurderede Intel QPI-hastighed. For eksempel, i 22nm Haswell-EP-familien er den laveste Intel Xeon E5-2603 v3-processor vurderet til 6,4 GT/sek., mens den avancerede Intel Xeon E5-2660 v3-processor er vurderet til 9,6 GT/sek. Intel Xeon E5-, E5 v2- og E5 v3-processorer har to QPI-links pr. processor, mens Intel E7- og E7 v2-familieprocessorer har tre QPI-links pr. processor.
Den teoretiske sekventielle gennemstrømning af et enkelt Intel QPI-link er vist i figur 4:
Figur 4:Teoretisk Intel QPI-gennemstrømning
Afhængigt af alderen på din værtsserver, den nøjagtige processor, den bruger, og typen, hastigheden og mængden af hukommelse, der er installeret, vil du have forskellige mængder af teoretisk sekventiel gennemløb tilgængelig fra hvert hukommelsesmodul. Alle moderne Intel-processorer har integrerede hukommelsescontrollere, der styrer mængden og frekvensen af den hukommelse, som processoren vil understøtte. De seneste vintage værtsservere vil bruge DDR3-hukommelse, mens den seneste generation Haswell-EP (Intel Xeon E5 v3-familie)-processorer understøtter DDR4-hukommelse. DDR4-hukommelse understøtter højere hastigheder, højere gennemløb, højere hukommelsestæthed, lavere strømforbrug og forbedret pålidelighed sammenlignet med DDR3-hukommelse.
Den teoretiske sekventielle gennemstrømning af et enkelt hukommelsesmodul er vist i figur 5:
Figur 5:Teoretisk hukommelsesmodulgennemløb
Når du ser på de enkelte komponenter i et eksisterende eller planlagt nyt system, bør du være på udkig efter uoverensstemmende komponenter, der kan introducere kunstige sekventielle flaskehalse i systemet. For eksempel kan du have en helt ny server med avancerede processorer, der er forkrøblet af det faktum, at den bruger en 4Gb FC HBA til at få adgang til et SAN. Et andet eksempel kunne være et meget hurtigt PCIe flash-lagerkort eller RAID-controller, der blev installeret i en PCIe 2.0 x4-slot med lav båndbredde, som kunstigt begrænsede enhedens samlede sekventielle gennemløb.
Jeg ved, at dette har været en masse teknisk information at fordøje, især for folk, der ikke er hardware-entusiaster. Jeg tror, at hovedideen du bør tage med fra denne artikel er, at sekventiel gennemløbsydelse er ret vigtig for mange almindelige SQL Server-opgaver og arbejdsbelastninger. Detaljerne på lavt niveau om processorer, hukommelsestyper, udvidelsesslots og udvidelsesenheder gør faktisk en stor forskel i den sekventielle gennemløbsydelse, som du får fra en server og dens lagerundersystem. At have en god sekventiel gennemstrømning gør dit liv så meget lettere som databaseprofessionel, hvilket giver dig mulighed for at støtte din organisation på et meget højere niveau.