Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL kezelt példány
Ez a cikk az SQL Server tempdb adatbázisának zsugorítására használható különböző módszereket ismerteti.
A következő módszerek bármelyikével módosíthatja a méretét tempdb. Az első három lehetőséget ebben a cikkben ismertetjük. Ha az SQL Server Management Studio (SSMS) szolgáltatást szeretné használni, kövesse az Adatbázis zsugorításacímű témakör utasításait.
| Módszer | Újraindítást igényel? | További információ |
|---|---|---|
ALTER DATABASE |
Igen | Az alapértelmezett tempdb fájlok (tempdev és templog) méretének teljes vezérlését biztosítja. |
DBCC SHRINKDATABASE |
Nem | Adatbázis szintjén működik. |
DBCC SHRINKFILE |
Nem | Lehetővé teszi az egyes fájlok zsugorítását. |
| SQL Server Management Studio | Nem | Adatbázisfájlok zsugorítása grafikus felhasználói felületen keresztül. |
Megjegyzések
Alapértelmezés szerint a tempdb adatbázis úgy van beállítva, hogy szükség szerint automatikusan bővüljön. Ezért előfordulhat, hogy ez az adatbázis idővel váratlanul a kívánt méretnél nagyobb méretűre nő. A nagyobb tempdb adatbázisméretek nem befolyásolják hátrányosan az SQL Server teljesítményét.
Amikor az SQL Server elindul, a tempdb újra létrejön a model adatbázis egy példányának felhasználásával, és a tempdb az utolsó konfigurált méretére áll vissza. A konfigurált méret az utolsó explicit méret, amelyet fájlméret-módosítási művelettel, például ALTER DATABASE beállítással MODIFY FILE vagy DBCC SHRINKFILEDBCC SHRINKDATABASE utasításokkal állított be. Ezért, ha nem kell más értékeket használnia, vagy ha azonnal fel szeretne oldani egy nagy tempdb adatbázist, megvárhatja az SQL Server szolgáltatás következő újraindítását, amíg a méret csökken.
Csökkentheti tempdb méretét, miközben a tempdb tevékenység folyamatban van. Előfordulhat azonban, hogy más hibákkal is találkozik, például blokkolás, holtpontok stb., amelyek megakadályozhatják a zsugorítási folyamatot. Annak biztosítása érdekében, hogy a tempdb sikeres legyen, hajtsa végre ezt a műveletet, amíg a kiszolgáló egyfelhasználós módban van, vagy amikor az összes tempdb tevékenység le van állítva.
Az SQL Server csak annyi információt rögzít a tempdb tranzakciónaplóban, hogy visszaállítsa a tranzakciót, de az adatbázis-helyreállítás során ne hajtsa újra a tranzakciókat. Ez a funkció növeli a INSERT utasításoknak a teljesítményét a tempdb-ben. Emellett nem kell naplóznia az adatokat a tranzakciók újbóli elvégzéséhez, mert a tempdb minden alkalommal újra létrejön, amikor újraindítja az SQL Servert. Ezért nem rendelkezik olyan tranzakcióval, amely előrébb vagy visszagördülhet.
A tempdbkezeléséről és monitorozásáról további információt Kapacitástervezési és Tempdb-használat monitorozásacímű témakörben talál.
Az ALTER DATABASE parancs használata
Jegyzet
Ez a parancs csak az alapértelmezett tempdb logikai fájlokon tempdev és templog. Ha további fájlokat ad hozzá tempdb, az SQL Server szolgáltatásként való újraindítása után zsugoríthatók. Az indítás során minden tempdb fájl újra létrejön. Ezek a fájlok azonban üresek, és eltávolíthatók. Ha extra fájlokat szeretne eltávolítani a tempdb, használja a ALTER DATABASE parancsot a REMOVE FILE opcióval.
Ehhez a metódushoz újra kell indítania az SQL Servert.
Jegyzet
Az SQL Server egy példányához bármilyen ismerős SQL Server-ügyféleszközzel csatlakozhat, például sqlcmd, SQL Server Management Studio (SSMS) vagy a Visual Studio Code MSSQL-bővítményével.
Állítsa le az SQL Servert.
A parancssorban indítsa el a példányt minimális konfigurációs módban. Ehhez kövesse az alábbi lépéseket:
A parancssorban váltson arra a mappára, amelyben az SQL Server telepítve van (cserélje le
<VersionNumber>és<InstanceName>az alábbi példában):cd C:\Program Files\Microsoft SQL Server\MSSQL<VersionNumber>.<InstanceName>\MSSQL\BinnHa a példány az SQL Server nevesített példánya, futtassa a következő parancsot (cserélje le a
<InstanceName>a következő példában):sqlservr.exe -s <InstanceName> -c -f -mSQLCMDHa a példány az SQL Server alapértelmezett példánya, futtassa a következő parancsot:
sqlservr -c -f -mSQLCMDJegyzet
A
-cés-fparaméterek miatt az SQL Server minimális konfigurációs módban indul el, amely az adatfájlhoztempdbmérete 1 MB, a naplófájlhoz pedig 0,5 MB. A-mSQLCMDparaméter megakadályozza, hogy a sqlcmd kívül más alkalmazás is átvenje az egyfelhasználós kapcsolatot.
Csatlakozzon az SQL Serverhez sqlcmd, majd futtassa az alábbi Transact-SQL parancsokat. Cserélje le
<target_size_in_MB>a kívánt méretre:ALTER DATABASE tempdb MODIFY FILE (NAME = 'tempdev', SIZE = <target_size_in_MB>); ALTER DATABASE tempdb MODIFY FILE (NAME = 'templog', SIZE = <target_size_in_MB>);Állítsa le az SQL Servert. Ehhez nyomja le a
Ctrl+Cparancssori ablakban, indítsa újra az SQL Servert szolgáltatásként, majd ellenőrizze atempdb.mdfés atemplog.ldffájlok méretét.
A DBCC SHRINKDATABASE parancs használata
DBCC SHRINKDATABASE a paramétert target_percent veszi fel. Ez a paraméter az adatbázisfájlban az adatbázis zsugorítása után elhagyandó szabad terület százalékos arányát állítja be. Ha használja DBCC SHRINKDATABASE, előfordulhat, hogy újra kell indítania az SQL Servert.
Ellenőrizze a
sp_spaceusedtárolt eljárással a jelenleg használttempdbtárhelyet. Ezután számítsa ki a paraméterként használandó szabad terület százalékos arányátDBCC SHRINKDATABASE. Ez a számítás a kívánt adatbázisméreten alapul.Jegyzet
Bizonyos esetekben előfordulhat, hogy a használt terület újraszámításához és egy frissített jelentés beszerzéséhez futnia
sp_spaceused @updateusage = truekell. További információért lásd: sp_spaceused.Vegye figyelembe a következő példát:
Tegyük fel, hogy
tempdbkét fájllal rendelkezik: az elsődleges adatfájl (tempdb.mdf), amely 1024 MB, a naplófájl (tempdb.ldf) pedig 360 MB. Tegyük fel, hogysp_spaceusedjelenti, hogy az elsődleges adatfájl 600 MB adatot tartalmaz. Tegyük fel azt is, hogy az elsődleges adatfájlt 800 MB-ra szeretné zsugoríteni. Számítsa ki a zsugorítás után maradt szabad terület kívánt százalékos arányát: 800 MB – 600 MB = 200 MB. Ossza el a 200 MB-t 800 MB-mal: ez 25 százalék, és ez az érték az Öntarget_percent. A tranzakciónapló-fájl ennek megfelelően csökken, így az adatbázis zsugorulása után 25 százalék vagy 200 MB szabad terület marad.Futtassa a következő Transact-SQL parancsot. Cserélje le a
<target_percent>a kívánt százalékra:DBCC SHRINKDATABASE (tempdb, '<target_percent>');
A DBCC SHRINKDATABASE parancs korlátozásokkal rendelkezik, ha tempdb-en/-on használják. Nem állíthatja be az adatok és naplófájlok célméretét az adatbázis létrehozásakor megadott méretnél kisebbre. Fájlméret-módosítási művelettel( például ALTER DATABASE a beállítással MODIFY FILE ) azt sem állíthatja be kisebbre, mint a legutóbb beállított méret. Egy másik korlátozás DBCC SHRINKDATABASE esetében a target_percentage paraméter kiszámítása és annak függősége a jelenleg használt területre.
A DBCC SHRINKFILE parancs használata
Az egyes DBCC SHRINKFILE fájlok zsugorításához használja a tempdb parancsot.
DBCC SHRINKFILE nagyobb rugalmasságot biztosít, mint DBCC SHRINKDATABASE, mivel egyetlen adatbázisfájlban is használhatja anélkül, hogy hatással lenne az ugyanazon adatbázishoz tartozó többi fájlra.
DBCC SHRINKFILE a paramétert target_size veszi fel. Ez a paraméter beállítja az adatbázisfájl kívánt végső méretét.
Határozza meg az elsődleges adatfájl (
tempdb.mdf), a naplófájl (templog.ldf) és atempdbhozzáadott további fájlok kívánt méretét. Győződjön meg arról, hogy a fájlokban használt terület kisebb vagy egyenlő a kívánt célméretnél.Csatlakozzon az SQL Serverhez SSMS,Visual Studio Code vagy sqlcmd használatával. Ezután futtassa az alábbi Transact-SQL parancsokat a zsugoríteni kívánt adatbázisfájlokhoz. Cserélje le
<target_size_in_MB>a kívánt méretre: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
Ennek az az előnye DBCC SHRINKFILE , hogy a fájl méretét az eredeti méreténél kisebb méretre csökkentheti.
DBCC SHRINKFILE futtatható bármelyik adaton vagy naplófájlon. Az adatbázist nem lehet kisebbre tenni a model-adatbázis méreténél.
8909-s hiba zsugorítási műveletek futtatásakor
Ha tempdb használatban van, és megpróbálja csökkenteni az DBCC SHRINKDATABASE vagy DBCC SHRINKFILE parancsokkal, az alábbi kimenethez hasonló üzeneteket kaphat. A pontos üzenet az SQL Server használt verziójától függ:
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).
A hiba nem jelez semmilyen valódi hibát a tempdb-ban. A fizikai adatsérülési hibáknak azonban lehetnek más okai is, például a 8909-s hiba, és ezek közé tartoznak az I/O-alrendszer problémái. Ezért ha a hiba a zsugorítási műveleteken kívül történik, további vizsgálatot kell végeznie.
Bár a rendszer egy 8909-üzenetet ad vissza az alkalmazásnak vagy a zsugorítási műveletet végrehajtó felhasználónak, a zsugorítási műveletek nem hiúsulnak meg.
Kapcsolódó tartalom
- Az SQL Server automatikus növekedés és automatikus zsugorodás beállításainak szempontjai
- Adatbázisfájlok és fájlcsoportok
- sys.databases (Transact-SQL)
- sys.database_files (Transact-SQL)
- Adatbázis- zsugorítása
- DBCC SHRINKDATABASE (Transact-SQL)
- DBCC ZSUGORÍTÁSFÁJL (Transact-SQL)
- Adatok vagy naplófájlok törlése adatbázis-
- Fájl zsugorítása