Udostępnij za pośrednictwem


Zmniejszanie bazy danych

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

W tym artykule opisano sposób zmniejszania bazy danych w programie SQL Server przy użyciu Eksploratora obiektów w programie SQL Server Management Studio lub Transact-SQL.

Zmniejszanie plików danych odzyskuje miejsce, przenosząc strony danych z końca pliku do wolnego miejsca bliżej przodu pliku. Po utworzeniu wystarczającej ilości wolnego miejsca na końcu pliku, strony danych na końcu pliku mogą zostać dealokowane i zwrócone do systemu plików.

Ograniczenia i ograniczenia

  • Nie można zmniejszyć bazy danych niż minimalny rozmiar bazy danych. Minimalny rozmiar to rozmiar określony podczas tworzenia bazy danych lub ostatni jawny rozmiar ustawiony przy użyciu operacji zmiany rozmiaru pliku, takiej jak DBCC SHRINKFILE. Jeśli na przykład baza danych została pierwotnie utworzona o rozmiarze 10 MB i wzrosła do 100 MB, najmniejszy rozmiar bazy danych można zmniejszyć do 10 MB, nawet jeśli wszystkie dane w bazie danych zostały usunięte.

  • Nie można zmniejszyć bazy danych podczas tworzenia kopii zapasowej bazy danych. Z drugiej strony nie można utworzyć kopii zapasowej bazy danych, gdy trwa operacja zmniejszania bazy danych.

Zalecenia

  • Aby wyświetlić bieżącą ilość wolnego (nieprzydzielonego) miejsca w bazie danych. Aby uzyskać więcej informacji, zobacz informacje o wyświetlaniu danych oraz przestrzeni dziennika dla bazy danych

  • Podczas planowania zmniejszenia bazy danych należy wziąć pod uwagę następujące informacje:

    • Operacja zmniejszania jest najbardziej efektywna po operacji, która tworzy dużą ilość nieużywanego miejsca, na przykład znaczącej operacji DELETE, skrócenia tabeli lub usunięcia tabeli.

    • W przypadku codziennych operacji większość baz danych wymaga wolnego miejsca. Jeśli wielokrotnie zmniejszasz bazę danych i zauważasz, że rozmiar bazy danych ponownie wzrośnie, oznacza to, że wolne miejsce jest wymagane do regularnych operacji. W takich przypadkach wielokrotne zmniejszanie bazy danych to zmarnowana operacja. Zdarzenia automatycznego zwiększania rozmiaru niezbędne do zwiększenia liczby plików bazy danych utrudniają wydajność.

    • Operacja kurczenia nie zachowuje stanu fragmentacji indeksów w bazie danych i zazwyczaj zwiększa fragmentację do pewnego stopnia. Jest to kolejny powód, aby nie wielokrotnie zmniejszać bazy danych.

    • Jeśli nie masz określonego wymagania, nie ustawiaj opcji AUTO_SHRINK bazy danych na "Włączona".

uprawnienia

Wymaga członkostwa w stałej roli serwera sysadmin lub w stałej roli bazy danych db_owner.

Uwagi

Operacje zmniejszania w toku mogą blokować inne zapytania w bazie danych i mogą być blokowane przez zapytania już w toku. W programie SQL Server 2022 (16.x) wprowadzono opcję WAIT_AT_LOW_PRIORITY do operacji zmniejszania bazy danych. Ta funkcja jest nową dodatkową opcją dla DBCC SHRINKDATABASE i DBCC SHRINKFILE. Jeśli nowa operacja zmniejszania w trybie WAIT_AT_LOW_PRIORITY nie może uzyskać niezbędnych blokad z powodu długotrwałego zapytania już w toku, operacja zmniejszania ostatecznie przerywa po jednej minucie i dyskretnie zakończy działanie, uniemożliwiając zablokowanie innych zapytań. Aby uzyskać więcej informacji, zobacz DBCC SHRINKDATABASE.

Aby uzyskać informacje na temat zarządzania plikami i zmniejszania operacji specyficznych dla usługi Azure SQL Database, zobacz Zarządzanie miejscem na pliki dla baz danych w usłudze Azure SQL Database.

Korzystanie z programu SQL Server Management Studio

Dotyczy: SQL Server, Azure SQL Managed Instance

Zmniejszanie bazy danych

  1. W eksploratorze obiektów połącz się z wystąpieniem aparatu bazy danych programu SQL Server, a następnie rozwiń to wystąpienie.

  2. Rozwiń węzeł Bazy danych, a następnie kliknij prawym przyciskiem myszy bazę danych, którą chcesz pomniejszyć.

  3. Wskaż Tasks, wskaż Shrink, a następnie wybierz Database.

    • Baza danych

      Wyświetla nazwę wybranej bazy danych.

    • bieżące przydzielone miejsce

      Wyświetla łączną ilość używanego i nieużywanego miejsca dla wybranej bazy danych.

    • Dostępne wolne miejsce

      Wyświetla sumę wolnego miejsca w plikach dziennika i danych wybranej bazy danych.

    • Zreorganizuj pliki przed zwolnieniem nieużywanego miejsca

      Wybranie tej opcji jest równoważne wykonywaniu polecenia DBCC SHRINKDATABASE określającą opcję procentu docelowego. Wyczyszczenie tej opcji jest równoważne wykonywaniu polecenia DBCC SHRINKDATABASE z opcją TRUNCATEONLY. Domyślnie ta opcja nie jest wybierana po otwarciu okna dialogowego. Jeśli ta opcja jest zaznaczona, użytkownik musi określić opcję procentu docelowego.

    • Maksymalna ilość wolnego miejsca w plikach po zmniejszeniu

      Wprowadź maksymalny procent wolnego miejsca, który ma pozostać w plikach bazy danych po zmniejszeniu rozmiaru bazy danych. Dopuszczalne wartości to od 0 do 99.

  4. Wybierz pozycję OK.

Użyj Transact-SQL

Zmniejszanie bazy danych

  1. Połącz się z silnikiem bazy danych.

  2. Na pasku Standard wybierz pozycję Nowe zapytanie.

  3. Skopiuj poniższy przykład i wklej go w oknie zapytania, a następnie wybierz pozycję Wykonaj. W tym przykładzie użyto DBCC SHRINKDATABASE, aby zmniejszyć rozmiary plików danych i dziennika w bazie danych UserDB oraz zapewnić 10 procent wolnego miejsca w bazie danych.

DBCC SHRINKDATABASE (UserDB, 10);
GO

Po zmniejszeniu bazy danych

Dane przenoszone w celu zmniejszenia pliku mogą być rozproszone do dowolnej dostępnej lokalizacji w pliku. Powoduje to fragmentację indeksu i może spowolnić wydajność zapytań, które wyszukują zakres indeksu. Aby wyeliminować fragmentację, rozważ odbudowę indeksów w pliku po jego zmniejszeniu. Aby uzyskać więcej informacji, zobacz Ponowne kompilowanie indeksu.