Dela via


Krymp en databas

gäller för:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

Den här artikeln beskriver hur du krymper en databas i SQL Server med hjälp av Object Explorer i 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 och restriktioner

  • Databasen kan inte göras mindre än databasens minsta storlek. Den minsta storleken är den storlek som angavs när databasen ursprungligen skapades, eller den senaste explicita storleksuppsättningen med hjälp av en filstorleksförändrande åtgärd, till exempel DBCC SHRINKFILE. Om en databas till exempel ursprungligen skapades med en storlek på 10 MB och växte till 100 MB kan databasens minsta storlek minskas till 10 MB, även om alla data i databasen har tagits bort.

  • Du kan inte krympa en databas när databasen säkerhetskopieras. Omvänt kan du inte säkerhetskopiera en databas medan en krympningsåtgärd på databasen pågår.

Rekommendationer

  • Om du vill visa den aktuella mängden ledigt (oallokerat) utrymme i databasen. Mer information finns i Visa data och information om loggutrymme för en databas

  • Tänk på följande information när du planerar att krympa en databas:

    • 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 databas upprepade gånger och märker att databasstorleken växer igen, anger detta att det lediga utrymmet krävs för vanliga åtgärder. I dessa fall är det en bortkastad åtgärd att krympa databasen upprepade gånger. Autogrow-händelser som krävs för att öka databasfilerna hindrar prestanda.

    • En krympningsåtgärd bevarar inte fragmenteringstillståndet för index i databasen och ökar vanligtvis fragmenteringen i viss utsträckning. Det här är en annan anledning till att inte krympa databasen upprepade gånger.

    • Om du inte har ett specifikt krav ska du inte ange alternativet AUTO_SHRINK databas till PÅ.

Behörigheter

Kräver medlemskap i sysadmin bestämd serverroll eller db_owner bestämd databasroll.

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. Krympdatabasåtgärder, som introducerades i SQL Server 2022 (16.x), har ett 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 långvarig fråga som redan pågår, kommer krympningsåtgärden slutligen att nå tidsgränsen efter en minut, och tyst avslutas, vilket förhindrar att andra förfrågningar blockeras. Mer information finns i DBCC SHRINKDATABASE.

Information om filhantering och krympningsåtgärder som är specifika för Azure SQL Database finns i Hantera filutrymme för databaser i Azure SQL Database.

Använda SQL Server Management Studio

gäller för: SQL Server, Azure SQL Managed Instance

Krymp en databas

  1. I Object Exploreransluter du till en instans av SQL Server Database Engine och expanderar sedan den instansen.

  2. Expandera Databaseroch högerklicka sedan på den databas som du vill krympa.

  3. Peka på Uppgifter, peka på Krympoch välj sedan Databas.

    • Database

      Visar namnet på den valda databasen.

    • Aktuellt allokerat utrymme

      Visar det totala använda och oanvända utrymmet för den valda databasen.

    • Tillgängligt ledigt utrymme

      Visar summan av ledigt utrymme i logg- och datafilerna för den valda databasen.

    • Ordna om filer innan du frigör oanvänt utrymme

      Att välja det här alternativet motsvarar att köra DBCC SHRINKDATABASE och ange ett målprocentalternativ. Att rensa det här alternativet motsvarar att köra DBCC SHRINKDATABASE tillsammans med TRUNCATEONLY-alternativet. Som standard är det här alternativet inte markerat när dialogrutan öppnas. Om det här alternativet är markerat måste användaren ange ett målprocentalternativ.

    • Maximalt ledigt utrymme i filer efter krympning av

      Ange den maximala procentandelen ledigt utrymme som ska finnas kvar i databasfilerna när databasen har krympts. Tillåtna värden är mellan 0 och 99.

  4. Välj OK.

Använd Transact-SQL

Krymp en databas

  1. Anslut till databasmotorn.

  2. I standardfältet väljer du Ny fråga.

  3. Kopiera och klistra in följande exempel i frågefönstret och välj Kör. I det här exemplet används DBCC SHRINKDATABASE för att minska storleken på data och loggfiler i UserDB-databasen och för att tillåta 10 procent ledigt utrymme i databasen.

DBCC SHRINKDATABASE (UserDB, 10);
GO

När du har krympt en databas

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. Mer information finns i Återskapa ett index.