Zmniejszanie bazy danych tempdb
Dotyczy:programu SQL Server
Azure SQL Managed Instance
W tym artykule omówiono różne metody, których można użyć do zmniejszenia bazy danych tempdb
w programie SQL Server.
Aby zmienić rozmiar tempdb
, można użyć dowolnej z poniższych metod. Pierwsze trzy opcje zostały opisane w tym artykule. Jeśli chcesz użyć programu SQL Server Management Studio (SSMS), postępuj zgodnie z instrukcjami w Zmniejszanie bazy danych.
Metoda | Wymaga ponownego uruchomienia? | Więcej informacji |
---|---|---|
ALTER DATABASE |
Tak | Zapewnia pełną kontrolę nad rozmiarem domyślnych plików tempdb (tempdev i templog ). |
DBCC SHRINKDATABASE |
Nie | Działa na poziomie bazy danych. |
DBCC SHRINKFILE |
Nie | Pozwala zmniejszyć poszczególne pliki. |
SQL Server Management Studio | Nie | Zmniejszanie plików bazy danych za pomocą graficznego interfejsu użytkownika. |
Uwagi
Domyślnie baza danych tempdb
jest skonfigurowana do automatycznego zwiększania w razie potrzeby. W związku z tym ta baza danych może nieoczekiwanie rosnąć w czasie do rozmiaru większego niż żądany rozmiar. Większe tempdb
rozmiary baz danych nie wpływają negatywnie na wydajność programu SQL Server.
Po uruchomieniu programu SQL Server tempdb
zostanie ponownie utworzona przy użyciu kopii bazy danych model
, a tempdb
zostanie zresetowana do ostatniego skonfigurowanego rozmiaru. Skonfigurowany rozmiar to ostatni jawny rozmiar, który został ustawiony przy użyciu operacji zmiany rozmiaru pliku, takiej jak ALTER DATABASE
, która używa opcji MODIFY FILE
lub instrukcji DBCC SHRINKFILE
lub DBCC SHRINKDATABASE
. W związku z tym, o ile nie trzeba używać różnych wartości lub uzyskać natychmiastowe rozwiązanie dla dużej tempdb
bazy danych, możesz poczekać na następne ponowne uruchomienie usługi PROGRAMU SQL Server, aby zmniejszyć rozmiar.
Możesz zmniejszyć tempdb
, gdy działanie tempdb
jest w toku. Jednak mogą wystąpić inne błędy, takie jak blokowanie, zakleszczenia itd., które mogą uniemożliwić ukończenie procesu zmniejszania. W związku z tym, aby upewnić się, że zmniejszenie tempdb
powiedzie się, zalecamy wykonanie tej czynności, gdy serwer jest w trybie pojedynczego użytkownika lub gdy zatrzymasz wszystkie działania tempdb
.
Program SQL Server rejestruje tylko wystarczającą ilość informacji w dzienniku transakcji tempdb
, aby wycofać transakcję, ale nie ponownie wykonać transakcji podczas odzyskiwania bazy danych. Ta funkcja zwiększa wydajność instrukcji INSERT
w tempdb
. Ponadto nie musisz rejestrować informacji w celu ponownego utworzenia żadnych transakcji, ponieważ tempdb
jest tworzony ponownie za każdym razem, gdy ponownie uruchomisz program SQL Server. W związku z tym nie ma transakcji do przesyłania dalej ani wycofywania.
Aby uzyskać więcej informacji na temat zarządzania i monitorowania tempdb
, zobacz Planowanie pojemności i Monitoruj użycie tempdb.
Użyj polecenia ALTER DATABASE
Notatka
To polecenie działa tylko na domyślnych plikach logicznych tempdb
tempdev
i templog
. Jeśli do tempdb
zostanie dodanych więcej plików, można je zmniejszyć po ponownym uruchomieniu programu SQL Server jako usługi. Wszystkie pliki tempdb
są tworzone ponownie podczas uruchamiania. Są one jednak puste i można je usunąć. Aby usunąć dodatkowe pliki w tempdb
, użyj polecenia ALTER DATABASE
z opcją REMOVE FILE
.
Ta metoda wymaga ponownego uruchomienia programu SQL Server.
Zatrzymaj program SQL Server.
W wierszu polecenia uruchom instancję w trybie minimalnej konfiguracji. Aby to zrobić, wykonaj następujące kroki:
W wierszu polecenia przejdź do folderu, w którym jest zainstalowany program SQL Server (zastąp
<VersionNumber>
i<InstanceName>
w poniższym przykładzie):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
Jeśli wystąpienie jest nazwanym wystąpieniem programu SQL Server, uruchom następujące polecenie (zastąp
<InstanceName>
w poniższym przykładzie):sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
Jeśli wystąpienie jest domyślnym wystąpieniem programu SQL Server, uruchom następujące polecenie:
sqlservr -c -f -mSQLCMD
Notatka
Parametry
-c
i-f
powodują uruchomienie programu SQL Server w trybie minimalnej konfiguracji, który ma rozmiartempdb
1 MB dla pliku danych i 0,5 MB dla pliku dziennika. Parametr-mSQLCMD
uniemożliwia przejęcie połączenia pojedynczego użytkownika przez dowolną inną aplikację niż sqlcmd.
Połącz się z programem SQL Server przy użyciu sqlcmd, a następnie uruchom następujące polecenia Transact-SQL. Zastąp
<target_size_in_MB>
żądanym rozmiarem:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);
Zatrzymaj program SQL Server. W tym celu naciśnij
Ctrl+C
w oknie wiersza polecenia, uruchom ponownie program SQL Server jako usługę, a następnie sprawdź rozmiar plikówtempdb.mdf
itemplog.ldf
.
Użyj polecenia DBCC SHRINKDATABASE
DBCC SHRINKDATABASE
odbiera parametr target_percent
. Jest to żądany procent wolnego miejsca pozostawionego w pliku bazy danych po usunięciu bazy danych. Jeśli używasz DBCC SHRINKDATABASE
, może być konieczne ponowne uruchomienie programu SQL Server.
Określ przestrzeń, która jest obecnie używana w
tempdb
przy użyciu procedury składowanejsp_spaceused
. Następnie oblicz procent wolnego miejsca, który jest pozostawiony do użycia jako parametr doDBCC SHRINKDATABASE
. To obliczenie jest oparte na żądanym rozmiarze bazy danych.Notatka
W niektórych przypadkach może być konieczne wykonanie
sp_spaceused @updateusage = true
, aby ponownie obliczyć używane miejsce i uzyskać zaktualizowany raport. Aby uzyskać więcej informacji, zobacz sp_spaceused.Rozważmy następujący przykład:
Załóżmy, że
tempdb
ma dwa pliki: podstawowy plik danych (tempdb
.mdf), czyli 1024 MB, a plik dziennika (tempdb.ldf
), czyli 360 MB. Załóżmy, żesp_spaceused
raportuje, że podstawowy plik danych zawiera 600 MB danych. Załóżmy również, że chcesz zmniejszyć podstawowy plik danych do 800 MB. Oblicz żądaną wartość procentową wolnego miejsca pozostawionego po zmniejszeniu: 800 MB – 600 MB = 200 MB. Teraz podziel 200 MB na 800 MB = 25% i to jest twójtarget_percent
. Plik dziennika transakcji jest odpowiednio skurczony, pozostawiając 25 procent, czyli 200 MB wolnego miejsca po skurczeniu bazy danych.Połącz się z programem SQL Server przy użyciu programu SSMS, narzędzia Azure Data Studio lub sqlcmd, a następnie uruchom następujące polecenie Transact-SQL. Zastąp
<target_percent>
żądaną wartością procentową:DBCC SHRINKDATABASE (tempdb, '<target_percent>');
Istnieją ograniczenia dotyczące polecenia DBCC SHRINKDATABASE
w tempdb
. Rozmiar docelowy plików danych i dziennika nie może być mniejszy niż rozmiar określony podczas tworzenia bazy danych lub mniejszy niż ostatni rozmiar, który został jawnie ustawiony przy użyciu operacji zmiany rozmiaru pliku, takiej jak ALTER DATABASE
używającej opcji MODIFY FILE
. Innym ograniczeniem DBCC SHRINKDATABASE
jest obliczenie parametru target_percentage
i jego zależności od bieżącego używanego miejsca.
Użyj polecenia DBCC SHRINKFILE
Użyj polecenia DBCC SHRINKFILE
, aby zmniejszyć poszczególne pliki tempdb
.
DBCC SHRINKFILE
zapewnia większą elastyczność niż DBCC SHRINKDATABASE
, ponieważ można go używać w jednym pliku bazy danych bez wpływu na inne pliki należące do tej samej bazy danych.
DBCC SHRINKFILE
odbiera parametr target_size
. Jest to żądany ostateczny rozmiar pliku bazy danych.
Określ żądany rozmiar pliku danych podstawowych (
tempdb.mdf
), plik dziennika (templog.ldf
) i dodatkowe pliki, które są dodawane dotempdb
. Upewnij się, że ilość miejsca zajmowanego przez pliki jest mniejsza lub równa żądanemu rozmiarowi docelowemu.Połącz się z programem SQL Server przy użyciu programu SSMS, narzędzia Azure Data Studio lub sqlcmd, a następnie uruchom następujące polecenia Transact-SQL dla określonych plików bazy danych, które chcesz zmniejszyć. Zastąp
<target_size_in_MB>
żądanym rozmiarem: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
Zaletą DBCC SHRINKFILE
jest to, że może zmniejszyć rozmiar pliku do rozmiaru mniejszego niż jego oryginalny rozmiar. Możesz przeprowadzić DBCC SHRINKFILE
na dowolnym z plików danych lub plików dzienników. Nie można zmniejszyć bazy danych do rozmiaru mniejszego niż rozmiar bazy danych model
.
Błąd 8909 podczas uruchamiania operacji zmniejszania
Jeśli tempdb
jest używana, a jeśli spróbujesz zmniejszyć ją przy użyciu poleceń DBCC SHRINKDATABASE
lub DBCC SHRINKFILE
, możesz otrzymywać komunikaty podobne do następujących, w zależności od używanej wersji programu SQL Server:
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).
Ten błąd nie wskazuje żadnych rzeczywistych uszkodzeń w tempdb
. Jednak mogą istnieć inne przyczyny błędów uszkodzenia danych fizycznych, takich jak błąd 8909, i że przyczyny te obejmują problemy podsystemu we/wy. Dlatego, jeśli błąd wystąpi poza operacjami zmniejszania, warto przeprowadzić dodatkowe dochodzenie.
Mimo że komunikat 8909 jest zwracany do aplikacji lub do użytkownika, który wykonuje operację zmniejszania, operacje zmniejszania nie kończą się niepowodzeniem.
Powiązana zawartość
- Zagadnienia dotyczące ustawień automatycznego zwiększania i automatycznego zmniejszania w programie SQL Server
- pliki bazy danych i grupy plików
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- Zmniejszanie bazy danych
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- usuwanie danych lub plików dziennika z bazy danych
- Zmniejsz plik