sys.dm_db_column_store_row_group_physical_stats zwraca statystyki fizyczne grup wierszy indeksu Columnstore.
Co pokazuje widok sys.dm_db_column_store_row_group_physical_stats
sys.dm_db_column_store_row_group_physical_stats jest widokiem dynamicznych funkcji zarządzania w Microsoft SQL Server. Zwraca informacje o fizycznym stanie grup wierszy należących do indeksów Columnstore. Grupa wierszy jest podstawową jednostką organizacji danych w tym typie indeksu: rekordy są dzielone na grupy, a wartości poszczególnych kolumn są przechowywane kolumnowo i kompresowane. Widok pozwala sprawdzić, czy dana grupa została już skompresowana, ile zawiera wierszy, ile rekordów oznaczono jako usunięte oraz jaki rozmiar zajmuje na dysku.
Wyniki dotyczą bieżącej bazy danych, dlatego przed wykonaniem zapytania należy przełączyć się do właściwej bazy lub jednoznacznie uwzględnić jej kontekst w narzędziu administracyjnym. Widok opisuje fizyczny układ indeksu, a nie zawartość biznesową tabeli. Sam odczyt nie zmienia danych ani nie uruchamia przebudowy indeksu.
Identyfikacja indeksu, partycji i grupy wierszy
Kolumny object_id i index_id identyfikują odpowiednio obiekt tabeli lub widoku oraz konkretny indeks Columnstore. Nazwę tabeli można uzyskać przez połączenie z sys.objects, a nazwę indeksu przez sys.indexes. partition_number wskazuje partycję, do której należy grupa, natomiast row_group_id identyfikuje grupę wierszy w obrębie indeksu i partycji. Te wartości są potrzebne, aby odróżnić grupy należące do różnych tabel, indeksów i partycji.
Kolumna state_desc przedstawia stan grupy w postaci tekstowej. Wśród stanów występują między innymi OPEN, CLOSED, COMPRESSED, TOMBSTONE oraz INVISIBLE. Grupa OPEN jest otwarta na dalsze wstawianie wierszy do delta store. Grupa CLOSED nie przyjmuje już kolejnych wierszy, ale nie została jeszcze skompresowana do właściwego formatu Columnstore. COMPRESSED oznacza grupę przechowywaną w skompresowanej części indeksu. Stany TOMBSTONE i INVISIBLE są związane z etapami usuwania albo zmian fizycznych wykonywanych przez silnik.
Wiersze usunięte, przycinanie i kompresja
total_rows określa liczbę wierszy przypisanych do grupy, a deleted_rows informuje, ile z nich zostało oznaczonych jako usunięte. Oznaczenie rekordu jako usuniętego nie musi natychmiast zmniejszyć fizycznego rozmiaru grupy. Jeżeli w wielu skompresowanych grupach występuje wysoki udział usuniętych wierszy, odczyty mogą nadal przetwarzać niepotrzebne dane, dopóki silnik nie wykona odpowiedniej reorganizacji lub przebudowy indeksu.
Kolumny trim_reason i trim_reason_desc opisują powód, dla którego grupa została zamknięta przed osiągnięciem typowego rozmiaru. Przyczyną może być między innymi zakończenie ładowania danych, ograniczenie wynikające z partycji albo inny warunek wewnętrzny silnika. Wartość ta nie jest samodzielnym komunikatem o błędzie. Należy ją analizować razem z liczbą wierszy, stanem grupy, rozmiarem danych i sposobem ładowania tabeli.
size_in_bytes pokazuje fizyczny rozmiar grupy w bajtach. Dodatkowe kolumny opisują przejście do stanu skompresowanego oraz informują, czy zastosowano optymalizację VertiPaq. Przykładowe zapytanie diagnostyczne może wyglądać następująco: SELECT object_id, index_id, partition_number, row_group_id, state_desc, total_rows, deleted_rows, trim_reason_desc, size_in_bytes FROM sys.dm_db_column_store_row_group_physical_stats ORDER BY object_id, index_id, partition_number, row_group_id;. Taki wynik ułatwia znalezienie małych grup, dużej liczby usuniętych rekordów i partycji wymagających dalszej analizy.
Interpretacja wyników przed konserwacją indeksu
Nie każda mała grupa wierszy oznacza awarię. Małe grupy mogą powstać przy częstych, krótkich transakcjach, przerywanych importach, ładowaniu danych partiami albo przy podziale tabeli na partycje. Znaczenie ma wzorzec powtarzający się w wielu grupach. Jeżeli większość grup jest skompresowana i zawiera zbliżoną liczbę wierszy, struktura zwykle działa zgodnie z przeznaczeniem. Jeżeli natomiast występuje wiele grup otwartych lub zamkniętych, a dane powinny być już załadowane, trzeba sprawdzić harmonogram kompresji, obciążenie systemu i sposób wykonywania operacji DML.
Wysoka wartość deleted_rows może wskazywać na intensywne aktualizacje i usuwanie danych w tabeli Columnstore. Przed reorganizacją lub przebudową indeksu należy porównać te wartości z planami zapytań, czasem odczytu oraz rzeczywistym rozmiarem tabeli. Widok dostarcza danych do decyzji administracyjnej, ale nie zastępuje analizy obciążenia. Diagnostyka powinna obejmować także definicję indeksu w sys.indexes, rozkład partycji oraz operacje, które doprowadziły do powstania obserwowanego układu grup.
Podczas serwisowania komputera używanego do pracy z SQL Server analiza tego widoku może pomóc odróżnić problem programu od ograniczeń sprzętowych. Należy jednak zachować kolejność: najpierw sprawdza się stan danych i indeksów w silniku, potem obciążenie procesora, pamięci masowej i pamięci RAM, a dopiero na końcu podejmuje decyzję o zmianie konfiguracji lub wymianie podzespołów. Widok sys.dm_db_column_store_row_group_physical_stats jest źródłem informacji o organizacji indeksu Columnstore, nie narzędziem do bezpośredniej naprawy tabeli.