sql >> Databáze >  >> RDS >> Sqlserver

Skrytá vylepšení výkonu a správy v SQL Server 2012 / 2014

Před několika lety společnost Microsoft publikovala velmi užitečný článek znalostní báze o tom, jak nakonfigurovat SQL Server 2012 a SQL Server 2014 pro nejlepší výkon při velkém zatížení na moderním serverovém hardwaru větší velikosti. S kolegou Aaronem Bertrandem jsme oba měli malou roli při prověřování původního článku KB. Tento článek znalostní báze je od té doby poměrně aktualizovaný a stále je skvělým odkazem na užitečné možnosti konfigurace pro SQL Server 2012/2014.

Od té doby společnost Microsoft také zpětně přenesla řadu velmi užitečných vylepšení výkonu z SQL Server 2016 na SQL Server 2012 a SQL Server 2014, pokud používáte dostatečně novou verzi kterékoli z těchto starších verzí SQL Server. Společnost Microsoft doporučuje, abyste proaktivně nasadili aktualizace Service Pack i kumulativní aktualizace, abyste minimalizovali pravděpodobnost výskytu problémů, které byly opraveny v pozdějších sestaveních serveru SQL Server.

Jako bonus navíc získáte nové funkce a další vylepšení, jak je popisuji v tomto článku. Ve většině případů budete muset povolit příznak trasování, abyste získali výhody z těchto vylepšení výkonu.

Správce špinavých stránek

Prvním je použití Dirty Page Manager (DPM) ve spojení s povolením nepřímých kontrolních bodů pro vaše uživatelské a systémové databáze v SQL Server 2012 a SQL Server 2014. Nepřímé kontrolní body jsou výchozí pro nové databáze vytvořené na SQL Server 2016. doporučená konfigurace pro instance SQL Server 2016.

Pokud povolíte globální Trace Flag 3449 (a používáte SQL Server 2012 SP3 CU3 nebo novější nebo SQL Server 2014 SP1 CU7 nebo novější), získáte mnohem lepší výkon tím, že se vyhnete volání FlushCache v řadě různých běžných scénářů, jako je zálohování databáze, protokol zálohování transakcí, vytvořit databázi, přidat soubor do databáze, obnovit databázi, zmenšit soubor databáze a během „ladného“ vypnutí serveru SQL Server. Trace Flag 3449 se projeví okamžitě, bez nutnosti restartu. Měli byste také nastavit TF 3449 jako příznak trasování při spuštění.

Vyhýbání se těmto voláním FlushCache je zvláště důležité, když máte na databázovém serveru velké množství paměti RAM (více než 256 GB), přičemž výhoda se zvyšuje s velikostí vaší oblasti vyrovnávacích pamětí, která se používá. O tomto vylepšení si můžete přečíst podrobněji v tomto příspěvku na blogu:

Dále, pokud používáte SQL Server 2012 SP4 nebo SQL Server 2014 SP2 (nebo novější), získáte řadu dalších nových vylepšení výkonu, jako je automatické dělení na oddíly Soft NUMA a dynamické škálování objektů paměti, které byly původně představeny v SQL Server 2016.

Automatické měkké rozdělení NUMA

V SQL Server 2012 SP4 i SQL Server 2014 SP2, když nastavíte Trace Flag 8079 jako příznak trasování při spuštění SQL Server prohledá rozvržení hardwaru během spouštění Engine a automaticky nakonfiguruje měkké NUMA na systémech vykazujících 8 nebo více fyzických jader na uzel NUMA. Automatické chování měkkého NUMA si je vědomo Hyperthreadingu (HT/logický procesor), což znamená, že funguje s Intel Hyper-Threading i AMD SMT. Při určování optimálního rozvržení měkkého NUMA uzlu jsou informace o logickém CPU dotazovány a používány k zabránění seskupování pouze logických a fyzických uzlů, které by mohlo vést ke změnám výkonu v rámci měkkých NUMA uzlů.

