Megosztás:


A tempdb-adatbázis zsugorítása

A következőkre vonatkozik:SQL ServerAzure 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.

Az alábbi módszerek bármelyikével módosíthatja a tempdbméretét. 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 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.

Az SQL Server indításakor a tempdb a model adatbázis másolatával jön létre újra, és tempdb az utolsó konfigurált méretre lesz visszaállítva. A konfigurált méret az utolsó explicit méret, amelyet egy fájlméret-módosítási művelettel állítottak be, például ALTER DATABASE, amely a MODIFY FILE beállítást vagy a DBCC SHRINKFILE vagy DBCC SHRINKDATABASE utasítást használja. Ezért, ha nem kell különböző értékeket használnia, vagy nem kell azonnali megoldást kapnia egy nagy tempdb adatbázisra, 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. Ezért annak érdekében, hogy a tempdb zsugorítása sikeres legyen, javasoljuk, hogy ezt tegye meg, amíg a kiszolgáló egyfelhasználós módban van, vagy amikor leállítja az összes tempdb tevékenységet.

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 templogműködik. Ha további fájlokat ad hozzá a tempdb-hoz, az SQL Server szolgáltatásként történő újraindítása után összezsugoríthatja őket. 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. További fájlok eltávolításához a tempdb-ban használja a ALTER DATABASE parancsot a REMOVE FILE opcióval.

Ehhez a metódushoz újra kell indítania az SQL Servert.

  1. Állítsa le az SQL Servert.

  2. 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:

    1. 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\Binn
      
    2. Ha 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 -mSQLCMD
      
    3. Ha a példány az SQL Server alapértelmezett példánya, futtassa a következő parancsot:

      sqlservr -c -f -mSQLCMD
      

      Jegyzet

      A -c és -f paraméterek miatt az SQL Server minimális konfigurációs módban indul el, amely az adatfájlhoz tempdb mérete 1 MB, a naplófájlhoz pedig 0,5 MB. A -mSQLCMD paraméter megakadályozza, hogy a sqlcmd kívül más alkalmazás is átvenje az egyfelhasználós kapcsolatot.

  3. 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>);
    
  4. Állítsa le az SQL Servert. Ehhez nyomja le Ctrl+C a parancssori ablakban, indítsa újra az SQL Servert szolgáltatásként, majd ellenőrizze a tempdb.mdf és templog.ldf fájlok méretét.

A DBCC SHRINKDATABASE parancs használata

DBCC SHRINKDATABASE megkapja a target_percentparamétert. Ez az a kívánt szabad terület százalékos aránya, amely az adatbázisfájlban marad az adatbázis tömörítése után. Ha DBCC SHRINKDATABASEhasznál, előfordulhat, hogy újra kell indítania az SQL Servert.

  1. Határozza meg a tempdb jelenleg használt területet a sp_spaceused tárolt eljárás használatával. Ezután számítsa ki a DBCC SHRINKDATABASEparaméterként használandó szabad terület százalékos arányát. Ez a számítás a kívánt adatbázisméreten alapul.

    Jegyzet

    Bizonyos esetekben előfordulhat, hogy végre kell hajtania sp_spaceused @updateusage = true a felhasznált terület újraszámításához és egy frissített jelentés beszerzéséhez. További információért lásd: sp_spaceused.

    Vegye figyelembe a következő példát:

    Tegyük fel, hogy tempdb ké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, hogy sp_spaceused jelenti, 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. Most ossza el 200 MB-t 800 MB-tal = 25 százalék, és ez a target_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.

  2. Csatlakozzon az SQL Serverhez az SSMS, az Azure Data Studio vagy sqlcmdhasználatával, majd 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 SHRINKDATABASEtempdb parancsának korlátozásai vannak. Az adatok és naplófájlok célmérete nem lehet kisebb, mint az adatbázis létrehozásakor megadott méret, vagy kisebb az utolsó méretnél, amelyet kifejezetten a fájlméret-módosítási művelettel állítottak be, például ALTER DATABASE, amely a MODIFY FILE lehetőséget használja. A DBCC SHRINKDATABASE másik korlátozása a target_percentage paraméter kiszámítása, valamint annak függősége a használt aktuális területhez.

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 megkapja a target_size paramétert. Ez az adatbázisfájl kívánt végső mérete.

  1. Határozza meg az elsődleges adatfájl (tempdb.mdf), a naplófájl (templog.ldf) és a tempdbhozzá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.

  2. Csatlakozzon az SQL Serverhez az SSMS, az Azure Data Studio vagy sqlcmdhasználatával, majd futtassa a következő 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
    

A DBCC SHRINKFILE előnye, hogy az eredeti méretnél kisebb méretűre csökkentheti a fájl méretét. A DBCC SHRINKFILE-t bármelyik adat- vagy naplófájlon kiadhatja. 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ál, és a DBCC SHRINKDATABASE vagy DBCC SHRINKFILE parancsokkal próbálja csökkenteni, a használt SQL Server-verziótól függően az alábbihoz hasonló üzeneteket kaphat:

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.