Zmenšení databáze tempdb
platí pro:SQL Server
azure SQL Managed Instance
Tento článek popisuje různé metody, které můžete použít ke zmenšení tempdb
databáze na SQL Serveru.
Ke změně velikosti tempdb
můžete použít některou z následujících metod . První tři možnosti jsou popsány v tomto článku. Pokud chcete použít SQL Server Management Studio (SSMS), postupujte podle pokynů v Zmenšení databáze.
Metoda | Vyžaduje restartování? | Další informace |
---|---|---|
ALTER DATABASE |
Ano | Poskytuje úplnou kontrolu nad velikostí výchozích souborů tempdb (tempdev a templog ). |
DBCC SHRINKDATABASE |
Ne | Funguje na úrovni databáze. |
DBCC SHRINKFILE |
Ne | Umožňuje zmenšit jednotlivé soubory. |
SQL Server Management Studio | Ne | Zmenšete soubory databáze prostřednictvím grafického uživatelského rozhraní. |
Poznámky
Ve výchozím nastavení je databáze tempdb
nakonfigurovaná tak, aby se podle potřeby automaticky zvětšovala. Proto se tato databáze může neočekávaně zvětšovat na velikost větší než požadovaná velikost. Větší tempdb
velikosti databází nemají nepříznivý vliv na výkon SQL Serveru.
Při spuštění SQL Serveru se tempdb
znovu vytvoří pomocí kopie model
databáze a tempdb
se obnoví na poslední nakonfigurovanou velikost. Nakonfigurovaná velikost je poslední explicitní velikost nastavená pomocí operace změny velikosti souboru, například ALTER DATABASE
, která používá možnost MODIFY FILE
nebo příkazy DBCC SHRINKFILE
nebo DBCC SHRINKDATABASE
. Proto pokud nebudete muset použít jiné hodnoty nebo získat okamžité řešení pro velkou tempdb
databázi, můžete počkat na další restartování služby SQL Serveru, aby se velikost zmenšila.
Můžete zmenšit tempdb
, zatímco aktivita tempdb
probíhá. Můžete ale narazit na jiné chyby, jako jsou blokování, zablokování atd., které můžou zabránit dokončení zmenšení. Proto, abyste zajistili úspěšné zmenšení tempdb
, doporučujeme to provést, když je server v režimu jednoho uživatele, nebo když zastavíte veškerou aktivitu tempdb
.
SQL Server zaznamenává pouze dostatek informací v protokolu transakcí tempdb
k vrácení transakce zpět, ale ne k opakování transakcí během obnovení databáze. Tato funkce zvyšuje výkon příkazů INSERT
v tempdb
. Navíc nemusíte protokolovat informace pro opakování jakýchkoli transakcí, protože tempdb
se znovu vytvoří při každém restartu SQL Serveru. Proto nemá žádné transakce k vrácení dopředu nebo vrácení zpět.
Další informace o správě a monitorování tempdb
naleznete v tématu Plánování kapacity a Monitorování databáze tempdb.
Použití příkazu ALTER DATABASE
Poznámka
Tento příkaz funguje pouze u výchozích tempdb
logických souborů tempdev
a templog
. Pokud se do tempdb
přidají další soubory, můžete je po restartování SQL Serveru jako služby zmenšit. Všechny soubory tempdb
se při spuštění znovu vytvoří. Jsou ale prázdné a dají se odebrat. Pokud chcete v tempdb
odebrat další soubory, použijte příkaz ALTER DATABASE
s možností REMOVE FILE
.
Tato metoda vyžaduje restartování SQL Serveru.
Zastavte SQL Server.
Na příkazovém řádku spusťte instanci v minimálním režimu konfigurace. Postupujte takto:
Na příkazovém řádku přejděte do složky, ve které je nainstalovaný SQL Server (nahraďte
<VersionNumber>
a<InstanceName>
v následujícím příkladu):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\Binn
Pokud je instance pojmenovanou instancí SQL Serveru, spusťte následující příkaz (nahraďte
<InstanceName>
v následujícím příkladu):sqlservr.exe -s <InstanceName> -c -f -mSQLCMD
Pokud je instance výchozí instancí SQL Serveru, spusťte následující příkaz:
sqlservr -c -f -mSQLCMD
Poznámka
Parametry
-c
a-f
způsobí spuštění SQL Serveru v minimálním režimu konfigurace, který mátempdb
velikost 1 MB datového souboru a 0,5 MB pro soubor protokolu. Parametr-mSQLCMD
zabraňuje jakékoli jiné aplikaci než sqlcmd v převzetí jednouživatelského připojení.
Připojte se k SQL Serveru pomocí sqlcmda spusťte následující příkazy Transact-SQL. Nahraďte
<target_size_in_MB>
požadovanou velikostí:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);
Zastavte SQL Server. Uděláte to tak, že stisknete
Ctrl+C
v okně příkazového řádku, restartujte SQL Server jako službu a pak ověříte velikosttempdb.mdf
atemplog.ldf
souborů.
Použití příkazu DBCC SHRINKDATABASE
DBCC SHRINKDATABASE
obdrží parametr target_percent
. Jedná se o požadované procento volného místa, které zbývá v databázovém souboru po zmenšení databáze. Pokud používáte DBCC SHRINKDATABASE
, možná budete muset restartovat SQL Server.
Pomocí uložené procedury
sp_spaceused
určete, kolik prostoru se aktuálně používá vtempdb
. Pak vypočítat procento volného místa, které je ponecháno pro použití jako parametr proDBCC SHRINKDATABASE
. Tento výpočet vychází z požadované velikosti databáze.Poznámka
V některých případech možná budete muset spustit
sp_spaceused @updateusage = true
, abyste přepočítali využitý prostor a získali aktualizovanou sestavu. Další informace najdete v části sp_spaceused.Podívejte se na následující příklad:
Předpokládejme, že
tempdb
má dva soubory: primární datový soubor (tempdb
.mdf), který je 1 024 MB a soubor protokolu (tempdb.ldf
), který je 360 MB. Předpokládejme, žesp_spaceused
oznamuje, že primární datový soubor obsahuje 600 MB dat. Předpokládejme také, že chcete primární datový soubor zmenšit na 800 MB. Vypočítejte požadované procento zbývajícího volného místa po zmenšení: 800 MB - 600 MB = 200 MB. Nyní vydělte 200 MB o 800 MB = 25 procent a to je vašetarget_percent
. Soubor transakčního protokolu se odpovídajícím způsobem zmrští a po zmenšení databáze ponechá 25 % nebo 200 MB volného místa.Připojte se k SQL Serveru pomocí SSMS, Azure Data Studia nebo sqlcmda spusťte následující příkaz Transact-SQL. Nahraďte
<target_percent>
požadovaným procentem:DBCC SHRINKDATABASE (tempdb, '<target_percent>');
U tempdb
existují omezení příkazu DBCC SHRINKDATABASE
. Cílová velikost pro data a soubory protokolu nemůže být menší než velikost zadaná při vytvoření databáze nebo menší než poslední nastavená explicitní velikost pomocí operace změny velikosti souboru, například ALTER DATABASE
, která používá možnost MODIFY FILE
. Dalším omezením DBCC SHRINKDATABASE
je výpočet parametru target_percentage
a jeho závislosti na aktuálním použitém prostoru.
Použití příkazu DBCC SHRINKFILE
Pomocí příkazu DBCC SHRINKFILE
zmenšete jednotlivé soubory tempdb
.
DBCC SHRINKFILE
poskytuje větší flexibilitu než DBCC SHRINKDATABASE
, protože ji můžete použít v jednom databázovém souboru, aniž by to mělo vliv na jiné soubory, které patří do stejné databáze.
DBCC SHRINKFILE
obdrží parametr target_size
. Toto je požadovaná konečná velikost souboru databáze.
Určete požadovanou velikost primárního datového souboru (
tempdb.mdf
), souboru protokolu (templog.ldf
) a dalších souborů, které se přidají dotempdb
. Ujistěte se, že místo použité v souborech je menší nebo rovno požadované cílové velikosti.Připojte se k SQL Serveru pomocí SSMS, Azure Data Studia nebo sqlcmda pak spusťte následující příkazy Transact-SQL pro konkrétní soubory databáze, které chcete zmenšit. Nahraďte
<target_size_in_MB>
požadovanou velikostí: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
Výhodou DBCC SHRINKFILE
je, že může zmenšit velikost souboru na menší než původní velikost. Můžete vydat DBCC SHRINKFILE
u libovolného datového souboru nebo souborů protokolu. Databázi nemůžete zmenšit, než je velikost model
databáze.
Chyba 8909 při spuštění operací zmenšení
Pokud se používá tempdb
a pokud se ho pokusíte zmenšit pomocí příkazů DBCC SHRINKDATABASE
nebo DBCC SHRINKFILE
, můžou se v závislosti na používané verzi SQL Serveru zobrazit zprávy podobné následujícímu:
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).
Tato chyba neukazuje žádné skutečné poškození v tempdb
. Mohou však existovat jiné důvody chyb fyzického poškození dat, jako je chyba 8909, a že tyto důvody zahrnují problémy subsystému vstupně-výstupní operace. Proto pokud k chybě dojde mimo operace zmenšení, měli byste provést další vyšetřování problému.
I když se do aplikace nebo uživateli, který spouští operaci zmenšení, vrátí zpráva 8909, operace zmenšení nezkrachují.
Související obsah
- Úvahy o nastavení automatického zvětšování a zmenšování v SQL Serveru
- Databázové soubory a skupiny souborů
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- Zmenšení databáze
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC SHRINKFILE (Transact-SQL)
- Smazání dat nebo souborů protokolu z databáze
- Zmenšení souboru