Novinky v SQL Server 2014 – 3. díl

V předchozích dílech (první díl, druhý díl) našeho seriálu jsme si představili novinky SQL serveru 2014 v oblasti indexů, záloh, zabezpečení a vysoké dostupnosti. Dnes se zaměříme na zvýšení výkonu pomocí In-Memory optimalizace.

In-Memory je zcela nová funkce SQL serveru 2014, dostupná pouze v Enterprise edici, která umožňuje několikanásobné zrychlení zpracování dotazů. Za předpokladu, že máme na našem databázovém serveru dostatek (opravdu dostatek) paměti a procesorového výkonu, můžeme modifikovat databázové schéma tak, aby tabulky obsahující naše data, která chceme zpracovat, nebyly uloženy na disku, ale byly primárně uloženy v paměti našeho serveru.

Jak to celé funguje

Základem In-Memory OLTP je využití paměti pro vybrané tabulky. Toho je nutné dosáhnout pomocí modifikace databáze. In-Memory tabulky nejsou pouze obyčejné tabulky uložené v paměti serveru. In-Memory OLTP mění několik zásadních věcí při práci s tabulkami a to už samotný styl přístupu k datům. Data nejsou organizována do datových stránek a extentů jako u běžných tabulek. Nejmenší alokační jednotkou pro čtení dat je řádek, namísto datové stránky obsahující několik řádků v případě diskových tabulek. Stejně tak jiným způsobem pracují indexy, nejedná se o ty stejné B+ stromy jako u běžné tabulky. Jiným stylem je také řízen konkurenční přístup k datům, který umožňuje zrychlení práce. Velkou výhodou z pohledu architektury je fakt, že klientská aplikace přistupuje k serveru zcela stejným způsobem a může číst data jak z disk-based tak z memory-based tabulek bez rozdílu. Změny jsou tedy provedeny pouze na serveru a klientská aplikace pracuje v zásadě beze změn.

Nejprve je nutné v databází vytvořit novou filegroup, která bude obsahovat soubory s checkpoint informacemi, které slouží pro rychlejší obnovu databáze (např. po restartu serveru). Z pohledu škálovatelnosti není nutné volit pro tuto filegroup nejrychlejší disky v rámci SQL server deploymentu, protože práce s těmito disky je pouze v tzv. append módu. Informace jsou na disk pouze sekvenčně přidávány tak, jak jsou data měněna v paměti. Navíc přístup k těmto datům je asynchroní, takže uživatel nečeká na žádné zápisy na disk.

Nasazení In-Memory OLTP

Nasazení In-Memory OLTP je možné jak u nových databází, tak u existujících databazí. Pro migraci směrem k In-Memory OLTP je nutné samozřejmě pečlivě zvážit, které tabulky a procedury je nutné migrovat pomocí testování a analýzy výkonu SQL serveru. S tímto může pomoci například Management Data Warehouse (MDW), který je již několik verzí SQL serveru dostupný přes Management Studio. Jedná se o databází, do které jsou pravidelně ukládány výkonnostní charakteristiky serveru, databází a jednotlivých dotazů. Nad MDW jsou vytvořeny reporty, které pomáhají s vizualizací zachycených informací. Velkou výhodou MDW je možnosti centrálně sbírat údaje z vícero serverů. Jakmile máme vybrány jednotlivé tabulky pro migraci do In-Memory, můžeme použít další pomůcku a to Memory-Optimization Advisor, který je dostupný při kliknutí pravým tlačítkem na tabulku. Tento Advisor Vás provede postupnou migrací tabulky na In-Memory tabulku, kdy nejprve zkontroluje tzv. blockery (které by znemožňovaly migraci na In-Memory).

SQL 2014-03 01

V jednom z dalších kroků Vám Advisor pomůže vytvořit novou filegroup pro In-Memory optimized data a nový checkpoint soubor, který bude v této filegroup. Tyto checkpoint soubory jsou ve skutečnosti tvořeny dvěma soubory – datovým a delta souborem, které dohromady tvoří tzv. Checkpoint File Pair (CFP). Checkpoint je uložen na disk dvěma způsoby – automaticky nebo manuálně. Manuální vyvoláni checkpointu je jednoduché – stačí spustit SQL příkaz CHECKPOINT. Automatické ukládání na disk probíhá vždy jakmile v transakčním logu bude zaznamenáno 512MB. Vzhledem k tomu, že In-Memory cílí na vysoce zatížené servery, nemusíme se bát, že dosažení hodnoty 512MB bude trvat velmi dlouho. Dokud nejsou data uložena v checkpointu bude pro recovery sloužit transakční log. Rekonstrukce dat v In-Memory tabulce je tedy složitější proces, a to pouze v případě, že tato tabulka je vytvořená s tím, že data jsou trvale uložena. Na dalších screenshotu je vidět jeden z checkboxů, který umožňuje, aby trvalé bylo pouze schéma, tj. definice tabulky, ale už ne samotná data v tabulce.

SQL 2014-03 02

S větším zatížením serveru je vhodné využít více souborů pro In-Memory data, nejlépe rozložených na více disků, hlavně z důvodu rekonstrukce trvale uložených dat v případě restartu serveru. V takovém případě může server využít paralelního přístupu k jednotlivým souborům a načíst je do paměti rychleji.

S využitím In-Memory tabulek je zároveň nutné se podívat na využíváné procedury, případně vytvořit nové procedury, které budou nativně kompilované. Tím je opět dosaženo razantního zrychlení zpracování dat, na které In-Memory cílí. Pro migraci uložených procedur slouží Native Complilation Advisor, který kontroluje kód uložené procedury a vytváří report nepodporovaných T-SQL konstrukcí.

SQL 2014-03 03

Omezení In-Memory OLTP

Jak jsme již uvedli v úvodu, jedním z hlavních omezení In-Memory OLTP je nutnost použití Enterprise edice SQL serveru, což však není jediný limit. Mezi další limity patří například

  • Absence DML triggerů
  • Absence Check kontrol (check constraints)
  • Absence cizích klíčů
  • Absence IDENTITY a SEQUENCE sloupců
  • Nemožnost komprese dat
  • XML, CLR a LOB datové typy nelze použít
  • Maximální velikost tabulky 512GB (ano i toto je limit, dnes jsou běžné databáze v řádech TB)

Komplentí seznam nepodporovaných TSQL dotazů https://technet.microsoft.com/en-us/library/dn246937%28v=sql.120%29.aspx

Závěr

SQL Server In-Memory OLTP přináší možnost využít tabulek, které jsou uloženy přímo v paměti SQL serveru a tím dosáhnout rapidního nárustu výkonu při zpracování OLTP dotazů. Díky multi-version optimistic konkurenčnímu přístupu k datům nejsou pro přístup vyžádovány žádné zámky na datech. Pro rychlý přístup k datům v In-Memory tabulkách je vhodné použít nativně kompilované procedury. Samotný přístup k datům je však stejný jako u disk-based tabulek, z aplikačního pohledu je nutné brát ohled pouze na restrikce, které In-Memory systém přináší.

Autor: Marek Chmel, MVP SQL Server, at&t