sql >> Database >  >> RDS >> Sqlserver

Verborgen prestatie- en beheersverbeteringen in SQL Server 2012/2014

Enkele jaren geleden publiceerde Microsoft een zeer nuttig Knowledge Base-artikel over het configureren van SQL Server 2012 en SQL Server 2014 voor de beste prestaties met zware workloads op grotere, moderne serverhardware. Mijn collega Aaron Bertrand en ik hadden allebei een kleine rol bij de doorlichting van het originele KB-artikel. Dit KB-artikel is sindsdien redelijk up-to-date gehouden en het is nog steeds een geweldige referentie voor nuttige configuratie-opties voor SQL Server 2012/2014.

Sindsdien heeft Microsoft ook een aantal zeer nuttige prestatieverbeteringen van SQL Server 2016 teruggezet naar zowel SQL Server 2012 als SQL Server 2014, zolang je een nieuwe build gebruikt van een van deze oudere versies van SQL Server. Microsoft raadt aan dat u zowel Service Packs als Cumulatieve Updates proactief implementeert om de kans op problemen te minimaliseren die zijn gecorrigeerd in latere versies van SQL Server.

Als extra bonus krijg je ook nieuwe functies en andere verbeteringen zoals ik in dit artikel beschrijf. In de meeste gevallen moet u een traceringsvlag inschakelen om te profiteren van deze prestatieverbeteringen.

Vuile paginabeheerder

De eerste is het gebruik van Dirty Page Manager (DPM) in combinatie met het inschakelen van indirecte controlepunten voor uw gebruikers- en systeemdatabases in SQL Server 2012 en SQL Server 2014. Indirecte controlepunten zijn de standaard voor nieuwe databases die zijn gemaakt op SQL Server 2016, en het is de aanbevolen configuratie voor SQL Server 2016-instanties.

Als u globale Trace Flag 3449 inschakelt (en u gebruikt SQL Server 2012 SP3 CU3 of hoger of SQL Server 2014 SP1 CU7 of hoger), krijgt u veel betere prestaties door een FlushCache-aanroep te vermijden in een aantal verschillende veelvoorkomende scenario's, zoals back-updatabase, back-uptransactielogboek, database maken, een bestand aan een database toevoegen, een database herstellen, een databasebestand verkleinen en tijdens een "sierlijke" afsluiting van SQL Server. Trace Flag 3449 wordt onmiddellijk van kracht, zonder herstarten. U moet ook TF 3449 instellen als opstarttraceervlag.

Het vermijden van deze FlushCache-aanroepen is vooral belangrijk wanneer u een grote hoeveelheid RAM (meer dan 256 GB) in uw databaseserver hebt, waarbij het voordeel toeneemt met de grootte van uw bufferpool die in gebruik is. U kunt meer in detail over deze verbetering lezen in deze blogpost:

Als u vervolgens SQL Server 2012 SP4 of SQL Server 2014 SP2 (of hoger) gebruikt, krijgt u een aantal andere nieuwe prestatieverbeteringen, zoals automatische Soft NUMA-partitionering en dynamische schaling van geheugenobjecten die oorspronkelijk werden geïntroduceerd in SQL Server 2016

Automatische Soft NUMA-partitionering

In zowel SQL Server 2012 SP4 als SQL Server 2014 SP2 wanneer u Trace Flag 8079 . instelt als opstarttraceervlag scant SQL Server de hardwarelay-out tijdens het opstarten van de engine en configureert automatisch Soft NUMA op systemen die 8 of meer fysieke kernen per NUMA-knooppunt rapporteren. Het automatische zachte NUMA-gedrag is Hyperthreading (HT/logische processor) bewust, wat betekent dat het werkt met zowel Intel Hyper-Threading als AMD SMT. Bij het bepalen van de optimale lay-out van zachte NUMA-knooppunten, wordt de logische CPU-informatie opgevraagd en gebruikt om te voorkomen dat alleen logische en alleen fysieke knooppunten worden gegroepeerd, wat zou kunnen leiden tot prestatievariaties tussen de zachte NUMA-knooppunten.

