Wymagania: W bazie danych SQL Server istnieje tabela (np. tabela logów, tabela logów żądań), która zajmuje bardzo dużą przestrzeń na dysku, może setki GB, jak zmniejszyć zużycie przestrzeni w tabeli? Kompresja danych (oszczędzająca miejsce) może być włączona dla bardzo powtarzalnego tekstu (np. HTML, JSON, logi).
Kompresja ROW
Kompresja zmienia fizyczną pamięć danych, ale nie ich strukturę logiczną. Proces kompresji linii:
Zidentyfikuj typ danych każdej kolumny i przekonwertuj go na zmienną długość Wreszcie, liczba żądań do miejsca przechowywania zostaje zmniejszona do rzeczywistego zapotrzebowania Po kompresji ilość przechowywanych danych na każdej stronie jest zwiększana Po kompresji zmniejsz ilość metadanych Na przykład, jeśli typ danych kolumny jest smallint, system domyślnie przydziela 2 bajty W rzeczywistości jednak używa się tylko 1 bajtu przestrzeni, a jeśli kompresja jest włączona na tabeli, można ją przydzielać na żądanie
Kompresja PAGE
Kompresja strony wykonuje dodatkowe operacje poprawiające kompresję wierszy Główne operacje: kompresja linii, kompresja prefiksów, kompresja słownikowa
Zużycie CPU: kompresja PAGE > kompresja wiersza
Test
Utworzenie nowych tabel Users1 i Users2, obie wstaw 100 000 fragmentów danych, a skrypt SQL wygląda następująco:
Aby zobaczyć obsadność przestrzeni w tabeli, która wynosi 3,27 MB, polecenie jest następujące:
Jak pokazano poniżej:
Aby zobaczyć status kompresji tabeli Users2, polecenie jest następujące:
Jak pokazano poniżej:
sp_estimate_data_compression_savingsOszacuj oszczędności, które mogą nastąpić, gdy włączysz tabele lub partycje dla wierszy, stron, magazynów kolumn, archiwów magazynu kolumn lub kompresji XML. Polecenie brzmi następująco:
Wyniki są następujące:
object_name schema_name index_id partition_number size_with_current_compression_setting(KB) size_with_requested_compression_setting(KB) sample_size_with_current_compression_setting(KB) sample_size_with_requested_compression_setting(KB) Users2 dbo 1 1 3368 1296 3448 1328
size_with_current_compression_setting (KB) 3368 KB Indeks zajmuje ≈ 3,29 MB przy obecnych ustawieniach kompresji size_with_requested_compression_setting (KB) 1296 KB Szacowana powierzchnia ≈ 1,27 MB, jeśli włączysz nową metodę kompresji, o którą prosisz, taką jak PAGE lub ROW Aby wykonać kompresję strony, polecenie wygląda następująco:
Porównanie efektów:Tabela Users2 to 3,27 MB przed kompresją i 1,23 MB po kompresji, jak pokazano na poniższym rysunku:
Wizualizacja wygląda następująco:
Odniesienie:
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne.
Logowanie do linku jest widoczne. |