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 2016 (13.x) és újabb verziók
felügyelt Azure SQL-példány
A memóriaoptimalizált táblák rendszerverziójú temporális tábláinak költséghatékony megoldást nyújtanak olyan forgatókönyvekhez, ahol adatnaplózásra és időpontelemzésre van szükség az In-Memory OLTP-számítási feladatokkal gyűjtött adatokon felül.
Jegyzet
A memóriaoptimalizált időtáblák csak az SQL Serverben és az Azure SQL Managed Instance-ben érhetők el. A memóriaoptimalizált táblák és az időtáblák egymástól függetlenül érhetők el az Azure SQL Database-ben.
Áttekintés
A rendszer által verziózott időbeli táblák automatikusan megőrzik az adatváltozások teljes előzményeit, és kényelmes Transact-SQL bővítményeket tehetnek elérhetővé a pont-idő elemzéshez. Egy tipikus forgatókönyvben az adatelőzmények hosszú ideig (több hónapig, akár évekig) megmaradnak, annak ellenére, hogy nem kérdezik le rendszeresen.
Az adatnaplózás és az időalapú elemzés különböző környezetekben igényelhető, különösen olyan OLTP-rendszerekben, amelyek rendkívül sok kérést dolgoznak fel, és ahol In-Memory OLTP-technológiát használnak. A memóriaoptimalizált táblák időbeli forgatókönyvekben való használata azonban kihívást jelent, mivel a létrehozott előzményadatok nagy száma gyakran meghaladja a rendelkezésre álló RAM korlátját. Ugyanakkor a RAM használata nem optimális megoldás az írásvédett előzményadatok tárolására, mivel ezek az adatok ritkábban érhetők el, ahogy öregszenek.
A memóriaoptimalizált táblák rendszerverziójú temporális táblái nagy tranzakciós átviteli sebességet és zárolásmentes egyidejűséget biztosítanak. Lehetővé teszik nagy mennyiségű előzményadat tárolását a memóriabeli táblák használatával az aktuális adatok (a temporális tábla) tárolására, valamint lemezalapú táblák használatával az előzményadatok tárolására. A DML-műveletekre gyakorolt hatás csökkenthető egy belső, automatikusan létrehozott, memóriaoptimalizált előkészítési táblázat használatával, amely a legutóbbi előzményeket tárolja, és lehetővé teszi a DLL-ek natív fordítású kódból történő végrehajtását.
Az alábbi ábra ezt az architektúrát szemlélteti.
Megvalósítás részletei
Rendszerverziójú memóriaoptimalizált tábla létrehozásakor vegye figyelembe az alábbi szempontokat. A szintaxis lehetőségeiről és egy példáról lásd a következőt: CREATE TABLE.
Csak a tartós memóriaoptimalizált táblák rendszerváltozatképessé tehetők (
DURABILITY = SCHEMA_AND_DATA).A memóriaoptimalizált rendszerverziós tábla előzménytáblájának lemezalapúnak kell lennie, függetlenül attól, hogy a végfelhasználó vagy a rendszer hozta létre.
A csak az aktuális memóriabeli táblát érintő lekérdezések használhatók natívan lefordított T-SQL-modulokban. A
FOR SYSTEM TIMEzáradékot használó időbeli lekérdezések natív fordítású modulokban nem támogatottak. AFOR SYSTEM TIMEzáradékot memóriaoptimalizált táblák támogatják alkalmi lekérdezésekben és nem natív modulokban.A
SYSTEM_VERSIONING = ONesetén a rendszer automatikusan létrehoz egy belső, memóriaoptimalizált átmeneti táblát, amely elfogadja a legújabb rendszerverziójú módosításokat, amelyek egy aktuális memóriaoptimalizált tábla frissítési és törlési műveleteinek eredményei.A belső memóriaoptimalizált előkészítési táblából származó adatokat egy aszinkron adatöblítési feladat rendszeresen áthelyezi a lemezalapú előzménytáblába. Ez az adatöblítési mechanizmus gondoskodik arról, hogy a belső memóriapufferek a szülőobjektumok memóriahasználatának kevesebb mint 10 százalékánál maradjanak. A memóriaoptimalizált rendszerverziójú temporális tábla teljes memóriahasználatát nyomon követheti a sys.dm_db_xtp_memory_consumerslekérdezésével, valamint a belső memóriaoptimalizált előkészítési táblázat és az aktuális ideiglenes tábla adatainak összegzésével.
Az adatöblítést manuálisan is végrehajthatja a sp_xtp_flush_temporal_historyfuttatásával.
Ha
SYSTEM_VERSIONING = OFF, vagy ha egy rendszerverziós tábla sémája oszlopok hozzáadásával, elvetésével vagy módosításával módosul, a belső átmeneti puffer teljes tartalma a lemezalapú előzménytáblába kerül.Az előzményadatok lekérdezése hatékonyan a pillanatfelvétel szintű elkülönítés alatt történik, és mindig visszaadja a memóriában lévő puffer és a lemezen lévő táblázat egyesítését duplikációk nélkül.
ALTER TABLEtáblasémát belsőleg módosító műveleteknek adatöblítést kell végrehajtaniuk, ami meghosszabbíthatja a művelet időtartamát.
A belső memóriaoptimalizált előkészítési táblázat
A rendszer létrehoz egy belső memóriaoptimalizált előkészítési táblát a DML-műveletek optimalizálásához.
A tábla neve a következő formátumban jön létre:
Memory_Optimized_History_Table_<object_id>ahol<object_id>az aktuális időbeli tábla azonosítója.A táblázat replikálja az aktuális temporális tábla sémáját, valamint egy bigint oszlopot. Ez a plusz oszlop garantálja a belső előzménypufferbe áthelyezett sorok egyediségét.
Az extra oszlop a következő névformátummal rendelkezik:
Change_ID[<suffix>], ahol a<suffix>opcionálisan hozzáadódik abban az esetben, ha a tábla már rendelkezikChange_IDoszlopmal.A rendszerverziójú memóriaoptimalizált táblák maximális sormérete 8 bájttal csökken az előkészítési táblázat extra bigint oszlopa miatt. Az új maximális érték most 8052 bájt.
A belső memóriaoptimalizált előkészítési táblázat nem jelenik meg az SQL Server Management Studio Object Explorerében.
A táblával kapcsolatos metaadatok, valamint az aktuális temporális táblával való kapcsolat a sys.internal_tablestalálható.
Az adatöblítési feladat
Az adatöblítés egy rendszeresen aktivált feladat, amely ellenőrzi, hogy a memóriaoptimalizált táblák megfelelnek-e az adatáthelyezés memóriaméret-alapú feltételének. Az adatáthelyezés akkor kezdődik, amikor a belső átmeneti tábla memóriahasználata eléri az aktuális időtábla memóriahasználatának nyolc százalékát.
Az adatöblítési feladat rendszeres aktiválása a meglévő számítási feladattól függően eltérő ütemezéssel történik. Nagy terhelés esetén a feladat 5 másodpercenként fut. Könnyű terhelés esetén a gyakoriság egypercesre emelkedik. Minden olyan belső memóriaoptimalizált előkészítési táblázathoz, amely tisztítást igényel, egy szál jön ki.
Az adatöblítés törli az összes rekordot a memóriában lévő belső pufferből, amely régebbi a legrégebbi jelenleg futó tranzakciónál, hogy ezeket a rekordokat a lemezalapú előzménytáblába helyezze át.
Az adatöblítést a sp_xtp_flush_temporal_history futtatásával és a séma és a tábla nevének megadásával hajthatja végre:
EXEC sys.sp_xtp_flush_temporal_history <schema_name>, <object_name>;
A rendszer ugyanazt az adatáthelyezési folyamatot hívja meg, mint amikor a rendszer belső ütemezés szerint hajtja végre az adatöblítési feladatot.
Kapcsolódó tartalom
- Temporális táblák
- Bevezetés a rendszerverziójú temporális táblák használatbavétele
- Időbeli táblázatok használati forgatókönyvei
- Temporális táblarendszer konzisztenciájának ellenőrzése
- partíció temporális táblákkal
- Időbeli táblázatokkal kapcsolatos megfontolások és korlátozások
- Temporális tábla biztonság
- Az előzményadatok megőrzésének kezelése rendszerverziójú időbeli táblákban
- Időbeli tábla metaadatnézetei és függvényei