Mechanizm kompresji danych w SQL Server 2008 Grzegorz Bartosik Agenda Kompresja wierszy Kompresja stron Kompresja vs. wydajność Podsumowanie Kompresja wierszy opiera się na typach danych (sposobie zapisu wartości) polega na przechowywaniu danych w słowach o zmiennej długości dostępne dla następujących typów danych: bigint, binary, bit, char, datetime, datetime2, datetimeoffset, decimal, float, int, money, char, numeric, real, smallint, smallmoney, timestamp/rowversion Kompresja wierszy - przykład Data Czas 2008-09-30 15:00 Kompresja wierszy - howto alter table <nazwa_tabeli> rebuild with (data_compression=row) exec sp_estimate_data_compression_savings '<schemat>', '<tabela>', <id indeksu>, <nr partycji>, '<typ kompresji>'; Kompresja indeksów • jeśli na tabeli z indeksem zgrupowanym włączana jest kompresja, indeks otrzymuje takie sam rodzaj kompresji; • jeśli na tabeli jest włączona kompresja, a następnie tworzymy na niej indeks zgrupowany, to dziedziczy on ustawienia kompresji z tabeli (chyba że zostało wyspecyfikowane inaczej); • indeksy niezgrupowane nie dziedziczą ustawień kompresji po tabeli, na której są tworzone Kompresja stron niezależny od typu danych opiera się całkowicie na powtarzających się ciągach bitów można podzielić na dwie fazy kompresję prefiksów kompresja słownikowa procesy postępują niezależne od siebie, ale kompresja słownikowa korzysta ze stron skompresowanych w pierwszym etapie Kompresja prefiksów Kompresja słownikowa Kompresja - zalety Serwer bazy danych może umieścić więcej stron w buforze stron, przy tej samej ilości pamięci operacyjnej; Współczynnik kompresji od 2 do 6 Przyspieszenie przy dużych operacjach na dysku; Łatwość implementacji, dobre narzędzia, dobra dokumentacja; Kompresja - wady Obciążenie operacji DML Dostęp do bufora stron również jest obciążony koniecznością dekompresji strony Kompresja - uwagi Kompresja stron jest bardziej obciążająca dla procesora niż kompresja wierszy; Kompresja stron lepiej kompresuje dane niż kompresja wierszy; Poziom kompresji tabeli (na której jest założony indeks zgrupowany) jest zależny od rozkładu danych; Funkcjonalność ta występuje tylko w edycji Enterprise i Developer serwera SQL 2008.