Krymp en fil
gäller för:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Den här artikeln beskriver hur du krymper en data- eller loggfil i SQL Server med hjälp av SQL Server Management Studio eller Transact-SQL.
Krympande datafiler återställer utrymme genom att flytta sidor med data från slutet av filen till obemannat utrymme närmare filens framsida. När tillräckligt med ledigt utrymme skapas i slutet av filen kan datasidor i slutet av filen frigöras och returneras till filsystemet.
Begränsningar
- Den primära datafilen kan inte göras mindre än storleken på den primära filen i den
model
databasen.
Rekommendationer
En krympningsåtgärd är mest effektiv efter en åtgärd som skapar en stor mängd oanvänt lagringsutrymme, till exempel en stor DELETE-instruktion, trunkeringstabell eller en drop table-åtgärd.
De flesta databaser kräver lite ledigt utrymme för regelbundna dagliga åtgärder. Om du krymper en databasfil upprepade gånger och märker att databasstorleken växer igen, anger detta att ledigt utrymme krävs för vanliga åtgärder. I dessa fall är det en bortkastad åtgärd att upprepade gånger krympa databasfilen. Autogrow-händelser som krävs för att utöka databasfilen är ett hinder för prestanda.
Data som flyttas för att krympa en fil kan spridas till valfri tillgänglig plats i filen. Detta orsakar indexfragmentering och kan sänka prestandan för frågor som söker i ett intervall av indexet. Om du vill eliminera fragmenteringen bör du överväga att återskapa indexen i filen efter krympning.
Om du inte har ett specifikt krav ska du inte ange alternativet AUTO_SHRINK databas till PÅ.
Anmärkningar
Krympningsåtgärder som pågår kan blockera andra frågor i databasen och kan blockeras av frågor som redan pågår. I SQL Server 2022 (16.x) introducerades krympfilsåtgärder med WAIT_AT_LOW_PRIORITY alternativ. Den här funktionen är ett nytt alternativ för DBCC SHRINKDATABASE
och DBCC SHRINKFILE
. Om en ny krympningsåtgärd i WAIT_AT_LOW_PRIORITY-läge inte kan hämta nödvändiga lås på grund av en tidskrävande fråga som redan pågår, kommer krympningsåtgärden slutligen att nå tidsgränsen efter en minut och avslutas tyst, vilket förhindrar att andra frågor blockeras. WAIT_AT_LOW_PRIORITY gäller för datafiler (.mdf & .ndf). Den gäller inte för transaktionsloggfiler. Mer information finns i DBCC SHRINKFILE.
Behörigheter
Kräver medlemskap i sysadmin bestämd serverroll eller db_owner bestämd databasroll.
Använda SQL Server Management Studio (SSMS)
Krympa en data- eller loggfil med hjälp av SSMS
I Object Exploreransluter du till en instans av SQL Server Database Engine och expanderar sedan den instansen.
Expandera Databaser och högerklicka sedan på den databas som du vill krympa.
Peka på Uppgifter, peka på Krympoch välj sedan Filer.
Database
Visar namnet på den valda databasen.Filtyp
Välj filtypen för filen. De tillgängliga alternativen är Data- och Log-filer. Standardvalet är Data. Om du väljer en annan filgruppstyp ändras markeringen i de andra fälten i enlighet med detta.Filgrupp
Välj en filgrupp i listan över filgrupper som är associerade med den valda Filtyp ovan. Om du väljer en annan filgrupp ändras markeringen i de andra fälten i enlighet med detta.Filnamn
Välj en fil i listan över tillgängliga filer av den valda filgruppen och filtypen.Plats
Visar den fullständiga sökvägen till den markerade filen. Sökvägen kan inte redigeras, men den kan kopieras till urklippet.För närvarande allokerat utrymme
För datafiler visar det aktuella allokerade utrymmet. För loggfiler visar det aktuella allokerade utrymmet som beräknas från utdata frånDBCC SQLPERF(LOGSPACE)
.Tillgängligt ledigt utrymme
För datafiler visar det aktuella lediga utrymmet som beräknas från utdata frånDBCC SHOWFILESTATS(fileid)
. För loggfiler visar det aktuella lediga utrymmet som beräknas från utdata frånDBCC SQLPERF(LOGSPACE)
.Frigöra oanvänt utrymme
Orsaka att oanvänt utrymme i filerna släpps till operativsystemet och krymper filen till den senaste allokerade omfattningen, vilket minskar filstorleken utan att flytta några data. Inga försök görs att flytta rader till oallokerade sidor.Ordna om sidor innan du frigör oanvänt utrymme
Motsvarar att köraDBCC SHRINKFILE
för att specificera målfilstorleken. När det här alternativet är markerat måste användaren ange en målfilstorlek i rutan Krymp filen till.Krymp fil till
Anger målfilens storlek för krympningsåtgärden. Storleken får inte vara mindre än det aktuella allokerade utrymmet eller mer än de totala omfattningar som allokerats till filen. Om du anger ett värde som överskrider det lägsta eller högsta värdet återgår du till min eller max när fokus har ändrats eller när någon av knapparna i verktygsfältet har valts.Tom fil genom att migrera data till andra filer i samma filgrupp
Migrera alla data från den angivna filen. Med det här alternativet kan filen tas bort med hjälp av ALTER DATABASE-instruktionen. Det här alternativet motsvarar att köraDBCC SHRINKFILE
med alternativetEMPTYFILE
.EMPTYFILE
stöds inte i Azure SQL Database eller Azure SQL Database Hyperscale.Välj filtyp och filnamn.
Du kan också markera kryssrutan Frigöra oanvänt utrymme.
Om du väljer det här alternativet frigörs eventuellt oanvänt utrymme i filen till operativsystemet och filen krymps till den senast allokerade omfattningen. Detta minskar filstorleken utan att flytta några data.
Du kan också markera kryssrutan Ordna om filer innan du släpper oanvänt utrymme. Om detta är markerat måste Krympa-filen till angivet-värde. Som standard rensas alternativet.
Om du väljer det här alternativet frigörs allt oanvänt utrymme i filen till operativsystemet och försöker flytta rader till oallokerade sidor.
Du kan också ange den maximala procentandelen ledigt utrymme som ska lämnas i databasfilen när databasen har krympts. Tillåtna värden är mellan 0 och 99. Det här alternativet är endast tillgängligt när Omorganisera filer innan oanvänt utrymme frigörs är aktiverat.
Markera kryssrutan Tom fil genom att alternativt migrera data till andra filer i samma filgrupp.
Om du väljer det här alternativet flyttas alla data från den angivna filen till andra filer i filgruppen. Den tomma filen kan sedan tas bort. Det här alternativet är detsamma som att köra
DBCC SHRINKFILE
med alternativet EMPTYFILE.Välj OK.
Använd Transact-SQL
Krympa en data- eller loggfil med hjälp av Transact-SQL
Anslut till databasmotorn.
I standardfältet väljer du Ny fråga.
Kopiera och klistra in följande exempel i frågefönstret och välj Kör. I det här exemplet används DBCC SHRINKFILE för att minska storleken på en datafil med namnet
DataFile1
iUserDB
-databasen till 7 MB.
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Relaterat innehåll
- Överväganden för inställningarna för automatisk tillväxt och automatisk skalning i SQL Server
- databasfiler och filgrupper
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- FILE_ID (Transact-SQL)
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Ta bort data eller loggfiler från en databas
- Krymp en databas