Udostępnij za pośrednictwem


Kompresja kopii zapasowej (SQL Server)

Dotyczy:SQL Server

W tym artykule opisano kompresję kopii zapasowych programu SQL Server, w tym ograniczenia, kompromis wydajności kompresji kopii zapasowych, konfigurację kompresji kopii zapasowych i współczynnik kompresji. Kompresja kopii zapasowych jest obsługiwana w wersjach programu SQL Server: Enterprise, Standard i Developer. Każda wersja programu SQL Server 2008 (10.0.x) lub nowsza może przywrócić skompresowaną kopię zapasową.

Korzyści

  • Ponieważ skompresowana kopia zapasowa jest mniejsza niż nieskompresowana kopia zapasowa tych samych danych, kompresowanie kopii zapasowej zwykle wymaga mniejszej liczby operacji we/wy urządzenia i dlatego zwykle znacznie zwiększa szybkość tworzenia kopii zapasowych.

    Aby uzyskać więcej informacji, zobacz Wpływ na wydajność kompresowania kopii zapasowych w dalszej części tego artykułu.

Ograniczenia

Następujące ograniczenia dotyczą skompresowanych kopii zapasowych:

  • Skompresowane i nieskompresowane kopie zapasowe nie mogą współistnieć w zestawie multimediów.

  • Poprzednie wersje programu SQL Server nie mogą odczytywać skompresowanych kopii zapasowych.

  • NTbackups nie może współdzielić taśmy ze skompresowanymi kopiami zapasowymi programu SQL Server.

Algorytm kompresji ZSTD wprowadzony w programie SQL Server 2025

Począwszy od wersji zapoznawczej programu SQL Server 2025 (17.x), dostępny jest nowy algorytm kompresji ZSTD do kompresji kopii zapasowych. Ten algorytm jest szybszy i bardziej skuteczny niż poprzedni algorytm MS_XPRESS.

Możesz użyć algorytmu ZSTD do kompresji kopii zapasowej w jeden z następujących sposobów:

  • Określając opcję WITH COMPRESSION (ALGORITHM = ZSTD) w poleceniu BACKUP Transact-SQL dla konkretnej kopii zapasowej.
  • Ustawiając opcję konfiguracji serwera algorytmu kompresji kopii zapasowej na 3. Ta opcja ustawia domyślny algorytm kompresji kopii zapasowej na ZSTD dla wszystkich kopii zapasowych korzystających z WITH COMPRESSION tej opcji.

Uwaga / Notatka

Algorytm ZSTD jest obecnie w wersji zapoznawczej i jest dostępny tylko w wersji zapoznawczej programu SQL Server 2025 (17.x).

Wpływ na wydajność kompresowania kopii zapasowych

Domyślnie kompresja znacznie zwiększa użycie procesora CPU, a dodatkowe użycie procesora CPU przez proces kompresji może negatywnie wpłynąć na operacje współbieżne. W związku z tym możesz utworzyć skompresowane kopie zapasowe o niskim priorytcie w sesji, której użycie procesora CPU jest ograniczone przez zarządcę zasobów. Aby uzyskać więcej informacji, zobacz Używanie zarządcy zasobów do ograniczania użycia procesora CPU przez kompresję kopii zapasowych (Transact-SQL).

Począwszy od programu SQL Server 2022 (16.x), możesz użyć zintegrowanego odciążania i przyspieszenia , aby skompresować kopie zapasowe i odciążyć zasoby procesora CPU dla kopii zapasowej.

Aby uzyskać dobry obraz wydajności operacji we/wy dla kopii zapasowej, można odizolować operacje we/wy związane z kopiami zapasowymi do lub z urządzeń, oceniając poniższe liczniki wydajności.

  • Liczniki wydajności we/wy systemu Windows, takie jak liczniki dysków fizycznych

  • Licznik Przepustowości bajtów urządzenia na sekundę obiektu SQLServer:Backup Device

  • Licznik Przepływność kopii zapasowej/przywracanie/s obiektu SQLServer:Databases

Aby uzyskać informacje o licznikach systemu Windows, zobacz Pomoc systemu Windows. Aby uzyskać informacje o sposobie pracy z licznikami programu SQL Server, zobacz Używanie obiektów programu SQL Server.

Obliczanie współczynnika kompresji skompresowanej kopii zapasowej

Aby obliczyć współczynnik kompresji kopii zapasowej, użyj wartości kopii zapasowej w kolumnach backup_size i compressed_backup_size tabeli historii zestawu kopii zapasowych w następujący sposób:

backup_size:compressed_backup_size

Na przykład współczynnik kompresji 3:1 wskazuje, że oszczędzasz około 66% na dysku. Aby wykonać zapytanie dotyczące tych kolumn, możesz użyć następującej instrukcji Transact-SQL:

SELECT backup_size/compressed_backup_size FROM msdb..backupset;  

