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 2025 (17.x) a novější verze
Pokud je v SQL Serveru 2022 (16.x) a starších verzích povolená In-Memory OLTP pro databázi, není možné odebrat poslední kontejner optimalizovaný pro paměť a skupinu souborů optimalizovanou pro paměť, a to ani v případě, že jsou odstraněny všechny objekty OLTP In-Memory. V důsledku toho se modul In-Memory OLTP bude dál spouštět, když se nepoužívá.
Počínaje SYSTÉMEM SQL Server 2025 (17.x) lze modul In-Memory OLTP zastavit tak, že zcela odeberete všechny kontejnery a skupiny souborů optimalizované pro paměť v databázích bez zbývajících In-Memory objektů OLTP.
Odebrání kontejnerů optimalizovaných pro paměť a skupiny souborů a zastavení modulu In-Memory OLTP:
Jako ověřovací krok se připojte k databázi a spusťte následující dotaz, abyste potvrdili, že je v databázi nasazený modul In-Memory OLTP (XTP):
SELECT deployment_state, deployment_state_desc FROM sys.dm_db_xtp_undeploy_status;deployment_statePokud je sloupec 1 nebo 2, nasadí se In-Memory modul OLTP a můžete pokračovat následujícími kroky.deployment_statePokud je sloupec 0, modul In-Memory OLTP není nasazený v aktuální databázi nebo je už zastavený a zbytek tohoto článku se nepoužije.Zahoďte všechny objekty OLTP In-Memory v databázi, včetně tabulek a typů tabulek optimalizovaných pro paměť a nativně zkompilovaných uložených procedur.
Upozornění
Tento krok může způsobit trvalou ztrátu dat v tabulkách optimalizovaných pro paměť v aktuální databázi. Než budete pokračovat, ujistěte se, že data nejsou potřebná, a vytvořte zálohu databáze.
Pokud chcete najít In-Memory objekty OLTP v databázi, spusťte následující příkazy T-SQL:
USE [<database-name-placeholder>]; /* memory-optimized tables */ SELECT object_id, OBJECT_SCHEMA_NAME(object_id) AS schema_name, name AS table_name FROM sys.tables WHERE is_memory_optimized = 1; /* natively compiled modules */ SELECT object_id, OBJECT_SCHEMA_NAME(object_id) AS schema_name, OBJECT_NAME(object_id) AS module_name FROM sys.all_sql_modules WHERE uses_native_compilation = 1; /* memory-optimized table types */ SELECT SCHEMA_NAME(schema_id) AS type_schema_name, name AS type_name, OBJECT_NAME(type_table_object_id) AS type_table_name FROM sys.table_types WHERE is_memory_optimized = 1;Další informace naleznete v tématu DROP TABLE, DROP PROCEDURE a DROP TYPE.
Pomocí příkazu
ALTER DATABASE ... REMOVE FILEodeberte všechny kontejnery optimalizované pro paměť. Další informace naleznete v tématu ALTER DATABASE File and Filegroup Options. Kontejnery optimalizované pro paměť můžete také odebrat pomocí stránky Soubory v dialogovém okně Vlastnosti databáze pro vaši databázi v aplikaci SQL Server Management Studio (SSMS).Odebrání posledního kontejneru optimalizovaného pro paměť pro databázi spustí odebrání modulu In-Memory OLTP. Jedná se o dlouhotrvající operaci, která může vyžadovat další kroky. Další informace najdete v části Kroky dokončení posledního odebrání kontejneru optimalizovaného pro paměť dále v tomto článku.
Pokud zrušíte nebo přerušíte dlouhotrvající
ALTER DATABASE ... REMOVE FILEpříkaz při odebírání posledního kontejneru optimalizovaného pro paměť, může být odebrání částečně dokončené. Odebrání dokončíte provedenímALTER DATABASE ... REMOVE FILEpříkazu později.Pomocí příkazu odeberte skupinu
ALTER DATABASE ... REMOVE FILEGROUPsouborů optimalizovanou pro paměť nebo pomocí stránky Filegroups v dialogovém okně Vlastnosti databáze v nástroji SSMS.
Odebrání kontejnerů optimalizovaných pro paměť a skupiny souborů je úspěšné a modul In-Memory OLTP se zastaví, když je hodnota ve deployment_state sloupci sys.dm_db_xtp_undeploy_status 0.
Poznámka:
Odebrání kontejneru optimalizovaného pro paměť není podporováno, pokud má databáze žádné snímky databáze. Před odebráním kontejnerů optimalizovaných pro paměť odstraňte všechny snímky.
Kroky k dokončení odebrání posledního kontejneru optimalizovaného pro paměť
Pokud se ALTER DATABASE ... REMOVE FILE příkaz pro odebrání posledního kontejneru optimalizovaného pro paměť nedokončí okamžitě, vyžadují se další kroky.
Zobrazení dynamické správy sys.dm_db_xtp_undeploy_status poskytuje stav procesu odebrání modulu OLTP In-Memory. V následujících krocích použijte tento dotaz k určení aktuálního stavu a požadovaných akcí:
SELECT deployment_state,
deployment_state_desc,
undeploy_lsn,
start_of_log_lsn
FROM sys.dm_db_xtp_undeploy_status;
deployment_statePokud je hodnota 3 a hodnota veundeploy_lsnsloupci je 0, spusťte následující příkaz:CHECKPOINT;Pokud je hodnota
deployment_state3 a hodnota ve sloupciundeploy_lsnje jiná než 0, proces odebrání kontejneru čeká, až číslo sekvence protokolu (LSN) ve sloupcistart_of_log_lsnpřekročí hodnotu LSN ve sloupciundeploy_lsn. To vyžaduje zkrácení transakčního protokolu. Pro zkrácení protokolu:Spusťte následující příkaz:
CHECKPOINT;Pokud chcete přejít
start_of_log_lsnnad rámecundeploy_lsn, možná budete muset tento příkaz spustit několikrát, počkat minutu po každém spuštění příkazu.Pokud databáze používá model úplného nebo hromadně protokolovanéhoobnovení, pak kromě provádění
CHECKPOINTpříkazů možná budete muset určit a vyřešit důvod zpoždění zkrácení protokolu, který je hlášen ve sloupci vlog_reuse_wait_descsys.databaseszobrazení katalogu.Pokud
deployment_statehodnota po provedeníCHECKPOINTpříkazů zůstane 3, spusťte následující příkaz:SELECT name, log_reuse_wait_desc FROM sys.databases WHERE database_id = DB_ID();Jakmile znáte důvod zpoždění zkrácení protokolu, podívejte se na faktory, které mohou zpozdit zkrácení protokolu pro více informací a určete vhodný postup.
Ve aktivních databázích je transakční log obvykle zkrácen po nějaké době bez jakékoli další akce uživatele. Pokud je
log_reuse_wait_descvsys.databasesnapříkladLOG_BACKUP, pak naplánované nebo na vyžádání zálohování protokolů zkrátí protokol. Další informace naleznete v tématu Zálohování transakčního protokolu.Pokud je hodnota ve sloupci
log_reuse_wait_descrovnaNOTHING, ale hodnota ve sloupcideployment_statezůstává 3, zálohujte transakční log. Pokud chcete zkrátit transakční protokol, možná budete muset vytvořit více než jednu zálohu transakčního protokolu.
deployment_statePokud je hodnota 4, pak začátek aktivní části transakčního protokolu pokročil za LSN zrušení nasazení a proces odstraňování kontejneru čeká na konečný záznam protokolu zrušení nasazení. Ve většině případů se tento krok dokončí během několika sekund bez jakékoli další akce.Pokud databáze obsahuje repliky dostupnosti, musí být záznam o ukončení nasazení rozšířen a použit na všechny repliky. Pokud hodnota 4 přetrvává delší dobu, přečtěte si téma Určení, proč nejsou změny z primární repliky zobrazeny na sekundární replice pro skupiny dostupnosti Always On, kde najdete další informace.
deployment_statePokud je hodnota 5, proces odebrání kontejneru čeká na dokončení konečné operace kontrolního bodu XTP. Pokud chcete kontrolní bod zahájit okamžitě, spusťte následující příkaz:CHECKPOINT;Kontrolní bod XTP probíhá automaticky, jakmile se transakční protokol zvýšil o určitou prahovou hodnotu. Další informace naleznete v tématu Operace kontrolního bodu pro Memory-Optimized tabulky.
Po dokončení poslední operace kontrolního bodu XTP se odebrání posledního kontejneru optimalizovaného pro paměť úspěšně dokončí a hodnota ve
deployment_statesloupci bude 0.deployment_statePokud je hodnota 6, znamená to, žeALTER DATABASE ... REMOVE FILEpříkaz pro poslední kontejner optimalizovaný pro paměť byl zrušen nebo přerušen. Spusťte příkaz znovu a dokončete odebrání kontejneru.