Sdílet prostřednictvím


Zmenšení souboru

platí pro: SQL Server Azure SQL DatabaseAzure SQL Managed Instance

Tento článek popisuje, jak zmenšit data nebo soubor protokolu v SQL Serveru pomocí aplikace SQL Server Management Studio nebo jazyka Transact-SQL.

Zmenšení datových souborů obnoví místo přesunutím stránek dat z konce souboru do neobsazeného prostoru blíže k přední části souboru. Když se na konci souboru vytvoří dostatek volného místa, datové stránky na konci souboru se dají uvolnit a vrátit do systému souborů.

Výstraha

  • Data, která jsou přesunuta za účelem zmenšení souboru, mohou být rozptýlena na jakékoliv dostupné místo v souboru. To způsobuje fragmentaci indexu a může zpomalit výkon dotazů, které prohledávají rozsah indexu. Pokud chcete fragmentaci odstranit, zvažte opětovné sestavení indexů v souboru po zmenšení.
  • Operace zmenšení by se neměly považovat za pravidelnou operaci údržby. Data a soubory protokolů, které se zvětšují z důvodu pravidelných opakovaných obchodních operací, nevyžadují operace zmenšení.

Omezení

  • Primární datový soubor nemůže být menší než velikost primárního souboru v model databázi.

Doporučení

  • Operace zmenšení je nejúčinnější po operaci, která vytvoří velké množství nevyužitého prostoru úložiště, jako je například velký příkaz DELETE, zkrácení tabulky nebo operace odstranění tabulky.

  • Většina databází vyžaduje, aby bylo k dispozici nějaké volné místo pro běžné každodenní operace. Pokud zmenšíte soubor databáze opakovaně a všimněte si, že se velikost databáze znovu zvětší, znamená to, že pro běžné operace se vyžaduje volné místo. V těchto případech je opakované zmenšení souboru databáze plýtvání operací. Události automatického zvětšování potřebné k růstu databázového souboru brání výkonu.

  • Data, která jsou přesunuta za účelem zmenšení souboru, mohou být rozptýlena na jakékoliv dostupné místo v souboru. To způsobuje fragmentaci indexu a může zpomalit výkon dotazů, které prohledávají rozsah indexu. Pokud chcete fragmentaci odstranit, zvažte opětovné sestavení indexů v souboru po zmenšení.

  • Pokud nemáte konkrétní požadavek, nenastavujte možnost AUTO_SHRINK databáze na hodnotu ZAPNUTO.

Poznámky

Probíhající operace zmenšení můžou blokovat další dotazy v databázi a mohou být blokovány probíhajícími dotazy. V systému SQL Server 2022 (16.x) má operace zmenšení souboru možnost WAIT_AT_LOW_PRIORITY. Tato funkce je novou další možností pro DBCC SHRINKDATABASE a DBCC SHRINKFILE. Pokud nová operace zmenšení v WAIT_AT_LOW_PRIORITY režimu nemůže získat potřebné zámky kvůli dlouhotrvajícímu dotazu, který už probíhá, operace zmenšení se po jedné minutě nakonec časově omezeně ukončí, čímž zabrání zablokování dalších dotazů. WAIT_AT_LOW_PRIORITY platí pro datové soubory (.mdf &ndf). Nevztahuje se na soubory transakčních protokolů. Další informace naleznete v tématu DBCC SHRINKFILE (Transact-SQL).

Povolení

Vyžaduje členství v pevné roli serveru sysadmin nebo v pevné databázové roli db_owner.