Współczynnik kompresji skompresowanej kopii zapasowej zależy od skompresowanych danych. Różne czynniki mogą mieć wpływ na uzyskany współczynnik kompresji. Główne czynniki obejmują:

  • Typ danych.

    Dane tekstowe są kompresowane bardziej skutecznie niż inne typy danych.

  • Spójność danych między wierszami na stronie.

    Zazwyczaj jeśli strona zawiera kilka wierszy, w których pole zawiera tę samą wartość, może wystąpić znaczna kompresja dla tej wartości. Natomiast w przypadku bazy danych zawierającej dane losowe lub zawierające tylko jeden duży wiersz na stronę skompresowana kopia zapasowa byłaby prawie tak duża, jak nieskompresowana kopia zapasowa.

  • Czy dane są szyfrowane

    Zaszyfrowane dane kompresują znacznie mniej niż równoważne niezaszyfrowane dane. Jeśli na przykład dane są szyfrowane na poziomie kolumny za pomocą funkcji Always Encrypted lub z innym szyfrowaniem na poziomie aplikacji, kompresowanie kopii zapasowych może nie zmniejszyć rozmiaru znacznie.

    Aby uzyskać więcej informacji dotyczących kompresowania baz danych zaszyfrowanych za pomocą funkcji Transparent Data Encryption ( TDE), zobacz Kompresja kopii zapasowych za pomocą funkcji TDE.

  • Czy baza danych jest kompresowana.

    Jeśli baza danych jest skompresowana, kompresowanie kopii zapasowych może nie zmniejszyć ich rozmiaru o wiele, jeśli w ogóle.

Kompresja kopii zapasowej za pomocą funkcji TDE

Począwszy od programu SQL Server 2016 (13.x), ustawienie MAXTRANSFERSIZEwiększe niż 65536 (64 KB) umożliwia zoptymalizowany algorytm kompresji dla funkcji Transparent Data Encryption (TDE) zaszyfrowanych baz danych, które najpierw odszyfrują stronę, kompresują ją, a następnie szyfrują ją ponownie. Jeśli MAXTRANSFERSIZE nie określono wartości lub MAXTRANSFERSIZE = 65536 jeśli (64 KB) jest używana, kompresja kopii zapasowej z zaszyfrowanymi bazami danych TDE bezpośrednio kompresuje zaszyfrowane strony i może nie zwracać dobrych współczynników kompresji. Aby uzyskać więcej informacji, zobacz Kompresja kopii zapasowych dla baz danych z obsługą technologii TDE.

Począwszy od programu SQL Server 2019 (15.x) CU5, ustawienie MAXTRANSFERSIZE nie jest już wymagane do włączenia tego zoptymalizowanego algorytmu kompresji za pomocą funkcji TDE. Jeśli zostanie określone WITH COMPRESSION polecenie kopii zapasowej lub domyślna konfiguracja serwera kompresji kopii zapasowej zostanie ustawiona na 1, zostanie automatycznie zwiększona do 128K, MAXTRANSFERSIZE aby włączyć zoptymalizowany algorytm. Jeśli MAXTRANSFERSIZE parametr jest określony w poleceniu kopii zapasowej o wartości > 64K, podana wartość jest honorowana. Innymi słowy, program SQL Server nigdy nie zmniejszy wartości, ale tylko go zwiększy. Jeśli musisz utworzyć kopię zapasową zaszyfrowanej bazy danych TDE przy użyciu , należy określić lub upewnić się, że domyślna konfiguracja serwera kompresji kopii zapasowej ma wartość 0.

Aby uzyskać więcej informacji, zobacz BACKUP (Transact-SQL).

Przydzielanie miejsca dla pliku kopii zapasowej

W przypadku skompresowanych kopii zapasowych rozmiar końcowego pliku kopii zapasowej zależy od tego, jak skompresowane są dane, i jest to nieznane przed zakończeniem operacji tworzenia kopii zapasowej. W związku z tym domyślnie podczas tworzenia kopii zapasowej bazy danych przy użyciu kompresji aparat bazy danych używa algorytmu wstępnej alokacji dla pliku kopii zapasowej. Ten algorytm wstępnie przydziela wstępnie zdefiniowany procent rozmiaru bazy danych dla pliku kopii zapasowej. Jeśli podczas operacji tworzenia kopii zapasowej jest potrzebna większa ilość miejsca, aparat bazy danych zwiększa plik. Jeśli rozmiar końcowy jest mniejszy niż przydzielone miejsce, na końcu operacji tworzenia kopii zapasowej aparat bazy danych zmniejsza plik do rzeczywistego końcowego rozmiaru kopii zapasowej.

Aby zezwolić na zwiększanie rozmiaru pliku kopii zapasowej tylko w razie potrzeby, użyj flagi śledzenia 3042. Flaga śledzenia 3042 powoduje, że operacja tworzenia kopii zapasowej pomija domyślny algorytm preallokacji kompresji kopii zapasowej. Ta flaga śledzenia jest przydatna, jeśli musisz zaoszczędzić miejsce, przydzielając tylko rzeczywisty rozmiar wymagany dla skompresowanej kopii zapasowej. Jednak użycie tej flagi śledzenia może spowodować niewielkie kary za wydajność (możliwy wzrost czasu trwania operacji tworzenia kopii zapasowej).

Powiązane zadania

Dalsze kroki

Przegląd kopii zapasowych (SQL Server)
flagi śledzenia (Transact-SQL)