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 Felügyelt Példány
Ez a cikk annak a fejlesztőnek készült, aki sietve szeretné megtanulni a Microsoft SQL Server és az Azure SQL Database In-Memory OLTP teljesítményfunkcióinak alapjait.
Az OLTP In-Memory esetében ez a cikk a következőket tartalmazza:
- A funkciók gyors magyarázata.
- Alapvető kódminták, amelyek implementálják a funkciókat.
Az SQL Server és az SQL Database csak kisebb eltéréseket mutat a In-Memory technológiák támogatásában.
Vadonban néhány blogger a In-Memory OLTP-re Hekatonkénthivatkozik.
A In-Memory funkciók előnyei
Az SQL Server olyan In-Memory funkciókat biztosít, amelyek nagyban javítják számos alkalmazásrendszer teljesítményét. A legegyértelmesebb szempontokat ebben a szakaszban ismertetjük.
Az OLTP funkciói (online tranzakciós feldolgozás)
Azok a rendszerek, amelyeknek egyszerre nagy mennyiségű SQL INSERT-t kell feldolgozniuk, kiváló jelöltek az OLTP-funkciókhoz.
- A teljesítménymutatók azt mutatják, hogy az 5-20-szor gyorsabb sebességbeli fejlesztések a In-Memory funkciók elfogadásával érhetők el.
Azok a rendszerek, amelyek nehéz számításokat dolgoznak fel Transact-SQL-ban, kiváló jelöltek.
- A nagy számítási feladatokhoz dedikált tárolt eljárások akár 99-szer gyorsabban is futtathatók.
Később az alábbi cikkeket tekintheti meg, amelyek az OLTP In-Memory teljesítménybeli nyereségét szemléltetik:
- Bemutató: Az In-Memory OLTP teljesítményjavítása kis léptékű bemutatót nyújt a nagyobb potenciális teljesítménynövekedésről.
- mintaadatbázis az In-Memory OLTP nagyobb méretű bemutatót biztosít.
Az Operational Analytics funkciói
In-Memory Analytics olyan SQL SELECT-ekre utal, amelyek tranzakciós adatokat összesítenek, általában egy GROUP BY záradék belefoglalásával. Az oszlopcentrikus nevű indextípus központi szerepet jelent az operatív elemzésekben.
Két fő forgatókönyv létezik:
-
Batch Operational Analytics olyan összesítési folyamatokra utal, amelyek munkaidő után vagy másodlagos hardveren futnak, és a tranzakciós adatok másolatai vannak.
- Azure Synapse Analytics a kötegelt üzemeltetési elemzésekhez is kapcsolódik.
- Valós idejű Üzemi Elemzések a tranzakciós számítási feladatokhoz használt elsődleges hardveren munkaidőben futó összesítési folyamatokra utal.
Ez a cikk az OLTP-ről szól, és nem az Elemzésről. További információ arról, hogy az oszlopcentrikus indexek hogyan hozzák az Elemzést az SQL-be:
- A Columnstore használatának első lépései valós idejű üzemeltetési elemzésekhez
- Oszlopos adattár indexek útmutatója
Oszloptár
A kiváló blogbejegyzések sorozata elegánsan magyarázza az oszlopcentrikus indexeket több szempontból. A bejegyzések többsége részletesebben ismerteti a valós idejű üzemeltetési elemzés fogalmát, amelyet a columnstore támogat. Ezeket a bejegyzéseket Sunil Agarwal, a Microsoft programmenedzsere írta 2016 márciusában.
Valós idejű működési analitika
- Real-Time Operatív elemzés In-Memory technológiai
- Real-Time Operatív Analitika – A nem fürtözött columnstore index (NCCI) áttekintése
- Real-Time Operational Analytics: Egyszerű példa nem klaszterezett oszlophalmozó index (NCCI) használatával az SQL Server 2016-ban
- Real-Time Operational Analytics: DML-műveletek és nem klaszterezett oszlopstore index (NCCI) az SQL Server 2016-ban
- Real-Time Operational Analytics: Szűrt, nem fürtözött columnstore index (NCCI)
- Real-Time Operational Analytics: Tömörítési késleltetés lehetősége nem klaszterezett columnstore index esetén (NCCI)
- Real-Time Operational Analytics: Tömörítési késleltetési opció az NCCI-vel és a teljesítmény
- Real-Time Operational Analytics: Memory-Optimized táblák és oszlopcentrikus indexek
Oszlopalapú index töredezettségmentesítése
- oszlopcentrikus index töredezettségmentesítése a REORGANIZE paranccsal
- Oszlop tárolási index egyesítési szabályzat az REORGANIZE számára
Adatok tömeges importálása
- Klaszterezett oszloptároló: Tömeges betöltés
- Csoportosított oszlopalapú index: Adatbetöltési optimalizálások – Minimális naplózás
- Fürtözött oszlopra tömörített index: Adatbetöltés optimalizálása – Párhuzamos tömeges importálás
Az In-Memory OLTP funkciói
Nézzük meg In-Memory OLTP fő jellemzőit.
Memóriaoptimalizált táblák
A T-SQL-kulcsszó MEMORY_OPTIMIZED a CREATE TABLE utasításban az, hogy a rendszer hogyan hozza létre a táblát úgy, hogy az aktív memóriában, nem pedig lemezen legyen.
A memóriaoptimalizált táblák egyetlen reprezentációval rendelkezik az aktív memóriában, a másodlagos példány pedig a lemezen.
- A lemezmásolás a kiszolgáló vagy az adatbázis leállítása, majd újraindítása után a rutinszerű helyreállításhoz szükséges. Ez a memória-plusz lemez kettősség teljesen rejtve van Ön és a kód elől.
Natívan lefordított modulok
A T-SQL-kulcsszó NATIVE_COMPILATION a CREATE PROCEDURE utasításban arra szolgál, hogy létrehozzunk egy natívan lefordított tárolt eljárást. A T-SQL-utasítások a natív proc első használatakor gépi kódra lesznek lefordítva minden alkalommal, amikor az adatbázis online állapotba kerül. A T-SQL-utasítások már nem bírják ki az összes utasítás lassú értelmezését.
- Kompiláláskor olyan eredményeket láttunk, amelyek az értelmezett feldolgozás időtartamának századrészét is elérhetik.
A natív modul csak a memóriaoptimalizált táblákra hivatkozhat, és nem hivatkozhat lemezalapú táblákra.
A natívan lefordított moduloknak három típusa van:
- Natív módon lefordított tárolt eljárások.
- Natívan lefordított, felhasználó által definiált függvények (UDF-ek), amelyek skalárisak.
- Natív módon lefordított eseményindítók.
Rendelkezésre állás az Azure SQL Database-ben
In-Memory OLTP és Columnstore az Azure SQL Database-ben érhető el. További információ: Teljesítmény optimalizálása az SQL DatabaseIn-Memory technológiáinak használatával.
1. Kompatibilitási szint biztosítása >= 130
Ez a szakasz számozott szakaszok sorozatát indítja el, amelyek együttesen mutatják be az In-Memory OLTP-funkciók implementálásához használható Transact-SQL szintaxist.
Először is fontos, hogy az adatbázis kompatibilitási szintje legalább 130 legyen. A következő a T-SQL-kód, amely az aktuális adatbázis jelenlegi kompatibilitási szintjét jeleníti meg.
SELECT d.compatibility_level
FROM sys.databases as d
WHERE d.name = Db_Name();
A következő a T-SQL-kód, amely szükség esetén frissíti a szintet.
ALTER DATABASE CURRENT
SET COMPATIBILITY_LEVEL = 130;
2. Emelés pillanatképre
Ha egy tranzakció lemezalapú táblát és memóriaoptimalizált táblát is magában foglal, akkor a tárolók közötti tranzakció. Egy ilyen tranzakcióban elengedhetetlen, hogy a tranzakció memóriaoptimalizált része a SNAPSHOT nevű tranzakcióelkülönítési szinten működjön.
Ha megbízhatóan szeretné érvényesíteni ezt a szintet a tárolók közötti tranzakció memóriaoptimalizált tábláihoz, módosítsa az adatbázis-beállítást a következő T-SQL végrehajtásával.
ALTER DATABASE CURRENT
SET MEMORY_OPTIMIZED_ELEVATE_TO_SNAPSHOT = ON;
3. Optimalizált FILEGROUP létrehozása
A Microsoft SQL Serveren a memóriaoptimalizált tábla létrehozása előtt először létre kell hoznia egy FILEGROUP fájlt, amelyet a CONTAINS MEMORY_OPTIMIZED_DATA deklarál. A FILEGROUP hozzá van rendelve az adatbázishoz. További részletek:
Az Azure SQL Database-ben nem kell ilyen FILEGROUP-t létrehozni, és nem is lehet létrehozni.
Az alábbi T-SQL-példaszkript lehetővé teszi az adatbázist In-Memory OLTP számára, és konfigurálja az összes javasolt beállítást. Az SQL Serverrel és az Azure SQL Database-sel is működik: enable-in-memory-oltp.sql.
Vegye figyelembe, hogy a MEMORY_OPTIMIZED_DATA-fájlcsoporttal rendelkező adatbázisok esetében nem minden SQL Server-funkció támogatott. A korlátozásokkal kapcsolatos részletekért lásd: nem támogatott SQL Server-szolgáltatások In-Memory OLTP-
4. Memóriaoptimalizált táblázat létrehozása
A kulcsfontosságú Transact-SQL kulcsszó a MEMORY_OPTIMIZED kulcsszó.
CREATE TABLE dbo.SalesOrder
(
SalesOrderId integer not null IDENTITY
PRIMARY KEY NONCLUSTERED,
CustomerId integer not null,
OrderDate datetime not null
)
WITH
(MEMORY_OPTIMIZED = ON,
DURABILITY = SCHEMA_AND_DATA);
Transact-SQL INSERT és SELECT utasítás egy memóriaoptimalizált táblához ugyanaz, mint egy normál táblához.
ALTER TABLE Memory-Optimized táblák esetén
ALTER TABLE... Az ADD/DROP képes oszlopokat hozzáadni vagy eltávolítani egy memóriaoptimalizált táblából vagy indexből.
- A CREATE INDEX és a DROP INDEX nem futtatható memóriaoptimalizált táblán, használja az ALTER TABLE ... ADD/DROP INDEX helyett.
- További információ: Memory-Optimized táblák módosítása.
A memóriaoptimalizált táblák és indexek megtervezése
- Memory-Optimized táblák indexei
- Transact-SQL In-Memory OLTP- által nem támogatott szerkezetek
5. Natívan lefordított tárolt eljárás létrehozása (natív proc)
A kulcsfontosságú kulcsszó a NATIVE_COMPILATION.
CREATE PROCEDURE ncspRetrieveLatestSalesOrderIdForCustomerId
@_CustomerId INT
WITH
NATIVE_COMPILATION,
SCHEMABINDING
AS
BEGIN ATOMIC
WITH
(TRANSACTION ISOLATION LEVEL = SNAPSHOT,
LANGUAGE = N'us_english')
DECLARE @SalesOrderId int, @OrderDate datetime;
SELECT TOP 1
@SalesOrderId = s.SalesOrderId,
@OrderDate = s.OrderDate
FROM dbo.SalesOrder AS s
WHERE s.CustomerId = @_CustomerId
ORDER BY s.OrderDate DESC;
RETURN @SalesOrderId;
END;
A SCHEMABINDING kulcsszó azt jelenti, hogy a natív eljárásban hivatkozott táblákat nem lehet törölni, hacsak a natív eljárást nem törlik először. Részletekért lásd: Natívan lefordított tárolt eljárások létrehozása.
Vegye figyelembe, hogy nem kell natívan lefordított tárolt eljárást létrehoznia a memóriaoptimalizált táblák eléréséhez. A hagyományos tárolt eljárások és alkalmi kötegek memóriaoptimalizált tábláira is hivatkozhat.
6. Hajtsa végre a natív eljárást
Töltse fel a táblát két adatsorsal.
INSERT into dbo.SalesOrder
( CustomerId, OrderDate )
VALUES
( 42, '2013-01-13 03:35:59' ),
( 42, '2015-01-15 15:35:59' );
A natívan lefordított tárolt eljárásra irányuló EXECUTE-hívás a következő.
DECLARE @LatestSalesOrderId int, @mesg nvarchar(128);
EXECUTE @LatestSalesOrderId =
ncspRetrieveLatestSalesOrderIdForCustomerId 42;
SET @mesg = CONCAT(@LatestSalesOrderId,
' = Latest SalesOrderId, for CustomerId = ', 42);
PRINT @mesg;
Itt van a tényleges PRINT kimenet:
-- 2 = Latest SalesOrderId, for CustomerId = 42
Útmutató a dokumentációhoz és a következő lépésekhez
Az előző egyszerű példák alapot nyújtanak az In-Memory OLTP fejlettebb funkcióinak megismeréséhez. Az alábbi szakaszok útmutatást nyújtanak azokról a különleges szempontokról, amelyeket érdemes lehet megismernie, és hogy hol láthatja az egyes részletek részleteit.
Hogyan működnek az OLTP-funkciók sokkal gyorsabban In-Memory segítségével?
Az alábbi alszakaszok röviden bemutatják, hogyan működnek az In-Memory OLTP-funkciók belsőleg a jobb teljesítmény érdekében.
A memóriaoptimalizált táblák gyorsabb teljesítménye
Kettős természet: A memóriaoptimalizált táblák kettős természetűek: az egyik az aktív memóriában, a másik a merevlemezen. Minden tranzakció a tábla mindkét ábrázolása számára le van kötve. A tranzakciók a sokkal gyorsabb aktív memóriaábrázoláson alapulnak. A memóriaoptimalizált táblák kihasználják az aktív memória nagyobb sebességét a lemezhez képest. Az aktív memória nagyobb fürgesége továbbá lehetővé teszi egy fejlettebb táblázatszerkezet kialakítását, amely a sebességre van optimalizálva. A fejlett struktúra oldal nélküli is, így elkerüli a reteszek és a spinlockok terhelését és versengését.
Nincs zárolás: A memóriaoptimalizált tábla egy optimista megközelítést alkalmaz az adatintegritás, valamint az egyidejűség és a magas átviteli sebesség versengő céljai között. A tranzakció során a tábla nem helyez zárolásokat a frissített adatsorok egyik verziójára sem. Ez jelentősen csökkentheti a versengést egyes nagy mennyiségű rendszerekben.
Sorverziók: A memóriaoptimalizált táblázat a zárolások helyett egy frissített sor új verzióját adja hozzá magában a táblában, nem pedig a tempdb-ben. Az eredeti sor a tranzakció véglegesítése után marad. A tranzakció során más folyamatok is beolvashatják a sor eredeti verzióját.
- Ha egy sor több verziója is létrejön egy lemezalapú táblához, a sorverziók ideiglenesen a tempdb-ben lesznek tárolva.
Kevesebb naplózás: A frissített sorok előtti és utáni verziók a memóriaoptimalizált táblázatban vannak tárolva. A sorok párja a naplófájlba hagyományosan írt információk nagy részét tartalmazza. Ez lehetővé teszi, hogy a rendszer kevesebb információt és ritkábban írjon a naplóba. A tranzakciós integritás azonban biztosított.
A natív procek gyorsabb teljesítménye
Ha egy szabályosan értelmezett tárolt eljárást natívan lefordított tárolt eljárásmá alakít át, az jelentősen csökkenti a futtatás során végrehajtandó utasítások számát.
In-Memory funkciók kompromisszumoi
Ahogy a számítástechnikában is gyakran előfordul, a In-Memory funkciók által biztosított teljesítménynövekedés kompromisszumot jelent. A jobb funkciók olyan előnyöket biztosítanak, amelyek értékesebbek, mint a funkció többletköltségei. A kompromisszumokről a következő címen talál átfogó útmutatást:
A szakasz többi része felsorol néhány fontos tervezési és kompromisszumos szempontot.
Memóriaoptimalizált táblák kompromisszumoi
Memória becslése: Meg kell becsülnie a memóriaoptimalizált táblázat által felhasznált aktív memória mennyiségét. A számítógéprendszernek megfelelő memóriakapacitással kell rendelkeznie egy memóriaoptimalizált tábla üzemeltetéséhez. További részletek:
- Memóriahasználati monitorozása és hibaelhárítása
- Memory-Optimized táblák memóriakövetelményeinek becslése
- táblázat- és sorméret Memory-Optimized táblákban
Nagy méretű tábla particionálása: A nagy memóriaigény kielégítésének egyik módja az, hogy a nagy méretű táblát olyan memóriabeli részekre particionáljuk, amelyek aktuális adatsorokat tárolnak, míg a lemezen lévő egyéb részek archivált sorokat tárolnak (például a teljes körűen kiszállított és befejezett értékesítési rendeléseket). Ez a particionálás manuális tervezési és megvalósítási folyamat. Lát:
A natív procek kompromisszumoi
- A natívan lefordított tárolt eljárások nem férnek hozzá a lemezalapú táblákhoz. A natív proc csak memóriaoptimalizált táblákat tud elérni.
- Amikor egy natív proc a kiszolgáló vagy adatbázis legutóbbi online állapotba helyezése után fut először, a natív procet egyszer újra kell állítani. Ez késést okoz a natív proc futtatása előtt.
Speciális szempontok a memóriaoptimalizált táblákhoz
Memory-Optimized Táblák indexei bizonyos szempontból eltérnek a hagyományos lemezen lévő táblák indexeitől. A kivonatindexek csak memóriaoptimalizált táblákon érhetők el.
Gondoskodnia kell arról, hogy elegendő aktív memória legyen a tervezett memóriaoptimalizált táblához és indexeihez. Lát:
A memóriaoptimalizált tábla meghatározható a TARTÓSSÁG = SCHEMA_ONLY értékkel.
- Ez a szintaxis azt jelzi a rendszernek, hogy az adatbázis offline állapotba helyezésekor minden adatot elvet a memóriaoptimalizált táblából. Csak a tábladefiníció kerül tárolásra.
- Amikor az adatbázis újra online állapotba kerül, a memóriaoptimalizált táblázat vissza lesz töltve az aktív memóriába, üres adatokkal.
- SCHEMA_ONLY táblák kiváló alternatívát jelenthetnek a #temporary táblák helyett a tempdb-ben, ha több ezer sorról van szó.
A táblaváltozók memóriaoptimalizáltként is deklarálhatók. Lát:
A natívan lefordított modulok speciális szempontjai
Az Transact-SQL keresztül elérhető natívan lefordított modulok típusai a következők:
- Natívan lefordított tárolt eljárások (natív eljárások).
- Natívan lefordított skaláris, felhasználó által definiált függvények.
- Natívan lefordított eseményindítók (natív triggerek).
- Csak a natívan lefordított triggerek engedélyezettek a memóriaoptimalizált táblákban.
- Natívan lefordított táblaértékű függvények.
A natívan lefordított, felhasználó által definiált függvény (UDF) gyorsabban fut, mint egy értelmezett UDF. Íme néhány megfontolandó szempont az UDF-ekkel kapcsolatban:
- Ha a T-SQL SELECT egy UDF-et használ, a rendszer mindig egyszer hívja meg az UDF-et a visszaadott soronként.
- Az UDF-ek soha nem futnak beágyazottan, helyette mindig meghívásra kerülnek.
- Az összeállított különbségtétel kevésbé jelentős, mint az összes UDF-hez kapcsolódó, ismétlődő hívások miatt fellépő többletterhelés.
- Az UDF-hívások többletterhelése azonban gyakorlati szinten gyakran elfogadható.
A natív UDF-ek teljesítményével kapcsolatos tesztelési adatokért és magyarázatért lásd:
Dokumentációs útmutató memóriaoptimalizált táblákhoz
A memóriaoptimalizált táblákra vonatkozó speciális szempontokat ismertető további cikkek:
-
Áttelepítés In-Memory OLTP-
- Annak meghatározása, hogy egy táblázatot vagy tárolt eljárást át kell-e vinni a(z) In-Memory OLTP rendszerbe.
- Az SQL Server Management Studio tranzakcióteljesítmény-elemzési jelentése segít annak kiértékelésében, hogy In-Memory OLTP javítja-e az adatbázis-alkalmazás teljesítményét.
- A Memóriaoptimalizálási tanácsadó segítségével segíthet migrálni a lemezalapú adatbázistáblát az OLTP In-Memory-re.
-
Memory-Optimized táblák biztonsági mentése, visszaállítása és helyreállítása
- A memóriaoptimalizált táblák által használt tárterület sokkal nagyobb lehet, mint a memória mérete, és hatással van az adatbázis biztonsági mentésének méretére.
-
tranzakciók Memory-Optimized táblákkal
- A T-SQL újrapróbálkozáshoz használt logikájára vonatkozó információkat tartalmaz a memóriaoptimalizált táblákon végrehajtott tranzakciókhoz.
-
Transact-SQL In-Memory OLTP- támogatása
- Támogatott és nem támogatott T-SQL- és adattípusok memóriaoptimalizált táblázatos és natív procekhez.
- Adatbázis kötése Memory-Optimized táblákkal egy erőforráskészlethez, amely egy választható speciális szempontot tárgyal.
Dokumentációs útmutató natív procekhez
A következő cikk, valamint a tartalomjegyzékben (TOC) található gyermekcikkek ismertetik a natívan lefordított tárolt eljárások részleteit.
Kapcsolódó hivatkozások
- Első cikk: In-Memory OLTP (In-Memory optimalizálás)
Az alábbi cikkek kódot kínálnak az In-Memory OLTP használatával elérhető teljesítménynövekedés bemutatásához:
- Bemutató: Az In-Memory OLTP teljesítményjavítása kis léptékű bemutatót nyújt a nagyobb potenciális teljesítménynövekedésről.
- mintaadatbázis az In-Memory OLTP nagyobb méretű bemutatót biztosít.