Současné serverové procesory mohou mít až 32 fyzických jader v jednom uzlu NUMA, což může odhalit problémy se škálovatelností podobné SMP v rámci jednoho hardwarového uzlu NUMA. Microsoft tvrdí, že díky této funkci vidí znatelné zlepšení výkonu pomocí svého interního testovacího systému SQL Server 2016:

"S automatickým soft-NUMA s podporou HT získáváme až 30% nárůst výkonu dotazů, když je DOP nastaveno na počet fyzických jader na soketu (v tomto případě 12) pomocí Automatic Soft NUMA."

Jako vždy je dobré otestovat výkon vaší pracovní zátěže pomocí Automatic Soft NUMA, než jej použijete ve výrobě.

Dynamické škálování paměťových objektů

V SQL Server 2012 SP4 i SQL Server 2014 SP2 bude SQL Server dynamicky rozdělovat paměťové objekty na základě počtu NUMA uzlů a jader logických procesorů, aby bylo možné lépe škálovat na moderním serverovém hardwaru. Cílem dynamického povýšení je automaticky rozdělit objekt paměti bezpečné pro vlákna (CMEMTHREAD), pokud se stane úzkým hrdlem.

Nerozdělené paměťové objekty budou dynamicky povýšeny na rozdělení podle uzlu NUMA (počet oddílů se rovná počtu uzlů NUMA) na základě pracovní zátěže a úzkého místa a paměťové objekty rozdělené uzlem NUMA mohou být dále povýšeny na rozdělení podle logických jader CPU. (počet oddílů se rovná počtu logických jader CPU). Toto vylepšení eliminuje potřebu příznaku trasování 8048, jakmile nainstalujete SQL 2014 SP2 nebo SQL Server 2012 SP4.

Vylepšení SOS_RWLock Spinlock

V SQL Server 2014 SP2 jsou vylepšení (opět přenesená z SQL Server 2016), která odstraňují potřebu spinlocků pro operace SOS_RWLock. Microsoft toto vylepšení popisuje podrobněji takto:

"SOS_RWLock je synchronizační primitivum používané na různých místech v kódové základně SQL Server. Jak název napovídá, kód může mít více sdílené (čtecí) nebo jeden (zapisovatel) vlastnictví. Toto vylepšení odstraňuje potřebu spinlocku pro SOS_RWLock a místo toho používá techniky bez uzamčení podobné in-memory OLTP. Díky této změně může mnoho vláken číst datovou strukturu chráněnou SOS_RWLock paralelně, aniž by se navzájem blokovala, a tím poskytovala zvýšenou škálovatelnost. Před touto změnou umožňovala starší implementace spinlocku pouze jednomu vláknu získat SOS_RWLock najednou i pro čtení datové struktury."

Získáte také řadu užitečných vylepšení správy v SQL Server 2012 SP4 a SQL Server 2014 SP2. O těchto vylepšeních si můžete přečíst podrobněji v těchto příspěvcích na blogu:

  • Vydán SQL Server 2012 Service Pack 4 (SP4)!
  • SQL Server 2014 Service Pack 2 je nyní k dispozici!!!

Klíčovým přínosem z toho všeho je, že pokud používáte SQL Server 2012 (který vypadl z běžné podpory 11. července 2017), chcete používat SQL Server 2012 SP4, zatímco pokud používáte SQL Server 2014, chcete používat SQL Server 2014 SP2 nebo novější. Budete také muset povolit příslušné příznaky trasování a nastavit příslušné vlastnosti databáze, abyste mohli tato vylepšení využít.


  1. Existuje způsob, jak použít ARRAY v Entity Framework + PostgreSql

  2. Ukončí používání zavře otevřené připojení SQL

  3. Kvíz o výkonu a ladění Oracle

  4. Proč PostgreSQL nevrací hodnoty null, když je podmínka <> pravdivá