Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: Förhandsversion av SQL Server 2025 (17.x) och senare versioner
Om In-Memory OLTP har aktiverats för en databas i SQL Server 2022 (16.x) och äldre versioner kan den senaste minnesoptimerade containern och den minnesoptimerade filgruppen inte tas bort även om alla In-Memory OLTP-objekt tas bort. Därför fortsätter den In-Memory OLTP-motorn att köras när den inte används.
Från och med förhandsversionen av SQL Server 2025 (17.x) kan In-Memory OLTP-motorn stoppas genom att helt ta bort alla minnesoptimerade containrar och filgrupper i databaser utan återstående In-Memory OLTP-objekt.
Ta bort de minnesoptimerade containrarna och filgruppen och stoppa In-Memory OLTP-motorn:
Som ett verifieringssteg ansluter du till databasen och kör följande fråga för att bekräfta att In-Memory OLTP-motorn (XTP) distribueras i databasen:
SELECT deployment_state, deployment_state_desc FROM sys.dm_db_xtp_undeploy_status;Om
deployment_statekolumnen är 1 eller 2 distribueras OLTP-motorn In-Memory, och du kan fortsätta med följande steg.deployment_stateOm kolumnen är 0 distribueras inte In-Memory OLTP-motorn i den aktuella databasen eller har redan stoppats och resten av den här artikeln gäller inte.Släpp alla In-Memory OLTP-objekt i databasen, inklusive minnesoptimerade tabeller och tabelltyper, och inbyggda kompilerade lagrade procedurer.
Försiktighet
Det här steget kan orsaka permanent dataförlust i de minnesoptimerade tabellerna i den aktuella databasen. Innan du fortsätter kontrollerar du att data inte behövs och gör en säkerhetskopia av databasen.
Kör följande T-SQL-instruktioner för att hitta In-Memory OLTP-objekt i en databas:
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;Mer information finns i DROP TABLE, DROP PROCEDURE och DROP TYPE.
Ta bort alla minnesoptimerade containrar med hjälp av -instruktionen
ALTER DATABASE ... REMOVE FILE. Mer information finns i ALTER DATABASE-fil- och filgruppsalternativ. Du kan också ta bort minnesoptimerade containrar med hjälp av sidan Filer i dialogrutan Databasegenskaper för databasen i SQL Server Management Studio (SSMS).Om du tar bort den senaste minnesoptimerade containern för databasen startas borttagningen av In-Memory OLTP-motorn. Det här är en tidskrävande åtgärd som kan kräva ytterligare steg. Mer information finns i Steg för att slutföra den senaste minnesoptimerade containerborttagningen senare i den här artikeln.
Om du avbryter eller stoppar en tidskrävande
ALTER DATABASE ... REMOVE FILEinstruktion medan du tar bort den sista minnesoptimerade containern kan borttagningen vara endast delvis genomförd. Om du vill slutföra borttagningen kan du köra -instruktionenALTER DATABASE ... REMOVE FILEsenare.Ta bort den minnesoptimerade filgruppen med instruktionen
ALTER DATABASE ... REMOVE FILEGROUPeller använd sidan Filgrupper i dialogrutan Databasegenskaper i SSMS.
Borttagningen av de minnesoptimerade containrarna och filgruppen lyckas och In-Memory OLTP-motorn stoppas när värdet i deployment_state kolumnen i sys.dm_db_xtp_undeploy_status är 0.
Anmärkning
Minnesoptimerad borttagning av containrar stöds inte när databasen har några ögonblicksbilder av databasen. Ta bort alla ögonblicksbilder innan du tar bort minnesoptimerade containrar.
Steg för att slutföra den sista minnesoptimerade containerborttagningen
Om instruktionen ALTER DATABASE ... REMOVE FILE för att ta bort den senaste minnesoptimerade containern inte slutförs omedelbart krävs ytterligare steg.
Sys.dm_db_xtp_undeploy_status DMV ger status för In-Memory OLTP-motorns borttagningsprocess. I följande steg använder du den här frågan för att fastställa aktuell status och nödvändiga åtgärder:
SELECT deployment_state,
deployment_state_desc,
undeploy_lsn,
start_of_log_lsn
FROM sys.dm_db_xtp_undeploy_status;
Om värdet
deployment_stateär 3 och värdet iundeploy_lsnkolumnen är 0 kör du följande kommando:CHECKPOINT;deployment_stateOm värdet är 3 och värdet iundeploy_lsnkolumnen är annat än 0 väntar containerborttagningsprocessen på att loggsekvensnumret (LSN) istart_of_log_lsnkolumnen ska gå längre än LSN-värdet iundeploy_lsnkolumnen. Detta kräver att transaktionsloggen avkortas. Så här trunkerar du loggen:Kör följande kommando:
CHECKPOINT;För att gå vidare
start_of_log_lsnförbiundeploy_lsnkan du behöva köra det här kommandot flera gånger och vänta en minut efter varje kommandokörning.Om databasen använder Fullständig eller Massloggadåterställningsmodell, kan du, förutom att köra
CHECKPOINT-kommandon, behöva fastställa och åtgärda orsaken till fördröjningen i loggtrunkeringen, som rapporteras ilog_reuse_wait_desc-kolumnen isys.databases-katalogvyn.Om
deployment_statevärdet förblir 3 efter att kommandonaCHECKPOINThar körts kör du följande instruktion:SELECT name, log_reuse_wait_desc FROM sys.databases WHERE database_id = DB_ID();När du vet orsaken till fördröjningen av loggtrunkeringen kan du läsa Faktorer som kan fördröja loggtrunkeringen för mer information och för att fastställa lämplig åtgärd.
I aktiva databaser trunkeras transaktionsloggen vanligtvis efter en tid utan ytterligare användaråtgärder. Om
log_reuse_wait_descisys.databasestill exempel ärLOG_BACKUP, trunkerar schemalagda eller på begäran loggsäkerhetskopior loggen. Mer information finns i Säkerhetskopiera en transaktionslogg.Om värdet i
log_reuse_wait_desckolumnen ärNOTHING, men värdet ideployment_statekolumnen förblir 3, säkerhetskopierar du transaktionsloggen. Om du vill trunkera transaktionsloggen kan du behöva göra mer än en säkerhetskopiering av transaktionsloggen.
deployment_stateOm värdet är 4 har starten av den aktiva delen av transaktionsloggen avancerat bortom LSN för odistribution och processen för borttagning av containrar väntar på den sista avdistributionsloggposten. I de flesta fall slutförs det här steget inom några sekunder utan någon ytterligare åtgärd.Om databasen har tillgänglighetsrepliker måste avdistributionsposten spridas och tillämpas på alla repliker. Om värdet 4 bevaras under en längre tid kan du läsa Ta reda på varför ändringar från den primära repliken inte återspeglas på den sekundära repliken för en AlwaysOn-tillgänglighetsgrupp för mer information.
Om värdet
deployment_stateär 5 väntar containerborttagningsprocessen på att den sista XTP-kontrollpunktsåtgärden ska slutföras. Starta en kontrollpunkt omedelbart genom att köra följande kommando:CHECKPOINT;En XTP-kontrollpunkt inträffar automatiskt när transaktionsloggen har ökat med ett visst tröskelvärde. Mer information finns i Kontrollpunktsåtgärd för Memory-Optimized tabeller.
När den sista XTP-kontrollpunktsåtgärden
deployment_stateär klar slutförs borttagningen av den senaste minnesoptimerade containern och värdet i kolumnen blir 0.Om värdet
deployment_stateär 6 innebär det att instruktionenALTER DATABASE ... REMOVE FILEför den senaste minnesoptimerade containern avbröts. Utför instruktionen igen för att slutföra borttagningen av containern.