Optimalizace výkonu pomocí technologií v paměti ve službě Azure SQL Database
Platí pro:Azure SQL Database
Technologie v paměti umožňují zlepšit výkon aplikace a potenciálně snížit náklady na databázi.
Kdy používat technologie v paměti
Pomocí technologií v paměti můžete dosáhnout vylepšení výkonu s různými úlohami:
- Transakční (online transakční zpracování (OLTP)), kde většina požadavků čte nebo aktualizuje menší sadu dat, například operace vytvoření, čtení, aktualizace a odstranění (CRUD).
- Analýza (online analytické zpracování (OLAP)), kde většina dotazů obsahuje složité výpočty pro účely generování sestav, a také pravidelně naplánované procesy, které provádějí operace načítání (nebo hromadné načítání) a/nebo zapisují změny dat do existujících tabulek. Úlohy OLAP se často aktualizují pravidelně z úloh OLTP.
- Smíšené (hybridní zpracování transakcí/analytické zpracování (HTAP)), kde se na stejné sadě dat spouští dotazy OLTP i OLAP.
Technologie v paměti mohou zvýšit výkon těchto úloh tím, že uchovávají data, která by se měla zpracovat do paměti, pomocí nativní kompilace dotazů nebo pokročilého zpracování, jako je dávkové zpracování a instrukce SIMD, které jsou k dispozici na podkladovém hardwaru.
Přehled
Azure SQL Database podporuje následující technologie v paměti:
- OLTP v paměti zvyšuje počet transakcí za sekundu a snižuje latenci zpracování transakcí. Scénáře, které využívají OLTP v paměti, jsou: zpracování transakcí s vysokou propustností, jako je obchodování a hraní her, příjem dat z událostí nebo zařízení IoT, ukládání do mezipaměti, načítání dat a dočasné scénáře tabulek a proměnných tabulek.
- Clusterované indexy columnstore snižují nároky na úložiště (až 10krát) a zlepšují výkon pro dotazy generování sestav a analýz. Můžete ho použít s tabulkami faktů v datových martech, abyste do databáze vešli více dat a zlepšili výkon. Můžete ho také použít s historickými daty v provozní databázi k archivaci a dotazování až 10krát více dat.
- Neklastrové columnstore indexy pro HTAP vám pomůžou získat přehledy v reálném čase přímým dotazováním provozní databáze, aniž byste museli spouštět nákladný proces extrakce, transformace a načítání (ETL) a čekat na naplnění datového skladu. Neclusterované indexy columnstore umožňují rychlé spouštění analytických dotazů v databázi OLTP a zároveň snižují dopad na provozní úlohu.
- Pamově optimalizované clusterové columnstore indexy pro HTAP umožní provádět rychlé transakční zpracování, a zároveň souběžně spouštět analytické dotazy velmi rychle na stejných datech.
Sloupcové indexy a In-Memory OLTP byly zavedeny ve SQL Serveru v letech 2012 a 2014. Azure SQL Database, Azure SQL Managed Instance a SQL Server sdílejí stejnou implementaci technologií v paměti.
Poznámka:
Podrobný kurz ukazující výhody technologie OLTP v paměti pomocí AdventureWorksLT
ukázkové databáze a ostress.exe najdete v ukázce paměti ve službě Azure SQL Database.
Výhody technologie v paměti
Díky efektivnějšímu zpracování dotazů a transakcí pomáhají technologie v paměti také snížit náklady. Obvykle nemusíte upgradovat cenovou úroveň databáze, abyste dosáhli zvýšení výkonu. V některých případech můžete dokonce snížit cenovou úroveň a zároveň stále dochází ke zlepšení výkonu u technologií v paměti.
Díky použití In-Memory OLTP mohla společnost Quorum Business Solutions zdvojnásobit své pracovní zatížení a zlepšit DTU o 70 %. Další informace najdete v tématu OLTP v paměti ve službě Azure SQL Database.
Poznámka:
OLTP v paměti je k dispozici v úrovních služeb Premium (DTU) a Pro kritické obchodní služby (vCore) v Azure SQL Database. Úroveň služby Hyperscale podporuje podmnožinu objektů OLTP v paměti. Další informace najdete v tématu Omezení hyperškálování.
Indexy columnstore jsou k dispozici ve všech úrovních služby s výjimkou úrovně Basic a úrovně Standard, pokud je cíl služby nižší než S3. Další informace najdete v tématu Změna úrovní služby databází obsahujících indexy columnstore.
Tento článek popisuje aspekty In-Memory OLTP a columnstore indexů specifických pro Azure SQL Database, a také obsahuje ukázky, které vám umožní prohlédnout si.
- Dopad těchto technologií na omezení velikosti úložiště a dat.
- Jak spravovat přesun databází, které tyto technologie používají mezi různými cenovými úrovněmi.
- Ilustrativní použití technologie In-Memory OLTP a sloupcových indexů.
Další informace o technologiích v paměti v SQL Serveru najdete v tématu:
- Přehled a scénáře použití OLTP v paměti (včetně odkazů na případové studie zákazníků a informace, které vám pomůžou začít)
- Dokumentace k OLTP v paměti
- Průvodce sloupcovými indexy
- Hybridní transakční/analytické zpracování (HTAP), označované také jako provozní analýzy v reálném čase
OLTP v paměti databází
Technologie OLTP v paměti poskytuje extrémně rychlé operace přístupu k datům tím, že uchovává všechna data v paměti. Využívá také specializované indexy, nativní kompilaci dotazů a přístup k datům bez západek za účelem zlepšení výkonu úlohy OLTP. Data OLTP v paměti můžete uspořádat dvěma způsoby:
Formát úložiště řádků optimalizovaný pro paměť, kde každý řádek je samostatným objektem paměti. Toto je klasický formát OLTP v paměti optimalizovaný pro vysoce výkonné úlohy OLTP. Existují dva typy tabulek optimalizovaných pro paměť, které lze použít ve formátu rowstore optimalizovaného pro paměť:
-
Odolné tabulky (
SCHEMA_AND_DATA
), kde se řádky umístěné v paměti zachovají po restartování serveru. Tento typ tabulek se chová jako tradiční tabulka rowstore s dalšími výhodami optimalizace v paměti. -
Nestálé tabulky (
SCHEMA_ONLY
), kde se řádky po restartování nezachovají. Tento typ tabulky je určený pro dočasná data (například nahrazení dočasných tabulek) nebo pro tabulky, kde potřebujete rychle načíst data, než je přesunete do některé trvalé tabulky (tzv. pracovní tabulky).
-
Odolné tabulky (
Formát columnstore optimalizovaný pro paměť, ve kterém jsou data uspořádaná ve sloupcovém formátu. Tato struktura je určená pro scénáře HTAP, ve kterých potřebujete spouštět analytické dotazy na stejnou datovou strukturu, ve které běží vaše úloha OLTP.
Poznámka:
Technologie OLTP v paměti je určená pro datové struktury, které se můžou plně nacházet v paměti. Vzhledem k tomu, že data v paměti nelze přesměrovat na disk, ujistěte se, že používáte databázi, která má dostatek paměti. Další informace najdete v tématu Velikost dat a limit úložiště pro OLTP v paměti.
- Rychlý úvod do OLTP v paměti: Rychlý průvodce 1: Technologie OLTP v paměti pro zvýšení výkonu T-SQL.
Velikost dat a limit úložiště pro OLTP v paměti
OLTP v paměti obsahuje tabulky optimalizované pro paměť, které se používají k ukládání uživatelských dat. Tyto tabulky se musí vejít do paměti. Každý cíl služby má kvótu paměti nebo limit pro tabulky optimalizované pro paměť, označované jako úložiště OLTP v paměti.
Každý podporovaný cíl jednoduché databázové služby a každý cíl služby elastického fondu zahrnuje určité množství úložiště OLTP v paměti.
- Omezení prostředků na základě DTU – jednoúčelová databáze
- Limity prostředků na základě DTU – elastické fondy
- Limity prostředků založené na vCore – jednoduché databáze
- Limity prostředků na základě virtuálních jader – elastické pooly
Následující položky se počítají do limitu úložiště OLTP v paměti:
- Řádky aktivních uživatelských dat v tabulkách a proměnných tabulek optimalizovaných pro paměť Staré verze řádků se do limitu nezapočítávají.
- Indexy v tabulkách optimalizovaných pro paměť.
- Provozní režie operací ALTER TABLE
Pokud dosáhnete limitu, zobrazí se chyba kvůli překročení kvóty a už nebudete moct vkládat ani aktualizovat data. Pokud chcete tuto chybu zmírnit, odstraňte data nebo zvyšte cíl služby databáze nebo elastického fondu.
Podrobnosti o monitorování využití úložiště OLTP v paměti a konfiguraci upozornění při téměř dosažení limitu najdete v tématu Monitorování úložiště OLTP v paměti.
Informace o elastických fondech
U elastických fondů je úložiště In-Memory OLTP sdílené napříč všemi databázemi ve fondu. Proto může využití v jedné databázi potenciálně ovlivnit jiné databáze. Toto jsou dvě omezení rizik:
- Nakonfigurujte
Max eDTU
neboMax vCore
pro databáze s hodnotou nižší než je počet eDTU nebo virtuálních jader pro celý fond. Toto maximum také proporcionálně limituje využití úložiště OLTP v paměti v jakékoli databázi ve fondu. - Nakonfigurujte
Min eDTU
neboMin vCore
tak, aby bylo větší než 0. Toto minimum zaručuje, že každá databáze ve fondu má dostupné úložiště In-Memory OLTP v množství, které odpovídá nakonfigurovanéMin eDTU
neboMin vCore
.
Změna úrovní služby databází, které používají technologie OLTP v paměti
OLTP v paměti se nepodporuje ve vrstvách služby Azure SQL Database pro obecné účely, Standard a Basic. Proto není možné škálovat databázi, která má žádné objekty OLTP v paměti na jednu z těchto úrovní. Pokud chcete škálovat databázi na jednu z těchto úrovní služby, odeberte všechny tabulky a typy tabulek optimalizovaných pro paměť a všechny nativně kompilované moduly T-SQL nebo je převeďte na objekty založené na disku a běžné moduly T-SQL.
Při snižování úrovně kapacity u databáze Business Critical nebo Premium se data v paměťově optimalizovaných tabulkách musí vejít do úložiště In-Memory OLTP, které je dostupné v cílové úrovni služby databáze nebo elastického fondu. Pokud se pokusíte vertikálně snížit kapacitu databáze nebo elastického fondu nebo přesunout databázi do elastického fondu a cíl cílové služby nemá dostatek dostupného úložiště OLTP v paměti, operace selže.
Určení, jestli existují objekty OLTP v paměti
Existuje programový způsob, jak zjistit, jestli daná databáze podporuje OLTP v paměti. Můžete spustit následující dotaz Jazyka Transact-SQL:
SELECT DATABASEPROPERTYEX(DB_NAME(), 'IsXTPSupported');
Pokud dotaz vrátí 1
, v této databázi se podporuje OLTP v paměti.
Následující dotazy identifikují všechny objekty, které je potřeba odebrat před škálováním databáze na úroveň služby Hyperscale, Pro obecné účely, Standard nebo Basic:
SELECT * FROM sys.tables WHERE is_memory_optimized = 1;
SELECT * FROM sys.table_types WHERE is_memory_optimized = 1;
SELECT * FROM sys.sql_modules WHERE uses_native_compilation = 1;
Paměťové sloupcové úložiště
Technologie columnstore v paměti umožňuje ukládat a dotazovat velké množství dat v tabulkách. Technologie Columnstore využívá formát úložiště dat založený na sloupcích a dávkové zpracování dotazů k dosažení až 10krát vyššího výkonu dotazů v úlohách OLAP oproti tradičnímu úložišti orientovanému na řádky. Můžete také dosáhnout až 10krát větší komprese dat než v případě nekomprimovaných dat.
Existují dva typy indexů columnstore, které můžete použít k uspořádání dat:
- Clusterovaný sloupcový úložiště kde jsou všechna data v tabulce uspořádaná ve sloupcovém formátu. V tomto typu indexu jsou všechny řádky v tabulce ve sloupcovém formátu, což výrazně komprimuje data a umožňuje rychlé provádění analytických dotazů a vytváření sestav nad tabulkou. V závislosti na povaze dat se velikost dat může zmenšit o 10x-100x. Clusterované indexy columnstore také umožňují rychlý příjem velkých objemů dat (hromadné načítání), protože velké dávky dat větší než 100 000 řádků jsou před uložením na disku komprimovány. Tento typ indexu je dobrou volbou pro scénáře klasického datového skladu.
- Neskupené columnstore , kde jsou data uložená v tradiční tabulce rowstore a existuje další index ve formátu columnstore, který se používá pro analytické dotazy. Tento typ indexu umožňuje funkci HTAP (Hybrid Transactional-Analytic Processing): schopnost spouštět rychlé analýzy v reálném čase u transakční úlohy. Dotazy OLTP se spouští v tabulce rowstore, která je optimalizovaná pro přístup k malé sadě řádků, zatímco dotazy OLAP se spouští na indexu columnstore, který je lepší volbou pro prohledávání a analýzu. Optimalizátor dotazů dynamicky vybírá na základě dotazu formát rowstore nebo columnstore. Neclusterované indexy columnstore nezmenšují velikost dat, protože původní sada dat se uchovává v původní tabulce rowstore beze změny. Velikost dodatečného columnstore indexu je však řádově menší než ekvivalentní index typu B-tree.
Poznámka:
Technologie columnstore v paměti uchovává pouze data potřebná ke zpracování v paměti, zatímco data, která se nevejdou do paměti, jsou uložená na disku. Množství dat ve strukturách columnstore proto může překročit množství dostupné paměti.
Velikost dat a úložiště pro columnstore indexy
Indexy columnstore se nevyžadují, aby se plně vešly do paměti. Jediným limitem velikosti indexů je proto maximální celková velikost databáze, která je zdokumentovaná v nákupním modelu založeném na DTU a článcích nákupních modelů založených na virtuálních jádrech.
Pokud používáte clusterované indexy columnstore, použije se pro úložiště základní tabulky sloupcová komprese. Tato komprese může výrazně snížit nároky na úložiště uživatelských dat, což znamená, že do databáze můžete umístit více dat. Poměr komprese lze dále zvýšit pomocí sloupcové archivační komprese. Množství komprese, které můžete dosáhnout, závisí na povaze dat, ale 10krát není komprese neobvyklá.
Pokud máte například databázi s maximální velikostí 1 terabajtu (TB) a 10násobkem komprese pomocí indexů columnstore, můžete do databáze umístit celkem 10 TB uživatelských dat.
Pokud používáte neclusterované indexy columnstore, základní tabulka je stále uložena v tradičním formátu rowstore. Úspory úložiště proto nejsou tak významné jako u clusterovaných indexů columnstore. Pokud ale nahrazujete mnoho tradičních neclusterovaných indexů jediným indexem columnstore, můžete stále vidět celkové úspory v úložišti pro tabulku. Pro základní tabulku můžete také použít rowstore kompresi dat.
Změna úrovní služby databází obsahujících indexy columnstore
Pokud používáte nákupní model DTU a vaše databáze obsahuje indexy columnstore, může vaše aplikace přestat fungovat, pokud škálujete databázi pod cíl služby S3. Indexy columnstore jsou podporovány pouze v úrovních služby Hyperscale, Kriticky důležité pro podnikání a Premium, a také v úrovni služby Standard, pokud používáte S3 a vyšší. Indexy columnstore nejsou podporovány na úrovni služby Basic. Když škálujete databázi na nepodporovanou úroveň služby nebo cíl služby, index columnstore přestane být dostupný. Systém udržuje index při provádění příkazů DML, ale nikdy nepoužívá index. Pokud později škálujete zpět na podporovanou úroveň služby nebo cíl služby, index columnstore je okamžitě připravený k opětovnému použití.
Pokud máte clusterovaný index columnstore, stane se celá tabulka nedostupná, pokud se databáze škáluje na nepodporovanou úroveň služby nebo cíl služby. Před operací škálování odstraňte všechny clusterované indexy columnstore a nahraďte je clusterovanými indexy nebo haldami rowstore.
Související obsah
- Rychlý start 1: Technologie OLTP v paměti pro rychlejší výkon T-SQL
- Použití OLTP v paměti v existující aplikaci Azure SQL
- Přehled olTP v paměti a scénáře použití
- Monitorování úložiště OLTP v paměti
- Ukázka v paměti ve službě Azure SQL Database
- Blog: OLTP v paměti ve službě Azure SQL Database
- Další informace o OLTP v paměti
- Další informace o indexech columnstore
- Informace o provozních analýzách v reálném čase
- Technický článek: OLTP v paměti – Běžné aspekty úloh a migrace v SQL Serveru 2014