Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
Azure SQL Managed Instance
In-Memory OLTP az SQL Serverben és az SQL Database-ben elérhető premier technológia a tranzakciófeldolgozás, az adatbetöltés, az adatbetöltés és az átmeneti adatforgatókönyvek teljesítményének optimalizálásához. Ez a cikk áttekintést nyújt a technológiáról, és ismerteti az OLTP In-Memory használati forgatókönyveit. Ezen információk segítségével megállapíthatja, hogy In-Memory OLTP megfelel-e az alkalmazásnak. A cikk egy olyan példával zárul, amely In-Memory OLTP-objektumokat, egy perf bemutatóra mutató hivatkozást és a következő lépésekhez használható erőforrásokra mutató hivatkozásokat mutat be.
- Ez a cikk az SQL Server és az SQL Database In-Memory OLTP technológiájának ismertetése.
- Az Azure SQL Database memórián belüli adataival kapcsolatos további információkért lásd: Teljesítmény optimalizálása memóriabeli technológiák használatával az Azure SQL Database-ben és blog: In-Memory OLTP az Azure SQL Database-ben.
- A felügyelt Azure SQL-példány memórián belüli adataival kapcsolatos további információkért lásd: Teljesítmény optimalizálása memóriabeli technológiák használatával a felügyelt Azure SQL-példányban.
In-Memory OLTP áttekintése
In-Memory OLTP nagy teljesítménynövekedést biztosít a megfelelő számítási feladatokhoz. Bár az ügyfelek bizonyos esetekben akár 30X-os teljesítménynövekedést is láthattak, az a számítási feladattól függ, hogy mennyi nyereséget lát.
Honnan származik ez a teljesítménynövekedés? Az In-Memory OLTP lényegében javítja a tranzakciók feldolgozásának teljesítményét azáltal, hogy hatékonyabbá teszi az adathozzáférést és a tranzakciók végrehajtását, valamint eltávolítja a tranzakciók egyidejű végrehajtása közötti zárolási és reteszelési versengést. In-Memory OLTP nem gyors, mert memóriában van; a memóriabeli adatok optimalizálása miatt gyors. Az adattárolási, hozzáférési és feldolgozási algoritmusokat az alapoktól kezdve újratervezték, hogy kihasználhassák a memóriabeli és magas egyidejűségi számítástechnika legújabb fejlesztéseit.
Most, csak azért, mert az adatok a memóriában élnek, nem jelenti azt, hogy elveszíti azokat, ha hiba történik. Alapértelmezés szerint minden tranzakció teljesen tartós, ami azt jelenti, hogy ugyanolyan tartóssági garanciával rendelkezik az SQL Server bármely más táblájához: a tranzakció véglegesítésének részeként minden módosítást a rendszer a tranzakciónaplóba ír a lemezen. Ha a tranzakció véglegesítése után bármikor hiba lép fel, az adatok ott lesznek, amikor az adatbázis újra online állapotba kerül. Emellett az In-Memory OLTP az SQL Server összes magas rendelkezésre állási és vészhelyreállítási funkciójával működik, például a rendelkezésre állási csoportokkal, a feladatátvevő fürtpéldányokkal, a biztonsági mentéssel/visszaállítással stb.
Ha In-Memory OLTP-t szeretne használni az adatbázisban, az alábbi típusú objektumok közül egyet vagy többet használ:
- A rendszer memóriaoptimalizált táblákat használ a felhasználói adatok tárolására. Deklarálhat egy táblát, hogy a létrehozáskor memóriaoptimalizált legyen.
- A nem tartós táblák átmeneti adatokhoz használatosak, gyorsítótárazáshoz vagy köztes eredményhalmazhoz (hagyományos ideiglenes táblák helyett). A nem tartós táblák olyan memóriaoptimalizált táblák, amelyek a DURABILITY=SCHEMA_ONLY deklarálva vannak, ami azt jelenti, hogy ezeknek a tábláknak a módosításai nem járnak IO-val. Ez elkerüli a napló I/O-erőforrások használatát olyan esetekben, amikor a tartósság nem okoz gondot.
- A memóriaoptimalizált táblázattípusokat táblaértékű paraméterekhez (TVP-khez) és köztes eredményhalmazokhoz használják a tárolt eljárásokban. A memóriaoptimalizált táblázattípusok hagyományos táblázattípusok helyett használhatók. A memóriaoptimalizált táblázattípussal deklarált táblázatváltozók és TVP-k öröklik a nem tartós memóriaoptimalizált táblák előnyeit: a hatékony adathozzáférést és az IO-t.
- A natívan lefordított T-SQL-modulok az egyes tranzakciókhoz szükséges időt tovább csökkentik a műveletek feldolgozásához szükséges CPU-ciklusok csökkentésével. Deklarál egy Transact-SQL modult natív fordításra a létrehozáskor. Jelenleg a következő T-SQL-modulok állíthatók össze natív módon: tárolt eljárások, triggerek és skaláris, felhasználó által definiált függvények.
In-Memory OLTP az SQL Serverbe és az SQL Database-be van beépítve. Mivel ezek az objektumok a hagyományos társaikhoz hasonlóan viselkednek, gyakran teljesítménybeli előnyöket érhet el, miközben csak minimális módosításokat hajthat végre az adatbázison és az alkalmazásban. Emellett memóriaoptimalizált és hagyományos lemezalapú táblák is lehetnek ugyanabban az adatbázisban, és lekérdezéseket futtathat a kettő között. A cikk későbbi részében tekintse meg az ilyen típusú objektumok Transact-SQL példaszkriptet .
Használati forgatókönyvek In-Memory OLTP-hez
In-Memory OLTP nem egy varázslatos gyors gomb, és nem minden számítási feladathoz alkalmas. A memóriaoptimalizált táblák például nem vonják le a processzorhasználatot, ha a lekérdezések többsége nagy adattartományokon végez összesítést. Az oszlopcentrikus indexek segítenek ebben a forgatókönyvben.
Caution
Ismert probléma: A memóriaoptimalizált táblákkal rendelkező adatbázisok esetében a tranzakciós naplók helyreállítása nélkül végzett biztonsági mentés, majd a tranzakciónapló helyreállításának későbbi végrehajtása a helyreállítással nem válaszoló adatbázis-visszaállítási folyamatot eredményezhet. Ez a probléma a naplók szállítási funkcióját is befolyásolhatja. A probléma megoldásához az SQL Server-példány újraindulhat a visszaállítási folyamat elindítása előtt.
Az alábbi lista azokat a forgatókönyveket és alkalmazásmintákat tartalmazza, amelyekben láthattuk, hogy az ügyfelek sikeresek In-Memory OLTP-vel.
Nagy átviteli sebesség és kis késésű tranzakciófeldolgozás
Ez az alapvető forgatókönyv, amelyhez In-Memory OLTP-t hoztunk létre: nagy mennyiségű tranzakciót támogatunk, és az egyes tranzakciók esetében konzisztensen alacsony késéssel.
A számítási feladatok gyakori forgatókönyvei a következők: pénzügyi eszközök kereskedelme, sportfogadás, mobil játék és hirdetéskézbesítés. Egy másik gyakori minta egy "katalógus", amelyet gyakran olvasnak és/vagy frissítenek. Ilyenek például a nagyméretű fájlok, amelyek több fürtcsomóponton vannak elosztva, és az egyes fájlok egyes szegmenseinek helyét egy memóriaoptimalizált táblában katalogizálja.
Implementálási szempontok
Használjon memóriaoptimalizált táblákat az alaptranzakciós táblákhoz, vagyis a leginkább teljesítménykritikus tranzakciókat tartalmazó táblákhoz. Natívan lefordított tárolt eljárások használata az üzleti tranzakcióhoz társított logika végrehajtásának optimalizálásához. Minél több logikát tud leküldni az adatbázisban tárolt eljárásokba, annál jobban kihasználhatja In-Memory OLTP-t.
Egy meglévő alkalmazás első lépései:
- A tranzakcióteljesítmény-elemzési jelentéssel azonosíthatja a migrálni kívánt objektumokat.
- A migráláshoz használja a memóriaoptimalizálási tanácsadót és a natív fordítási tanácsadót .
Adatbetöltés, beleértve az IoT-t (internetkapcsolat)
In-Memory OLTP jó választás nagy mennyiségű adat egyidejű betöltéséhez számos különböző forrásból. Az adatok sql server-adatbázisba való betöltése gyakran előnyös más célhelyekhez képest, mivel az SQL Server gyorsan futtat lekérdezéseket az adatokon, és lehetővé teszi a valós idejű elemzéseket.
Gyakori alkalmazásminták a következők:
- Az érzékelői adatok és események betöltése, valamint az értesítések és az előzményelemzés engedélyezése.
- Kötegelt frissítések kezelése akár több forrásból is, miközben minimalizálja az egyidejű olvasási számítási feladatra gyakorolt hatást.
Implementálási szempontok
Használjon memóriaoptimalizált táblázatot az adatbetöltéshez. Ha a betöltés többnyire beszúrásokból (nem frissítésekből) áll, és az adatok OLTP-tárolási lábnyomának In-Memory aggodalomra ad okot, vagy
- Feladat használatával rendszeresen kötegelheti ki az adatokat egy fürtözött oszlopcentrikus indexet tartalmazó lemezalapú táblába egy olyan feladat használatával, amely nem
INSERT INTO <disk-based table> SELECT FROM <memory-optimized table>; vagy - Az előzményadatok kezeléséhez használjon időbeli memóriaoptimalizált táblát – ebben a módban az előzményadatok a lemezen élnek, az adatáthelyezést pedig a rendszer felügyeli.
Az SQL Server-minták tárháza tartalmaz egy intelligens rácsalkalmazást, amely egy időbeli memóriaoptimalizált táblát, egy memóriaoptimalizált táblázattípust és egy natívan lefordított tárolt eljárást használ az adatbetöltés felgyorsításához, miközben kezeli az érzékelőadatok In-Memory OLTP-tárolási lábnyomát:
Gyorsítótárazás és munkamenet állapota
Az In-Memory OLTP technológia vonzó platformtá teszi az SQL Server vagy az Azure SQL-adatbázisok adatbázismotorját a munkamenet-állapot (például egy ASP.NET-alkalmazás) fenntartásához és gyorsítótárazáshoz.
ASP.NET munkamenet állapota az OLTP In-Memory sikeres használati esete. Az SQL Serverrel egy ügyfél másodpercenként 1,2 millió kérést akart elérni. Addig is In-Memory OLTP-t kezdtek használni a vállalat összes középszintű alkalmazásának gyorsítótárazási igényeihez. Részletek: Hogyan használja a bwin az SQL Server 2016 (13.x) In-Memory OLTP-t a példátlan teljesítmény és skálázás érdekében
Implementálási szempontok
A nem tartós memóriaoptimalizált táblákat egyszerű kulcs-érték tárolóként használhatja egy BLOB varbinary(max) oszlopban való tárolásával. Egy részben strukturált gyorsítótárat is implementálhat JSON-támogatással az SQL Serverben és az SQL Database-ben. Végül létrehozhat egy teljes relációs gyorsítótárat nem tartós táblákon keresztül, teljes relációs sémával, beleértve a különböző adattípusokat és korlátozásokat.
Ismerkedés a memóriaoptimalizált ASP.NET munkamenet-állapottal a GitHubon közzétett szkriptek használatával a beépített SQL Server-munkamenetállapot-szolgáltató által létrehozott objektumok lecseréléséhez: aspnet-session-state
Ügyféleset-vizsgálat
- a bwin még tovább növelte az átviteli sebességet ASP.NET munkamenet-állapottal, és implementált egy nagyvállalati szintű, középszintű gyorsítótárazási rendszert, In-Memory OLTP-vel az SQL Server 2016-ban (13.x): Hogyan használja a bwin az SQL Server 2016-ot (13.x) In-Memory OLTP-t a példátlan teljesítmény és skálázás érdekében.
tempdb objektum cseréje
Használjon nem tartós táblákat és memóriaoptimalizált táblázattípusokat a hagyományos tempdb alapú struktúrák, például az ideiglenes táblák, a táblázatváltozók és a táblaértékű paraméterek (TVP-k) helyére.
A memóriaoptimalizált táblázatváltozók és a nem tartós táblák általában csökkentik a processzort, és teljesen eltávolítják a napló IO-t a hagyományos táblázatváltozókkal és #temp táblázattal összehasonlítva.
Implementálási szempontok
Első lépések: A temp table és a táblaváltozó teljesítményének javítása memóriaoptimalizálással.
Ügyféleset-vizsgálat
- Az egyik ügyfél 40%képes volt javítani a teljesítményt, csak a hagyományos TVP-k memóriaoptimalizált TVP-kre való lecserélésével: Nagy sebességű IoT-adatbetöltés In-Memory OLTP használatával az Azure-ban
ETL (Átalakítási terhelés kinyerve)
Az ETL-munkafolyamatok gyakran magukban foglalják az adatok átmeneti táblába való betöltését, az adatok átalakítását és a végső táblákba való betöltést.
Használjon nem tartós memóriaoptimalizált táblákat az adat-előkészítéshez. Teljesen eltávolítják az összes IO-t, és hatékonyabbá teszik az adathozzáférést.
Implementálási szempontok
Ha a munkafolyamat részeként átalakításokat hajt végre az előkészítési táblán, natívan lefordított tárolt eljárásokkal felgyorsíthatja ezeket az átalakításokat. Ha ezeket az átalakításokat párhuzamosan is végrehajthatja, a memóriaoptimalizálás további skálázási előnyökkel jár.
Példaszkript
Az In-Memory OLTP használatának megkezdése előtt létre kell hoznia egy MEMORY_OPTIMIZED_DATA fájlcsoportot. Emellett javasoljuk, hogy használja a 130-es (vagy magasabb) adatbázis-kompatibilitási szintet, és állítsa be az adatbázis-beállítást, MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT ON értékre.
A következő helyen található szkripttel létrehozhatja a fájlcsoportot az alapértelmezett adatmappában, és konfigurálhatja az ajánlott beállításokat:
Az alábbi példaszkript In-Memory adatbázisában létrehozható OLTP-objektumokat mutatja be.
Először konfigurálja az adatbázist In-Memory OLTP-hez.
-- configure recommended DB option
ALTER DATABASE CURRENT SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT=ON;
GO
Különböző tartósságú táblákat hozhat létre:
-- 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
Táblatípust memóriabeli táblázatként is létrehozhat.
-- 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
Létrehozhat natívan lefordított tárolt eljárást. További információ: Natívan lefordított tárolt eljárások meghívása adatelérési alkalmazásokból.
-- 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
Kapcsolódó tartalom
- In-Memory OLTP-technológiák a T-SQL gyorsabb teljesítményéhez
- Az OLTP In-Memory teljesítmény- és erőforrás-kihasználtsági előnyei az Azure SQL Database-ben
- A temp tábla és a táblaváltozó teljesítményének javítása memóriaoptimalizálással
- Bemutató: Az In-Memory OLTP teljesítményének javítása
- Mintaadatbázis In-Memory OLTP-hez
- A perf demó In-Memory OLTP használatával a következő helyen található: in-memory-oltp-perf-demo-v1.0
- 17 perces videó, amely ismerteti In-Memory OLTP-t és mutatja be a bemutatót
- In-Memory OLTP áttekintése és használati forgatókönyvei
- Teljesítmény optimalizálása In-Memory-technológiák használatával az Azure SQL-ben
- System-Versioned temporális táblák Memory-Optimized táblákkal
- A memóriaoptimalizált fájlcsoport
- Szkript az In-Memory OLTP engedélyezéséhez és a javasolt beállítások beállításához