gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste SQL-, Fabric- en Power BI-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertDeze browser wordt niet meer ondersteund.
Upgrade naar Microsoft Edge om te profiteren van de nieuwste functies, beveiligingsupdates en technische ondersteuning.
van toepassing op:SQL Server
Azure SQL Managed Instance
In dit artikel worden verschillende methoden besproken die u kunt gebruiken om de tempdb
-database in SQL Server te verkleinen.
U kunt een van de volgende methoden gebruiken om de grootte van tempdb
te wijzigen. De eerste drie opties worden beschreven in dit artikel. Als u SQL Server Management Studio (SSMS) wilt gebruiken, volgt u de instructies in Een database verkleinen.
Methode | Vereist opnieuw opstarten? | Meer informatie |
---|---|---|
ALTER DATABASE |
Ja | Geeft volledige controle over de grootte van de standaardbestanden tempdb (tempdev en templog ). |
DBCC SHRINKDATABASE |
Nee | Werkt op databaseniveau. |
DBCC SHRINKFILE |
Nee | Hiermee kunt u afzonderlijke bestanden verkleinen. |
SQL Server Management Studio | Nee | Databasebestanden verkleinen via een grafische gebruikersinterface. |
Standaard is de tempdb
-database zo nodig geconfigureerd om automatisch te groeien. Daarom kan deze database onverwacht toenemen tot een grootte die groter is dan de gewenste grootte. Grotere tempdb
databasegrootten hebben geen negatieve invloed op de prestaties van SQL Server.
Wanneer SQL Server wordt gestart, wordt tempdb
opnieuw gemaakt met behulp van een kopie van de model
-database en wordt tempdb
opnieuw ingesteld op de laatst geconfigureerde grootte. De geconfigureerde grootte is de laatste expliciete grootte die is ingesteld met behulp van een bewerking voor het wijzigen van de bestandsgrootte, zoals ALTER DATABASE
die gebruikmaakt van de optie MODIFY FILE
of de DBCC SHRINKFILE
- of DBCC SHRINKDATABASE
-instructies. Dus, tenzij u verschillende waarden moet gebruiken of onmiddellijke oplossing voor een grote tempdb
-database moet verkrijgen, kunt u wachten totdat de SQL Server-service opnieuw wordt opgestart om de grootte te verkleinen.
U kunt tempdb
verkleinen terwijl tempdb
activiteit wordt uitgevoerd. U kunt echter andere fouten tegenkomen, zoals blokkeren, impasses, enzovoort, waardoor het niet kan worden voltooid. Om ervoor te zorgen dat een verkleining van tempdb
slaagt, raden we u aan dit te doen terwijl de server zich in de modus voor één gebruiker bevindt of wanneer u alle tempdb
activiteit stopt.
SQL Server registreert slechts voldoende informatie in het tempdb
transactielogboek om een transactie terug te draaien, maar niet om transacties opnieuw uit te voeren tijdens het herstel van de database. Deze functie verbetert de prestaties van INSERT
statements in tempdb
. Bovendien hoeft u geen gegevens te registreren om transacties opnieuw uit te voeren, omdat tempdb
telkens opnieuw wordt gemaakt wanneer u SQL Server opnieuw start. Daarom heeft het geen transacties om vooruit te draaien of om terug te draaien.
Voor meer informatie over het beheren en bewaken van tempdb
, zie Capaciteitsplanning en Tempdb bewaken.
Notitie
Deze opdracht werkt alleen op de standaard tempdb
logische bestanden tempdev
en templog
. Als er meer bestanden aan tempdb
worden toegevoegd, kunt u ze verkleinen nadat u SQL Server als een service opnieuw hebt opgestart. Alle tempdb
bestanden worden opnieuw gemaakt tijdens het opstarten. Ze zijn echter leeg en kunnen worden verwijderd. Als u extra bestanden in tempdb
wilt verwijderen, gebruikt u de opdracht ALTER DATABASE
met de optie REMOVE FILE
.
Voor deze methode moet u SQL Server opnieuw starten.
SQL Server stoppen.
Start bij een opdrachtprompt het exemplaar in de minimale configuratiemodus. Voer hiervoor de volgende stappen uit:
Ga bij een opdrachtprompt naar de map waarin SQL Server is geïnstalleerd (vervang <VersionNumber>
en <InstanceName>
in het volgende voorbeeld):
cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
Als het exemplaar een benoemd exemplaar van SQL Server is, voert u de volgende opdracht uit (vervang <InstanceName>
in het volgende voorbeeld):
sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
Als het exemplaar het standaardexemplaar van SQL Server is, voert u het volgende commando uit:
sqlservr -c -f -mSQLCMD
Notitie
De parameters -c
en -f
zorgen ervoor dat SQL Server in een minimale configuratiemodus wordt gestart met een tempdb
grootte van 1 MB voor het gegevensbestand en 0,5 MB voor het logboekbestand. De parameter -mSQLCMD
voorkomt dat een andere toepassing dan sqlcmd de verbinding met één gebruiker overneemt.
Maak verbinding met SQL Server met sqlcmd-en voer de volgende Transact-SQL opdrachten uit. Vervang <target_size_in_MB>
door de gewenste grootte:
ALTER DATABASE tempdb MODIFY FILE
(NAME = 'tempdev', SIZE = <target_size_in_MB>);
ALTER DATABASE tempdb MODIFY FILE
(NAME = 'templog', SIZE = <target_size_in_MB>);
Beëindig SQL Server. Als u dit wilt doen, drukt u op Ctrl+C
in het opdrachtpromptvenster, start u SQL Server opnieuw op als een service en controleert u vervolgens de grootte van de tempdb.mdf
- en templog.ldf
-bestanden.
DBCC SHRINKDATABASE
ontvangt de parameter target_percent
. Dit is het gewenste percentage vrije ruimte in het databasebestand nadat de database is verkleind. Als u DBCC SHRINKDATABASE
gebruikt, moet u SQL Server mogelijk opnieuw opstarten.
Bepaal de ruimte die momenteel wordt gebruikt in tempdb
door de opgeslagen procedure sp_spaceused
te gebruiken. Bereken vervolgens het percentage vrije ruimte dat overblijft voor gebruik als parameter voor DBCC SHRINKDATABASE
. Deze berekening is gebaseerd op de gewenste databasegrootte.
Notitie
In sommige gevallen moet u mogelijk sp_spaceused @updateusage = true
uitvoeren om de gebruikte ruimte opnieuw te berekenen en een bijgewerkt rapport te verkrijgen. Zie sp_spaceusedvoor meer informatie.
Bekijk het volgende voorbeeld:
Stel dat tempdb
twee bestanden heeft: het primaire gegevensbestand (tempdb
.mdf) dat 1024 MB is en het logboekbestand (tempdb.ldf
) dat 360 MB is. Stel dat sp_spaceused
rapporteert dat het primaire gegevensbestand 600 MB aan gegevens bevat. Stel ook dat u het primaire gegevensbestand wilt verkleinen tot 800 MB. Bereken het gewenste percentage vrije ruimte na de verkleining: 800 MB - 600 MB = 200 MB. Deel nu 200 MB met 800 MB = 25 procent, en dat is uw target_percent
. Het transactielogboekbestand wordt dienovereenkomstig verkleind, waardoor er 25 procent of 200 MB ruimte vrij is nadat de database is verkleind.
Maak verbinding met SQL Server met SSMS, Azure Data Studio of sqlcmden voer vervolgens de volgende Transact-SQL opdracht uit. Vervang <target_percent>
door het gewenste percentage:
DBCC SHRINKDATABASE (tempdb, '<target_percent>');
Er gelden beperkingen met de opdracht DBCC SHRINKDATABASE
op tempdb
. De doelgrootte voor gegevens en logboekbestanden kan niet kleiner zijn dan de grootte die is opgegeven toen de database werd gemaakt of kleiner is dan de laatste grootte die expliciet is ingesteld met behulp van een bewerking voor het wijzigen van de bestandsgrootte, zoals ALTER DATABASE
die gebruikmaakt van de optie MODIFY FILE
. Een andere beperking van DBCC SHRINKDATABASE
is de berekening van de parameter target_percentage
en de afhankelijkheid van de ruimte die momenteel in gebruik is.
Gebruik de opdracht DBCC SHRINKFILE
om de afzonderlijke tempdb
bestanden te verkleinen.
DBCC SHRINKFILE
biedt meer flexibiliteit dan DBCC SHRINKDATABASE
omdat u het kunt gebruiken voor één databasebestand zonder dat dit van invloed is op andere bestanden die deel uitmaken van dezelfde database.
DBCC SHRINKFILE
de parameter target_size
ontvangt. Dit is de gewenste uiteindelijke grootte voor het databasebestand.
Bepaal de gewenste grootte voor het primaire gegevensbestand (tempdb.mdf
), het logboekbestand (templog.ldf
) en extra bestanden die aan tempdb
worden toegevoegd. Zorg ervoor dat de ruimte die wordt gebruikt in de bestanden kleiner is dan of gelijk is aan de gewenste doelgrootte.
Maak verbinding met SQL Server met SSMS, Azure Data Studio of sqlcmden voer vervolgens de volgende Transact-SQL opdrachten uit voor de specifieke databasebestanden die u wilt verkleinen. Vervang <target_size_in_MB>
door de gewenste grootte:
USE tempdb;
GO
-- This command shrinks the primary data file
DBCC SHRINKFILE (tempdev, '<target_size_in_MB>');
GO
-- This command shrinks the log file, examine the last paragraph.
DBCC SHRINKFILE (templog, '<target_size_in_MB>');
GO
Een voordeel van DBCC SHRINKFILE
is dat het de grootte van een bestand kan verkleinen tot een grootte die kleiner is dan de oorspronkelijke grootte. U kunt DBCC SHRINKFILE
toepassen op een van de gegevens- of logboekbestanden. U kunt de database niet kleiner maken dan de grootte van de model
database.
Als tempdb
wordt gebruikt en als u deze probeert te verkleinen met behulp van de opdrachten DBCC SHRINKDATABASE
of DBCC SHRINKFILE
, ontvangt u mogelijk berichten die er ongeveer als volgt uitzien, afhankelijk van de versie van SQL Server die u gebruikt:
Server: Msg 8909, Level 16, State 1, Line 1 Table error: Object ID 0, index ID -1, partition ID 0, alloc unit ID 0 (type Unknown), page ID (6:8040) contains an incorrect page ID in its page header. The PageId in the page header = (0:0).
Deze fout geeft geen echte beschadiging aan in tempdb
. Er kunnen echter andere redenen zijn voor fouten met beschadigde fysieke gegevens, zoals fout 8909, en dat deze redenen problemen met het I/O-subsysteem omvatten. Als de fout zich buiten verkleiningsbewerkingen voordoet, moet u daarom meer onderzoek doen.
Hoewel een 8909-bericht wordt geretourneerd naar de toepassing of naar de gebruiker die de verkleiningsbewerking uitvoert, mislukken de verkleiningsbewerkingen niet.
gebeurtenis
31 mrt, 23 - 2 apr, 23
De grootste SQL-, Fabric- en Power BI-leerevenement. 31 maart – 2 april. Gebruik code FABINSIDER om $ 400 te besparen.
Zorg dat u zich vandaag nog registreertTraining
Module
SQL Server-resources configureren voor optimale prestaties - Training
SQL Server-resources configureren voor optimale prestaties