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.

Varning

  • 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.
  • Krympningsåtgärder bör inte betraktas som en vanlig underhållsåtgärd. Data och loggfiler som växer på grund av regelbundna, återkommande affärsåtgärder kräver inte krympningsåtgärder.

Begränsningar

  • 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. För mer information, se Visa information om data och 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 databasalternativet AUTO_SHRINK till ON.

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. I SQL Server 2022 (16.x) har krympningsdatabasåtgärder 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 läge WAIT_AT_LOW_PRIORITY inte kan hämta de nödvändiga låsen på grund av en långvarig fråga som redan pågår, kommer krympningsåtgärden så småningom att nå en tidsgräns efter en minut och avslutas utan meddelande, vilket förhindrar blockering av andra frågor. 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.

    • Databas

      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 med ett målprocentvärde. Att rensa det här alternativet motsvarar körning DBCC SHRINKDATABASE med alternativet TRUNCATEONLY. 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 fältet Standard 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 (Transact-SQL) för att minska storleken på data och loggfiler i UserDB databasen och för 10 att tillåta ledigt utrymme i databasen i procent.

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.