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:SQL Server
Den här artikeln beskriver hur du övervakar storleken på SQL Server-transaktionsloggen, krymper transaktionsloggen, lägger till eller förstorar en transaktionsloggfil, optimerar transaktionsloggens tempdb tillväxthastighet och kontrollerar tillväxten för en transaktionsloggfil.
Den här artikeln gäller för SQL Server. Även om processen är liknande, för filutrymmeshantering i Azure SQL, se:
- Hantera filutrymme för databaser i Azure SQL Managed Instance.
- Hantera filutrymme för databaser i Azure SQL Database.
Förstå typer av lagringsutrymme för en databas
Det är viktigt att förstå följande lagringsutrymmeskvantiteter för att hantera filutrymmet i en databas.
| Databaskvantitet | Definition | Comments |
|---|---|---|
| Datautrymme som används | Det utrymme som används för att lagra databasdata. | I allmänhet ökar utrymmet som används vid infogningar och minskar vid borttagningar. I vissa fall ändras inte det utrymme som används vid infogningar eller borttagningar, beroende på mängden och mönstret för data som ingår i åtgärden och eventuell fragmentering. Om du till exempel tar bort en rad från varje datasida minskar inte nödvändigtvis det utrymme som används. |
| Allokerat datautrymme | Det formaterade filutrymmet som görs tillgängligt för lagring av databasdata. | Mängden allokerat utrymme växer automatiskt men minskar aldrig efter borttagningar. Det här beteendet säkerställer att framtida infogningar blir snabbare eftersom utrymmet inte behöver formateras om. |
| Allokerat datautrymme men oanvänt | Skillnaden mellan mängden allokerat utrymme och det datautrymme som används. | Den här kvantiteten representerar det maximala lediga utrymme som krympande databasdatafiler kan frigöra. |
| Maximal datastorlek | Den maximala mängden utrymme för lagring av databasdata. | Mängden allokerat datautrymme kan inte öka utöver data maxstorleken. |
Följande diagram illustrerar relationerna mellan de olika typerna av lagringsutrymme för en databas.
Fråga en enskild databas om information om filutrymme
Använd följande fråga för att returnera mängden allokerat databasfilutrymme och mängden oanvänt utrymme som allokerats. Enheter i frågeresultatet är i MB.
-- Connect to a user database
SELECT file_id, type_desc,
CAST(FILEPROPERTY(name, 'SpaceUsed') AS decimal(19,4)) * 8 / 1024. AS space_used_mb,
CAST(size/128.0 - CAST(FILEPROPERTY(name, 'SpaceUsed') AS int)/128.0 AS decimal(19,4)) AS space_unused_mb,
CAST(size AS decimal(19,4)) * 8 / 1024. AS space_allocated_mb,
CAST(max_size AS decimal(19,4)) * 8 / 1024. AS max_size_mb
FROM sys.database_files;
Övervaka användning av loggutrymme
Övervaka användningen av loggutrymme med hjälp av sys.dm_db_log_space_usage. Denna DMV returnerar information om mängden loggutrymme som används för närvarande och anger när transaktionsloggen behöver trunkeras.
Du kan också använda kolumnerna size, max_sizeoch för loggfilen i sys.database_files om du vill ha information om den aktuella loggfilens storlek, maximal storlek och growth alternativet för automatisk inväxt.
Viktigt!
Undvik att överbelasta loggdisken. Se till att logglagringen klarar kraven på IOPS och låg svarstid för transaktionsbelastningen.
Krympa en loggfil
Krymp loggfilen för att minska den fysiska storleken genom att returnera ledigt utrymme till operativsystemet. En krympning gör bara skillnad när en transaktionsloggfil innehåller outnyttjat utrymme.
Om loggfilen är full, förmodligen på grund av öppna transaktioner, undersöker du vad som förhindrar att transaktionsloggen trunkeras.
Försiktighet
Krympå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. Krympa kommandon påverkar databasprestanda när de körs. De bör köras under perioder med låg användning. Vi rekommenderar inte att du krymper datafiler om en vanlig programarbetsbelastning gör att filerna växer till samma allokerade storlek igen.
Tänk på den potentiella negativa prestandapåverkan av krympande databasfiler. Se Indexunderhåll efter krympning.
Innan du krymper transaktionsloggen bör du tänka på faktorer som kan fördröja loggtrunkeringen. Om lagringsutrymme krävs igen efter att en logg krympt växer transaktionsloggen igen, vilket ger prestandaomkostnader under loggtillväxtåtgärder. Mer information finns i Rekommendationer.
Du kan bara krympa en loggfil när databasen är online och minst en virtuell loggfil (VLF) är kostnadsfri. I vissa fall kan det vara möjligt att krympa loggen först efter nästa loggtrunkering.
Vissa faktorer, till exempel en tidskrävande transaktion, kan hålla VLFs aktiva under en längre period, kan begränsa loggkrympningen eller till och med förhindra att loggen krymper alls. Mer information finns i Faktorer som kan fördröja loggtrunkering.
Om du krymper en loggfil tas en eller flera VLF:er bort som inte innehåller någon del av den logiska loggen (dvs. inaktiva VLF:er). När du krymper en transaktionsloggfil tas inaktiva VLFs bort från slutet av loggfilen för att minska loggen till ungefär målstorleken.
Mer information om krympningsåtgärder finns i följande resurser:
Krympa en loggfil (utan att krympa databasfiler)
Övervaka krympningshändelser för loggfiler
Övervaka loggutrymme
Sys.database_files (Transact-SQL) (Se kolumnerna
size,max_sizeochgrowthför loggfilen eller filerna.)
Indexunderhåll efter en krympningsåtgärd
Index kan bli fragmenterade när en krympningsåtgärd har slutförts mot datafiler. Den här fragmenteringen minskar deras effektivitet för prestandaoptimering för vissa arbetsbelastningar, till exempel frågor som använder stora genomsökningar. Om prestandaförsämringen inträffar när krympningsåtgärden är klar bör du överväga indexunderhåll för att återskapa index. Tänk på att återskapade index kräver ledigt utrymme i databasen och därmed kan öka det allokerade utrymmet, vilket motverkar effekten av krympningsåtgärden.
Mer information finns i Optimera indexunderhåll för att förbättra frågeprestanda och minska resursförbrukningen.
Lägga till eller förstora en loggfil
Du kan få utrymme genom att förstora den befintliga loggfilen (om diskutrymme tillåter) eller lägga till en loggfil i databasen, vanligtvis på en annan disk. En transaktionsloggfil räcker såvida inte loggutrymmet håller på att ta slut och diskutrymmet också håller på att ta slut på den volym som innehåller loggfilen.
- Om du vill lägga till en loggfil i databasen använder du instruktionens
ADD LOG FILEsatsALTER DATABASE. Med den här åtgärden kan loggen växa. - Om du vill förstora loggfilen använder du instruktionens
MODIFY FILEALTER DATABASEsats och anger syntaxenSIZEochMAXSIZE. Mer information finns i ALTER DATABASE (Transact-SQL) fil- och filgruppsalternativ.
Mer information finns i Rekommendationer.
Optimera tempdb-transaktionsloggens storlek
Om du startar om en serverinstans ändrar du storleken på transaktionsloggen tempdb för databasen till den ursprungliga storleken för automatisk storlek. Den här storleksändringen kan minska prestandan för transaktionsloggen tempdb .
Du kan undvika detta genom att öka transaktionsloggens tempdb storlek när du har startat eller startat om serverinstansen. Mer information finns i Tempdb-databasen.
Kontrollera transaktionsloggfilens tillväxt
Använd instruktionen ALTER DATABASE (Transact-SQL) för fil- och filgruppsalternativ för att hantera tillväxten av en transaktionsloggfil. Observera följande:
- Använd alternativet
SIZEför att ändra den aktuella filstorleken i KB-, MB-, GB- och TB-enheter. - Om du vill ändra tillväxtökningen använder du alternativet
FILEGROWTH. Värdet 0 anger att automatisk tillväxt är inställd på av och att inget extra utrymme tillåts. Använd alternativetMAXSIZEför att styra den maximala storleken på en loggfil i KB-, MB-, GB- och TB-enheter eller för att ange tillväxt tillUNLIMITED.
Mer information finns i Rekommendationer.
Recommendations
Följande är några allmänna rekommendationer att tänka på när du arbetar med transaktionsloggfiler:
Den automatiska tillväxtökningen (automatisk tillväxt) i transaktionsloggen, som anges av
FILEGROWTHalternativet, måste vara tillräckligt stor för att ligga före arbetsbelastningstransaktionernas behov. Ökning av filtillväxt i en loggfil bör vara tillräckligt stor för att undvika frekvent expansion. Ett bra tips för korrekt storleksändring av en transaktionslogg är att övervaka mängden logg som upptas under:- Den tid som krävs för att köra en fullständig säkerhetskopia, eftersom loggsäkerhetskopior inte kan ske förrän den har slutförts.
- Den tid som krävs för de största indexunderhållsåtgärderna.
- Den tid som krävs för att köra den största batchen i en databas.
När du anger automatisk tillväxt för data och loggfiler med hjälp
FILEGROWTHav alternativet kan det vara bättre att ange den i storlek i stället för procent för att ge bättre kontroll över tillväxtkvoten, eftersom en procentandel är en ständigt växande mängd.I versioner före SQL Server 2022 (16.x) kan transaktionsloggar inte använda omedelbar filinitiering, så utökade loggtillväxttider är särskilt kritiska.
Från och med SQL Server 2022 (16.x) (alla utgåvor) och i Azure SQL Database kan omedelbar filinitiering gynna transaktionsloggens tillväxthändelser på upp till 64 MB. Standardvärdet för automatisk storleksökning för nya databaser är 64 MB. Händelser som är större än 64 MB kan inte dra nytta av omedelbar filinitiering.
Vi rekommenderar att du inte anger
FILEGROWTHalternativvärdet över 1 024 MB för transaktionsloggar. StandardvärdenaFILEGROWTHför alternativet är:Utgåva Standardvärden Börjar med SQL Server 2016 (13.x) Data: 64 MB. Loggfiler: 64 MB. Börjar med SQL Server 2005 (9.x) Data: 1 MB. Loggfiler: 10%. Före SQL Server 2005 (9.x) Data: 10%. Loggfiler: 10%.
En liten automatisk ökning kan generera för många små VLF:er och kan minska prestanda. Information om hur du fastställer den optimala VLF-distributionen för den aktuella transaktionsloggstorleken för alla databaser i en viss instans och de tillväxtökningar som krävs för att uppnå den nödvändiga storleken finns i det här skriptet för att analysera och åtgärda VLF:er som tillhandahålls av SQL Tiger Team.
Ett stort autogrowth-steg kan orsaka två problem:
- Det kan göra att databasen pausas medan det nya utrymmet allokeras, vilket kan orsaka tidsgränser för frågor.
- Det kan generera för få och stora VLF:er och kan även påverka prestanda. Information om hur du fastställer den optimala VLF-distributionen för den aktuella transaktionsloggstorleken för alla databaser i en viss instans och de tillväxtökningar som krävs för att uppnå den nödvändiga storleken finns i det här skriptet för att analysera och åtgärda VLF:er som tillhandahålls av SQL Tiger Team.
Även om autogrowth är aktiverat kan du få ett meddelande om att transaktionsloggen är full om den inte kan växa tillräckligt snabbt för att uppfylla behoven i din fråga. Mer information om hur du ändrar tillväxtökningen finns i ALTER DATABASE (Transact-SQL) fil- och filgruppsalternativ.
Att ha flera loggfiler i en databas förbättrar inte prestandan på något sätt, eftersom transaktionsloggfilerna inte använder proportionell fyllning som datafiler i samma filgrupp.
Loggfiler kan ställas in för att krympa automatiskt. Vi rekommenderar dock inte den här konfigurationen och databasegenskapen AUTO_SHRINK är inställd på FALSE som standard. Om AUTO_SHRINK värdet är TRUE minskar automatisk krympning endast storleken på en fil när mer än 25 procent av dess utrymme inte används.
- Filen krymps antingen till den storlek där endast 25 procent av filen är outnyttjat utrymme eller till den ursprungliga storleken på filen, beroende på vilket som är större.
- Information om hur du ändrar inställningen för
AUTO_SHRINKegenskapen finns i Visa eller ändra egenskaperna för en databas och ALTER DATABASE SET-alternativ (Transact-SQL).
Relaterat innehåll
- BACKUP (Transact-SQL)
- Felsöka en fullständig transaktionslogg (SQL Server-fel 9002)
- Säkerhetskopiering av transaktionsloggar i arkitekturen och hanteringsguiden för SQL Server-transaktionsloggar
- Säkerhetskopior av transaktionsloggar (SQL Server)
- ALTER DATABASE (Transact-SQL) Fil- och filgruppsalternativ