Huidige serverprocessors kunnen maximaal 32 fysieke kernen hebben in een enkele NUMA-node, wat SMP-achtige schaalbaarheidsproblemen binnen een enkele hardware NUMA-node kan blootleggen. Microsoft beweert dat ze een merkbare prestatieverbetering zien van deze functie met behulp van hun interne SQL Server 2016-testharnas:

"Met HT-bewuste auto soft-NUMA krijgen we tot 30% winst in queryprestaties wanneer DOP is ingesteld op het aantal fysieke kernen op een socket (12 in dit geval) met behulp van Automatic Soft NUMA."

Zoals altijd is het een goed idee om de prestaties van uw werklast te testen met Automatic Soft NUMA voordat u het in productie gebruikt.

Dynamisch geheugenobject schalen

In zowel SQL Server 2012 SP4 als SQL Server 2014 SP2 zal SQL Server geheugenobjecten dynamisch partitioneren op basis van het aantal NUMA-knooppunten en logische processorcores om beter te schalen op moderne serverhardware. Het doel van dynamische promotie is om een ​​thread safe memory object (CMEMTHREAD) automatisch te partitioneren als het een bottleneck wordt.

Niet-gepartitioneerde geheugenobjecten worden dynamisch gepromoot om te worden gepartitioneerd door NUMA-knooppunt (het aantal partities is gelijk aan het aantal NUMA-knooppunten) op basis van de werkbelasting en bottleneck, en geheugenobjecten die zijn gepartitioneerd door NUMA-knooppunt kunnen verder worden bevorderd om te worden gepartitioneerd door logische CPU-kernen (het aantal partities is gelijk aan het aantal logische CPU-cores). Door deze verbetering is Trace Flag 8048 niet meer nodig zodra u SQL 2014 SP2 of SQL Server 2012 SP4 hebt geïnstalleerd.

SOS_RWLock Spinlock-verbetering

In SQL Server 2014 SP2 zijn er verbeteringen (opnieuw teruggeport vanaf SQL Server 2016) die de noodzaak voor spinlocks voor SOS_RWLock-bewerkingen wegnemen. Microsoft beschrijft deze verbetering in meer detail als volgt:

"De SOS_RWLock is een synchronisatieprimitief die op verschillende plaatsen in de SQL Server-codebasis wordt gebruikt. Zoals de naam al aangeeft, kan de code meerdere gedeelde (lezers) of enkele (schrijver) eigendom hebben. Deze verbetering verwijdert de noodzaak voor spinlock voor SOS_RWLock en gebruikt in plaats daarvan lock-free technieken vergelijkbaar met in-memory OLTP. Met deze wijziging kunnen veel threads een datastructuur die wordt beschermd door SOS_RWLock parallel lezen zonder elkaar te blokkeren en daardoor grotere schaalbaarheid te bieden. Vóór deze wijziging stond de oudere spinlock-implementatie slechts één thread toe om verkrijg de SOS_RWLock tegelijk, zelfs om een ​​gegevensstructuur te lezen."

U krijgt ook een aantal handige verbeteringen in beheersbaarheid in zowel SQL Server 2012 SP4 als SQL Server 2014 SP2. U kunt meer in detail over deze verbeteringen lezen in deze blogposts:

  • SQL Server 2012 Service Pack 4 (SP4) uitgebracht!
  • SQL Server 2014 Service Pack 2 is nu beschikbaar !!!

De belangrijkste conclusie van dit alles is dat als u SQL Server 2012 gebruikt (die op 11 juli 2017 buiten de reguliere ondersteuning viel), u SQL Server 2012 SP4 wilt gebruiken, terwijl als u SQL Server 2014 gebruikt, u op SQL Server 2014 SP2 of nieuwer wilt werken. U moet ook de toepasselijke traceringsvlaggen inschakelen en de relevante database-eigenschappen instellen om van deze verbeteringen te profiteren.


  1. Hoe REGEXP werkt in MariaDB

  2. Bestanden opslaan in SQL Database met behulp van FILESTREAM - Deel 1

  3. Verschil tussen SELECT INTO en INSERT INTO in MySQL

  4. PostgreSQL:gegevens selecteren met een like op tijdstempelveld