Sdílet prostřednictvím


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/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.
  • Neclusterované indexy columnstore pro protokol HTAP vám pomůžou získat přehledy v reálném čase v reálném čase prostřednictvím přímého dotazování 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.
  • Clusterované indexy columnstore optimalizované pro protokol HTAP optimalizované pro paměť umožňují provádět rychlé zpracování transakcí a souběžně spouštět analytické dotazy velmi rychle na stejných datech.

Indexy columnstore a OLTP v paměti byly zavedeny na SQL Server v roce 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í OLTP v paměti byla obchodní řešení kvora schopná zdvojnásobit své úlohy a zlepšit jednotky 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 důležité obchodní informace (vCore) služby 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 indexů OLTP v paměti a columnstore specifických pro Azure SQL Database a také ukázky, které vám umožní vidět:

  • 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í OLTP v paměti, stejně jako indexy columnstore.

Další informace o technologiích v paměti v SQL Serveru najdete v tématu:

OLTP v paměti

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.
    • Nedurable tables (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).
  • 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.

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 jednoúčelové 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:

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

S elastickými fondy se úložiště OLTP v paměti sdílí 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:

  • Max eDTU Nakonfigurujte databáziMax vCore, která je nižší než počet eDTU nebo počtu virtuálních jader pro fond jako celek. Toto maximum také proporcionálně limituje využití úložiště OLTP v paměti v jakékoli databázi ve fondu.
  • Min eDTU Nakonfigurujte nebo Min vCore je větší než 0. Toto minimum zaručuje, že každá databáze ve fondu má množství dostupného úložiště OLTP v paměti, které odpovídá nakonfigurované Min eDTU nebo Min 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 vertikálním snížení kapacity Pro důležité obchodní informace nebo databáze Premium se data v tabulkách optimalizovaných pro paměť musí vejít do úložiště OLTP v paměti, které je dostupné v cíli cílové 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;

Úložiště sloupců v paměti

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ý columnstore , kde jsou všechna data v tabulce uspořádaná ve sloupcovém formátu. V tomto typu indexu jsou všechny řádky v tabulce umístěny ve sloupcovém formátu, které vysoce komprimují data a umožňují spouštět rychlé analytické dotazy a sestavy v tabulce. 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 dalšího indexu columnstore je však řádově menší než ekvivalentní index stromu B.

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 indexy columnstore

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 použít také kompresi dat rowstore.

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 se podporují jenom v úrovních služby Hyperscale, Pro důležité obchodní informace 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.