For flere år siden udgav Microsoft en meget nyttig Knowledge Base-artikel om, hvordan man konfigurerer SQL Server 2012 og SQL Server 2014 til den bedste ydeevne med store arbejdsbelastninger på moderne serverhardware i større størrelse. Min kollega Aaron Bertrand og jeg havde begge en lille rolle i gennemgangen af den originale KB-artikel. Denne KB-artikel er blevet holdt ret godt ajour siden da, og den er stadig en god reference til nyttige konfigurationsmuligheder for SQL Server 2012/2014.
Siden da har Microsoft også overført en række meget nyttige ydeevneforbedringer fra SQL Server 2016 til både SQL Server 2012 og SQL Server 2014, så længe du er på en ny nok build af en af disse ældre versioner af SQL Server. Microsoft anbefaler, at du proaktivt implementerer både servicepakker og kumulative opdateringer for at minimere risikoen for at støde på problemer, der blev rettet i senere builds af SQL Server.
Som en ekstra bonus får du også nye funktioner og andre forbedringer, som jeg beskriver i denne artikel. I de fleste tilfælde bliver du nødt til at aktivere et sporingsflag for at få fordelen af disse ydeevneforbedringer.
Dirty Page Manager
Først er brugen af Dirty Page Manager (DPM) i forbindelse med aktivering af indirekte kontrolpunkter for dine bruger- og systemdatabaser i SQL Server 2012 og SQL Server 2014. Indirekte kontrolpunkter er standard for nye databaser oprettet på SQL Server 2016, og det er anbefalet konfiguration til SQL Server 2016-instanser.
Hvis du aktiverer global Trace Flag 3449 (og du er på SQL Server 2012 SP3 CU3 eller nyere eller SQL Server 2014 SP1 CU7 eller nyere), vil du få meget bedre ydeevne ved at undgå et FlushCache-kald i en række forskellige almindelige scenarier, såsom backup-database, backup-transaktionslog, oprette database, tilføje en fil til en database, gendan en database, formindske en databasefil, og under en "yndefuld" nedlukning af SQL Server. Trace Flag 3449 træder i kraft med det samme, uden genstart påkrævet. Du bør også indstille TF 3449 som et startsporingsflag.
Det er især vigtigt at undgå disse FlushCache-opkald, når du har en stor mængde RAM (mere end 256 GB) på din databaseserver, hvor fordelen stiger med størrelsen af din bufferpulje, der er i brug. Du kan læse mere om denne forbedring i dette blogindlæg:
Dernæst, hvis du er på SQL Server 2012 SP4 eller SQL Server 2014 SP2 (eller nyere), vil du få en række andre nye ydeevneforbedringer, såsom automatisk Soft NUMA-partitionering og dynamisk hukommelsesobjektskalering, der oprindeligt blev introduceret i SQL Server 2016
Automatisk blød NUMA-partitionering
I både SQL Server 2012 SP4 og SQL Server 2014 SP2, når du indstiller Trace Flag 8079 som et startsporingsflag vil SQL Server scanne hardwarelayoutet under motorstart og automatisk konfigurere Soft NUMA på systemer, der rapporterer 8 eller flere fysiske kerner pr. NUMA-node. Den automatiske bløde NUMA-adfærd er Hyperthreading (HT/logisk processor) bevidst, hvilket betyder, at den fungerer med både Intel Hyper-Threading og AMD SMT. Når det optimale bløde NUMA-knudelayout bestemmes, forespørges den logiske CPU-information og bruges til at forhindre grupperinger af kun logiske og kun fysiske noder, hvilket kan føre til ydelsesvariationer på tværs af de bløde NUMA-knuder.
Nuværende serverprocessorer kan have op til 32 fysiske kerner i en enkelt NUMA-node, som kan afsløre SMP-lignende skalerbarhedsproblemer inden for en enkelt hardware NUMA-node. Microsoft hævder, at de ser en mærkbar forbedring af ydeevnen fra denne funktion ved hjælp af deres interne SQL Server 2016 testsele:
"Med HT-bevidst auto soft-NUMA får vi op til 30 % gevinst i forespørgselsydeevne, når DOP er indstillet til antallet af fysiske kerner på en socket (12 i dette tilfælde) ved hjælp af Automatic Soft NUMA."
Som altid er det en god idé at teste ydeevnen af din arbejdsbyrde med Automatic Soft NUMA, før du bruger det i produktionen.
Dynamisk hukommelsesobjektskalering
I både SQL Server 2012 SP4 og SQL Server 2014 SP2 vil SQL Server dynamisk partitionere hukommelsesobjekter baseret på antallet af NUMA-noder og logiske processorkerner for at skalere bedre på moderne serverhardware. Målet med dynamisk promovering er automatisk at partitionere et trådsikkert hukommelsesobjekt (CMEMTHREAD), hvis det bliver en flaskehals.
Ikke-partitionerede hukommelsesobjekter vil blive dynamisk forfremmet til at blive partitioneret af NUMA node (antallet af partitioner er lig med antallet af NUMA noder) baseret på arbejdsbelastningen og flaskehalsen, og hukommelsesobjekter partitioneret af NUMA node kan yderligere fremmes til at blive partitioneret af logiske CPU-kerner (antallet af partitioner er lig med antallet af logiske CPU-kerner). Denne forbedring eliminerer behovet for Trace Flag 8048, når du har installeret SQL 2014 SP2 eller SQL Server 2012 SP4.
SOS_RWLock Spinlock-forbedring
I SQL Server 2014 SP2 er der forbedringer (igen tilbageporteret fra SQL Server 2016), der fjerner behovet for spinlocks til SOS_RWLock-operationer. Microsoft beskriver denne forbedring mere detaljeret således:
"SOS_RWLock er en synkroniseringsprimitiv, der bruges forskellige steder i SQL Server-kodebasen. Som navnet antyder kan koden have flere delte (læsere) eller enkelt (skribent) ejerskab. Denne forbedring fjerner behovet for spinlock til SOS_RWLock og bruger i stedet låsefri teknikker, der ligner in-memory OLTP. Med denne ændring kan mange tråde læse en datastruktur beskyttet af SOS_RWLock parallelt uden at blokere hinanden og derved give øget skalerbarhed. Før denne ændring tillod den ældre spinlock-implementering kun én tråd at anskaffe SOS_RWLock ad gangen, selv for at læse en datastruktur."
Du vil også få en række nyttige administrationsforbedringer i både SQL Server 2012 SP4 og SQL Server 2014 SP2. Du kan læse mere om disse forbedringer i disse blogindlæg:
- SQL Server 2012 Service Pack 4 (SP4) udgivet!
- SQL Server 2014 Service Pack 2 er nu tilgængelig !!!
Det vigtigste ved alt dette er, at hvis du kører SQL Server 2012 (som faldt ud af mainstream-support den 11. juli 2017), vil du være på SQL Server 2012 SP4, mens hvis du kører SQL Server 2014, du ønsker at være på SQL Server 2014 SP2 eller nyere. Du skal også aktivere de relevante sporingsflag og indstille de relevante databaseegenskaber for at drage fordel af disse forbedringer.