Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
platí pro: SQL Server
Azure SQL Database
Azure SQL Managed Instance
In-Memory OLTP je špičková technologie dostupná v SQL Serveru a SQL Database pro optimalizaci výkonu zpracování transakcí, příjmu dat, načítání dat a přechodných scénářů dat. Tento článek obsahuje přehled technologie a popisuje scénáře použití pro In-Memory OLTP. Tyto informace slouží k určení, jestli je In-Memory OLTP pro vaši aplikaci vhodné. Článek končí příkladem, který ukazuje In-Memory objekty OLTP, odkaz na ukázku výkonu a odkazy na prostředky, které můžete použít pro další kroky.
- Tento článek popisuje technologii In-Memory OLTP v SYSTÉMU SQL Server i SQL Database.
- Další informace specifické pro data v paměti ve službě Azure SQL Database najdete v tématu Optimalizace výkonu pomocí technologií v paměti ve službě Azure SQL Database a blogu: In-Memory OLTP ve službě Azure SQL Database.
- Další informace specifické pro data v paměti ve službě Azure SQL Managed Instance najdete v tématu Optimalizace výkonu pomocí technologií v paměti ve službě Azure SQL Managed Instance.
Přehled In-Memory OLTP
In-Memory OLTP může poskytovat skvělé zvýšení výkonu pro správné úlohy. I když zákazníci v některých případech zaznamenali až 30X zvýšení výkonu, to, kolik získáte, závisí na úloze.
Odkud tento výkon pochází? V podstatě In-Memory OLTP zlepšuje výkon zpracování transakcí tím, že zefektivňuje přístup k datům a provádění transakcí a odebírá kolize zámků a západek mezi souběžným prováděním transakcí. In-Memory OLTP není rychlý, protože je v paměti; je to rychlé kvůli optimalizaci dat v paměti. Algoritmy pro ukládání dat, přístup a zpracování byly od základů přepracovány, aby využívaly nejnovější vylepšení v paměti a vysoko souběžnosti.
Právě proto, že data jsou v paměti, neznamená, že je ztratíte, když dojde k selhání. Ve výchozím nastavení jsou všechny transakce plně odolné, což znamená, že máte stejné záruky stálosti, které získáte pro jakoukoli jinou tabulku v SQL Serveru: v rámci potvrzení transakce se všechny změny zapisují do transakčního protokolu na disku. Pokud dojde k selhání kdykoli po potvrzení transakce, data tam jsou, když se databáze vrátí do online režimu. Kromě toho In-Memory OLTP funguje se všemi možnostmi vysoké dostupnosti a zotavení po havárii SQL Serveru, jako jsou skupiny dostupnosti, instance clusteru s podporou převzetí služeb při selhání, zálohování/obnovení atd.
Pokud chcete ve své databázi použít In-Memory OLTP, použijte jeden nebo více následujících typů objektů:
- Tabulky optimalizované pro paměť se používají k ukládání uživatelských dat. Deklarujete tabulku, která se má optimalizovat při vytváření.
- Tabulky, které nejsou odolné , se používají pro přechodná data, a to buď pro ukládání do mezipaměti, nebo pro zprostředkující sadu výsledků (nahrazení tradičních dočasných tabulek). Tabulka, která není odolná, je tabulka optimalizovaná pro paměť, která je deklarována pomocí DURABILITY=SCHEMA_ONLY, což znamená, že změny těchto tabulek neúčtují žádné vstupně-výstupní operace. Tím se vyhnete využívání prostředků vstupně-výstupních operací protokolu v případech, kdy stálost není problém.
- Typy tabulek optimalizované pro paměť se používají pro parametry s hodnotami tabulky (TVP) a přechodné sady výsledků v uložených procedurách. Typy tabulek optimalizované pro paměť je možné použít místo tradičních typů tabulek. Proměnné tabulek a TVP deklarované pomocí typu tabulky optimalizované pro paměť dědí výhody tabulek optimalizovaných pro paměť: efektivní přístup k datům a žádné vstupně-výstupní operace.
- Nativně kompilované moduly T-SQL se používají k dalšímu zkrácení doby potřebné pro jednotlivé transakce snížením cyklů procesoru potřebných ke zpracování operací. Deklarujete modul Transact-SQL, který se má nativně zkompilovat při vytváření. V tuto chvíli je možné nativně zkompilovat následující moduly T-SQL: uložené procedury, triggery a skalární uživatelem definované funkce.
In-Memory OLTP je integrovaný do SQL Serveru a SLUŽBY SQL Database. Vzhledem k tomu, že se tyto objekty chovají podobným způsobem jako jejich tradiční protějšky, můžete často získat výhody výkonu a zároveň provádět pouze minimální změny v databázi a aplikaci. Navíc můžete mít ve stejné databázi tabulky optimalizované pro paměť i tradiční diskové tabulky a spouštět dotazy napříč dvěma. Podívejte se na ukázkový Transact-SQL skript pro každý z těchto typů objektů dále v tomto článku.
Scénáře použití pro In-Memory OLTP
In-Memory OLTP není kouzelné tlačítko pro rychlý přechod a není vhodné pro všechny úlohy. Například tabulky optimalizované pro paměť nepřinášejí využití procesoru, pokud většina dotazů provádí agregaci nad velkými rozsahy dat. Indexy Columnstore vám s tímto scénářem pomůžou.
Upozornění
Známý problém: U databází s tabulkami optimalizovanými pro paměť může provedení zálohování transakčního protokolu bez obnovení a pozdější spuštění obnovení transakčního protokolu s obnovením způsobit nereagující proces obnovení databáze. Tento problém může mít vliv také na funkci přesouvání protokolů. Chcete-li tento problém vyřešit, může být instance SYSTÉMU SQL Server restartována před zahájením procesu obnovení.
Tady je seznam scénářů a vzorů aplikací, ve kterých jsme viděli, že zákazníci byli úspěšní s In-Memory OLTP.
Zpracování transakcí s vysokou propustností a nízkou latencí
Toto je základní scénář, pro který jsme vytvořili In-Memory OLTP: podporují velké objemy transakcí s konzistentní nízkou latencí pro jednotlivé transakce.
Mezi běžné scénáře úloh patří obchodování s finančními nástroji, sportovními sázkami, mobilními hrami a doručováním reklam. Dalším běžným vzorem je "katalog", který se často čte a/nebo aktualizuje. Jedním z příkladů je, že máte velké soubory, každý distribuovaný přes několik uzlů clusteru a vy katalogujete umístění jednotlivých horizontálních oddílů každého souboru v tabulce optimalizované pro paměť.
Na co myslet při implementaci
Pro základní transakční tabulky používejte tabulky optimalizované pro paměť, to znamená tabulky s nejvýkonnějšími transakcemi. Nativně zkompilované uložené procedury slouží k optimalizaci provádění logiky přidružené k obchodní transakci. Čím více logiky můžete vysunout do uložených procedur v databázi, tím výhodou je In-Memory OLTP.
Začínáme s existující aplikací:
- Pomocí sestavy analýzy výkonu transakcí identifikujte objekty, které chcete migrovat.
- Pomoc s migrací vám pomůže poradce pro optimalizaci paměti a nativní poradce pro kompilaci .
Příjem dat, včetně IoT (Internet věcí)
In-Memory OLTP je dobrý při ingestování velkých objemů dat z mnoha různých zdrojů najednou. A často je výhodné ingestovat data do databáze SQL Serveru v porovnání s jinými cíli, protože SQL Server provádí spouštění dotazů na data rychle a umožňuje získat přehledy v reálném čase.
Mezi běžné vzory aplikací patří:
- Ingestování čtení a událostí snímačů a povolení oznámení a historické analýzy.
- Správa dávkových aktualizací, i z více zdrojů, a zároveň minimalizace dopadu na souběžnou úlohu čtení.
Na co myslet při implementaci
Pro příjem dat použijte tabulku optimalizovanou pro paměť. Pokud se příjem dat skládá převážně z vložení (nikoli aktualizací) a In-Memory nároky na úložiště OLTP jsou obavy, a to buď
- Použijte úlohu k pravidelnému dávkovému snižování zátěže dat do diskové tabulky s clusterovaným indexem columnstore pomocí úlohy, která provádí
INSERT INTO <disk-based table> SELECT FROM <memory-optimized table>; nebo - Pomocí dočasné tabulky optimalizované pro paměť můžete spravovat historická data – v tomto režimu se systémem spravuje historická data na disku a přesun dat.
Úložiště ukázek SQL Serveru obsahuje aplikaci inteligentní mřížky, která používá dočasnou tabulku optimalizovanou pro paměť, typ tabulky optimalizovanou pro paměť a nativně zkompilovanou uloženou proceduru pro urychlení příjmu dat při správě In-Memory využití úložiště OLTP dat snímače:
Ukládání do mezipaměti a stav relace
Technologie In-Memory OLTP vytváří databázový stroj v databázích SQL Serveru nebo Azure SQL atraktivní platformu pro udržování stavu relace (například pro aplikaci ASP.NET) a ukládání do mezipaměti.
ASP.NET stav relace je úspěšný případ použití In-Memory OLTP. S SQL Serverem se jeden zákazník chystá dosáhnout 1,2 milionu požadavků za sekundu. Mezitím začali používat In-Memory OLTP pro potřeby ukládání do mezipaměti všech aplikací střední vrstvy v podniku. Podrobnosti: Jak bwin používá SQL Server 2016 (13.x) In-Memory OLTP k dosažení mimořádného výkonu a škálování
Na co myslet při implementaci
Tabulky optimalizované pro paměť můžete použít jako jednoduché úložiště klíč-hodnota uložením objektu BLOB do sloupce varbinary(max). Alternativně můžete implementovat částečně strukturovanou mezipaměť s podporou JSON v SQL Serveru a SQL Database. Nakonec můžete vytvořit úplnou relační mezipaměť prostřednictvím nestálých tabulek s úplným relačním schématem, včetně různých datových typů a omezení.
Začínáme s optimalizací paměti ASP.NET stavu relace pomocí skriptů publikovaných na GitHubu k nahrazení objektů vytvořených integrovaným poskytovatelem stavu relace SQL Serveru: aspnet-session-state
Případová studie zákazníka
- Bwin zvýšil propustnost se stavem relace ASP.NET ještě dál a implementoval systém ukládání do mezipaměti na podnikové úrovni s In-Memory OLTP v SQL Serveru 2016 (13.x): Jak bwin používá SQL Server 2016 (13.x) In-Memory OLTP k dosažení mimořádného výkonu a škálování.
Nahrazení objektu tempdb
K nahrazení tradičních tempdb struktur založených na tradičních strukturách, jako jsou dočasné tabulky, proměnné tabulek a parametry s hodnotami tabulky (TVPs), použijte nestáhnoucí tabulky a typy tabulek optimalizované pro paměť.
Proměnné tabulek optimalizované pro paměť a tabulky, které nejsou odolné, obvykle snižují vstupně-výstupní operace procesoru a zcela odeberou vstupně-výstupní operace protokolu ve srovnání s tradičními proměnnými tabulek a #temp tabulkou.
Na co myslet při implementaci
Začínáme: Vylepšení výkonu dočasných tabulek a proměnných tabulek pomocí optimalizace paměti
Případová studie zákazníka
- Jeden zákazník dokázal zvýšit výkon o 40%, pouze nahrazením tradičních TVPs s optimalizovanými pro paměť: Vysokorychlostní příjem dat IoT pomocí In-Memory OLTP v Azure
ETL (extrakce načítání transformace)
Pracovní postupy ETL často zahrnují načtení dat do pracovní tabulky, transformace dat a načtení do konečných tabulek.
Pro přípravu dat používejte tabulky optimalizované pro paměť, které nejsou odolné. Úplně odeberou všechny vstupně-výstupní operace a zefektivní přístup k datům.
Na co myslet při implementaci
Pokud v rámci pracovního postupu provádíte transformace pracovní tabulky, můžete tyto transformace urychlit pomocí nativně zkompilovaných uložených procedur. Pokud můžete tyto transformace provádět paralelně, získáte další výhody škálování z optimalizace paměti.
Ukázkový skript
Než začnete používat In-Memory OLTP, musíte vytvořit skupinu souborů MEMORY_OPTIMIZED_DATA. Kromě toho doporučujeme použít úroveň kompatibility databáze 130 (nebo vyšší) a nastavit možnost databáze MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT na ZAPNUTO.
Skript můžete použít v následujícím umístění k vytvoření skupiny souborů ve výchozí datové složce a konfiguraci doporučených nastavení:
Následující ukázkový skript znázorňuje In-Memory objekty OLTP, které můžete vytvořit ve své databázi.
Nejprve začněte konfigurací databáze pro In-Memory OLTP.
-- configure recommended DB option
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;
GO
Tabulky můžete vytvářet s různou odolností:
-- memory-optimized table
CREATE TABLE dbo.table1
( c1 INT IDENTITY PRIMARY KEY NONCLUSTERED,
c2 NVARCHAR(MAX))
WITH (MEMORY_OPTIMIZED=ON);
GO
-- non-durable table
CREATE TABLE dbo.temp_table1
( c1 INT IDENTITY PRIMARY KEY NONCLUSTERED,
c2 NVARCHAR(MAX))
WITH (MEMORY_OPTIMIZED=ON,
DURABILITY=SCHEMA_ONLY);
GO
Typ tabulky můžete vytvořit jako tabulku v paměti.
-- memory-optimized table type
CREATE TYPE dbo.tt_table1 AS TABLE
( c1 INT IDENTITY,
c2 NVARCHAR(MAX),
is_transient BIT NOT NULL DEFAULT (0),
INDEX ix_c1 HASH (c1) WITH (BUCKET_COUNT=1024))
WITH (MEMORY_OPTIMIZED=ON);
GO
Můžete vytvořit nativně zkompilovanou uloženou proceduru. Další informace naleznete v tématu Volání nativně zkompilovaných uložených procedur z aplikací pro přístup k datům.
-- natively compiled stored procedure
CREATE PROCEDURE dbo.usp_ingest_table1
@table1 dbo.tt_table1 READONLY
WITH NATIVE_COMPILATION, SCHEMABINDING
AS
BEGIN ATOMIC
WITH (TRANSACTION ISOLATION LEVEL=SNAPSHOT,
LANGUAGE=N'us_english')
DECLARE @i INT = 1
WHILE @i > 0
BEGIN
INSERT dbo.table1
SELECT c2
FROM @table1
WHERE c1 = @i AND is_transient=0
IF @@ROWCOUNT > 0
SET @i += 1
ELSE
BEGIN
INSERT dbo.temp_table1
SELECT c2
FROM @table1
WHERE c1 = @i AND is_transient=1
IF @@ROWCOUNT > 0
SET @i += 1
ELSE
SET @i = 0
END
END
END
GO
-- sample execution of the proc
DECLARE @table1 dbo.tt_table1;
INSERT @table1 (c2, is_transient) VALUES (N'sample durable', 0);
INSERT @table1 (c2, is_transient) VALUES (N'sample non-durable', 1);
EXECUTE dbo.usp_ingest_table1 @table1=@table1;
SELECT c1, c2 from dbo.table1;
SELECT c1, c2 from dbo.temp_table1;
GO
Související obsah
- In-Memory technologie OLTP pro rychlejší výkon T-SQL
- Výhody výkonu a využití prostředků In-Memory OLTP ve službě Azure SQL Database
- Zlepšení výkonu dočasných tabulek a proměnných tabulek pomocí optimalizace paměti
- Ukázka: Zlepšení výkonu In-Memory OLTP
- Ukázková databáze pro In-Memory OLTP
- Ukázku výkonu pomocí In-Memory OLTP najdete na adrese: in-memory-oltp-perf-demo-v1.0
- 17minutové video vysvětlující In-Memory OLTP a ukázku
- In-Memory scénáře použití a přehledu OLTP
- Optimalizace výkonu s využitím technologií In-Memory v Azure SQL
- System-Versioned dočasných tabulek s tabulkami Memory-Optimized
- Skupina souborů optimalizovaná pro paměť
- Skript pro povolení In-Memory OLTP a nastavení doporučených možností