Megosztás a következőn keresztül:


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.

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.

  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 a Ctrl+C parancssori ablakban, indítsa újra az SQL Servert szolgáltatásként, majd ellenőrizze a tempdb.mdf és a templog.ldf fá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.

  1. Ellenőrizze a sp_spaceused tárolt eljárással a jelenleg használt tempdb tárhelyet. Ezután számítsa ki a paraméterként használandó szabad terület százalékos arányát DBCC 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 = true kell. 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. Ossza el a 200 MB-t 800 MB-mal: ez 25 százalék, és ez az érték az Ön 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. 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.

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