Použití aplikace SQL Server Management Studio (SSMS) ke zmenšení souboru dat nebo protokolu

  1. V Object Explorerse připojte k instanci databázového stroje SQL Server a poté rozbalte tuto instanci.

  2. Rozbalte položku Databáze a klikněte pravým tlačítkem myši na databázi, kterou chcete zmenšit.

  3. Přejděte na úkoly, přejděte na příkaz Zmenšit a vyberte Soubory.

    Databáze
    Zobrazí název vybrané databáze.

    Typ souboru
    Vyberte typ souboru pro soubor. Dostupné možnosti jsou datové soubory a protokolové soubory. Výchozí výběr je Data. Výběrem jiného typu skupiny souborů se odpovídajícím způsobem změní výběry v ostatních polích.

    skupina souborů
    Ze seznamu skupin souborů přidružených k vybranému typu Soubor výše vyberte skupinu souborů. Výběrem jiné skupiny souborů se odpovídajícím způsobem změní výběry v ostatních polích.

    Název souboru
    Ze seznamu dostupných souborů vybrané skupiny souborů a typu souboru vyberte soubor.

    Umístění
    Zobrazí úplnou cestu k aktuálně vybranému souboru. Cesta se nedá upravovat, ale dá se zkopírovat do schránky.

    Aktuálně přidělený prostor
    U datových souborů se zobrazí aktuální přidělený prostor. U souborů protokolu zobrazí aktuální přidělený prostor vypočítaný z výstupu DBCC SQLPERF(LOGSPACE).

    Volné místo
    U datových souborů zobrazí aktuální dostupné volné místo vypočítané z výstupu DBCC SHOWFILESTATS(fileid). U souborů protokolu zobrazí aktuální dostupné volné místo vypočítané z výstupu DBCC SQLPERF(LOGSPACE).

    Uvolnění nevyužitého místa
    Způsobit uvolnění nevyužitého místa v souborech do operačního systému a zmenšení souboru do posledního přiděleného rozsahu, čímž se zmenší velikost souboru bez přesunu dat. Není proveden žádný pokus o přemístění řádků na nepřidělené stránky.

    Změna uspořádání stránek před uvolněním nevyužitého místa
    Rovná se provedení DBCC SHRINKFILE s určením cílové velikosti souboru. Pokud je tato možnost vybrána, musí uživatel zadat cílovou velikost souboru v poli Zmenšit soubor.

    Zmenšení souboru na
    Určuje cílovou velikost souboru pro operaci zmenšení. Velikost nemůže být menší než aktuální přidělený prostor nebo větší než celkové rozsahy přidělené souboru. Po změně fokusu nebo výběru některého z tlačítek na panelu nástrojů se zadání hodnoty nad minimum nebo maximum vrátí na minimum nebo maximum.

    Prázdný soubor migrací dat do jiných souborů ve stejné skupině souborů
    Migrujte všechna data ze zadaného souboru. Tato možnost umožňuje vyřazení souboru pomocí příkazu ALTER DATABASE . Tato volba je ekvivalentní provádět DBCC SHRINKFILE s touto možností EMPTYFILE. EMPTYFILE se nepodporuje ve službě Azure SQL Database ani Azure SQL Database Hyperscale.

  4. Vyberte typ souboru a název souboru.

  5. Volitelně zaškrtněte políčko Uvolnit nevyužité místo .

    Výběrem této možnosti dojde k uvolnění nevyužitého místa v souboru do operačního systému a zmenšení souboru do posledního přiděleného rozsahu. Tím se zmenšuje velikost souboru bez přesunu dat.

  6. Volitelně můžete před uvolněním nepoužitého místa zaškrtnout políčko Změnit uspořádání souborů . Pokud je tato možnost vybrána, je nutné zadat hodnotu Zmenšit soubor na hodnotu. Ve výchozím nastavení je tato možnost odškrtnutá.

    Výběrem této možnosti dojde k uvolnění nevyužitého místa v souboru do operačního systému a pokusu o přemístění řádků na nepřidělené stránky.

  7. Volitelně můžete zadat maximální procento volného místa, které se má nechat v databázovém souboru po zmenšení databáze. Přípustné hodnoty jsou v rozmezí od 0 do 99. Tato možnost je dostupná jenom v případě, že je povolená změna uspořádání souborů před uvolněním nepoužívaného místa .

  8. Volitelně můžete zaškrtnout políčko Vyprázdnit soubor přesunutím dat do jiných souborů ve stejné skupině souborů.

    Výběrem této možnosti přesunete všechna data ze zadaného souboru do jiných souborů ve skupině souborů. Prázdný soubor pak můžete odstranit. Tato možnost je stejná jako spuštění DBCC SHRINKFILE s možností EMPTYFILE.

  9. Vyberte OK.

Použití Transact-SQL ke zmenšení dat nebo souboru protokolu

  1. Připojte se k databázovému stroji.

  2. Na panelu Standard vyberte Nový dotaz.

  3. Zkopírujte a vložte následující příklad do okna dotazu a vyberte Spustit. Tento příklad používá DBCC SHRINKFILE (Transact-SQL) ke zmenšení velikosti datového souboru pojmenovaného DataFile1UserDB v databázi na 7 MB.

USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO