Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Row group

Termin Definicja
Row group

Row group to jednostka danych w indeksie Columnstore, obejmująca zwykle do miliona wierszy.

Row group jako jednostka danych w indeksie Columnstore

Row group to logicznie wydzielony zakres wierszy przechowywany w kolumnowym indeksie danych. Nie jest osobną tabelą ani dodatkową kolumną, lecz fragmentem struktury, który porządkuje sposób zapisu, kompresji i odczytu informacji. W typowym przypadku jeden taki zakres obejmuje do około miliona wierszy, choć rzeczywisty rozmiar może być mniejszy zależnie od sposobu ładowania danych, dostępnej pamięci, zakończenia operacji importu oraz decyzji silnika bazy danych.

Znaczenie row group najlepiej wyjaśnić przez porównanie z klasycznym sposobem przechowywania rekordów. W układzie wierszowym wartości należące do jednego rekordu są zwykle umieszczane blisko siebie, dlatego łatwo pobierać pełne rekordy lub niewielką liczbę konkretnych wierszy. W indeksie Columnstore dane są natomiast organizowane przede wszystkim według kolumn. Row group staje się wtedy porcją wielu rekordów, a każda kolumna ma w jego obrębie własny, odpowiednio skompresowany fragment.

Taki podział pozwala ograniczyć ilość danych odczytywanych podczas zapytań analitycznych. Jeżeli zapytanie korzysta tylko z kilku kolumn, nie musi pobierać całych rekordów. Jeżeli dodatkowo warunek dotyczy zakresu wartości, możliwe jest pominięcie row group, w którym nie występują dane spełniające kryterium. W tym celu wykorzystywane są między innymi informacje opisujące minimalną i maksymalną wartość w poszczególnych fragmentach kolumn.

Row group a segment, kompresja i odczyt kolumn

W dokumentacji technicznej można spotkać terminy, które bywają używane zamiennie, chociaż opisują różne poziomy organizacji danych. Row group oznacza grupę wierszy rozpatrywaną jako całość, natomiast segment jest najczęściej fragmentem jednej kolumny znajdującym się w tej grupie. Dla przykładu zbiór stu tysięcy rekordów może tworzyć jeden row group, a kolumna z identyfikatorami, kolumna z datami i kolumna z wartościami liczbowymi będą miały osobne segmenty powiązane z tym samym zakresem wierszy.

Rozmiar row group ma wpływ na skuteczność kompresji. Większa, jednorodna porcja danych daje więcej powtarzalnych wzorców, dlatego zapis może zajmować mniej miejsca i być szybciej odczytywany. Z drugiej strony bardzo małe grupy zwiększają liczbę fragmentów, które trzeba rozpatrzyć podczas wykonywania zapytania. Może to powodować dodatkowe koszty zarządzania i ograniczać korzyści wynikające z kolumnowego układu danych.

Warto odróżnić row group od fizycznej strony zapisu. Strona jest mniejszym obszarem wykorzystywanym przez mechanizm przechowywania, natomiast row group opisuje większy, logiczny zakres danych. Jedna grupa może zostać podzielona na wiele stron, a jej segmenty mogą być kompresowane niezależnie. Dzięki temu możliwe jest zachowanie logicznego podziału na grupy przy jednoczesnym wykorzystaniu niższego poziomu organizacji pliku.

W praktyce liczy się także uporządkowanie danych. Jeśli podobne wartości trafiają do tych samych row group, zakresy minimalne i maksymalne stają się węższe. Silnik może wtedy łatwiej odrzucić grupy, które nie pasują do warunku zapytania. Gdy rekordy są rozmieszczone przypadkowo, niemal każda grupa może zawierać szeroki zakres wartości, przez co eliminowanie fragmentów jest mniej skuteczne.

Row group w trakcie ładowania i modyfikowania danych

Row group nie zawsze powstaje od razu w idealnej postaci. Podczas importu małych partii danych mogą pojawić się mniejsze grupy, które nie zostały jeszcze zamknięte. Taki stan jest często określany jako fragment otwarty lub przejściowy. Dane w tej części struktury mogą być obsługiwane inaczej niż w pełnej, skompresowanej grupie, dlatego wydajność odczytu może zależeć od tego, ile takich niepełnych fragmentów znajduje się w indeksie.

W przypadku dużego, jednorazowego ładowania łatwiej uzyskać grupy o rozmiarze zbliżonym do docelowego. Przy wielu niewielkich operacjach dopisywania danych struktura może być bardziej rozdrobniona. Nie oznacza to automatycznie problemu, lecz może zwiększać liczbę segmentów analizowanych przy zapytaniach. Z tego powodu sposób dostarczania danych powinien być dopasowany do charakteru obciążenia, częstotliwości zmian i oczekiwanego sposobu odczytu.

Usuwanie oraz aktualizowanie wierszy w indeksie kolumnowym również wymaga uwzględnienia organizacji na row group. Zamiast natychmiastowego fizycznego usunięcia wartości może zostać oznaczone, że dany wiersz nie powinien być zwracany. Przy dużej liczbie zmian powstaje narzut związany z obsługą oznaczonych rekordów. Okresowe porządkowanie struktury może pomóc odzyskać miejsce i poprawić warunki odczytu, ale zakres takich działań powinien wynikać z obserwacji rzeczywistego użycia.

Podczas diagnostyki sprawdza się między innymi liczbę grup, ich rozmiary, udział grup otwartych, stopień kompresji oraz rozkład wartości w segmentach. Same informacje o liczbie row group nie wystarczają do oceny jakości struktury. Dwie tabele o podobnej liczbie grup mogą zachowywać się zupełnie inaczej, jeśli jedna ma dobrze uporządkowane dane, a druga została zasilona w sposób przypadkowy.

Row group w zapytaniach analitycznych i filtrach

Największa korzyść z poprawnie utworzonych row group pojawia się wtedy, gdy zapytania odczytują duże zbiory danych, ale zwracają niewielką część wyników albo wykorzystują tylko kilka kolumn. Przykładem może być zestawienie wartości z określonego okresu, podsumowanie według kategorii lub wyszukanie rekordów mieszczących się w danym przedziale. Silnik może odczytać potrzebne kolumny i pominąć całe grupy, które według metadanych nie zawierają pasujących wartości.

Takie pomijanie fragmentów bywa nazywane eliminacją row group. Jest ono skuteczne tylko wtedy, gdy warunek zapytania może zostać powiązany z informacjami opisującymi zawartość segmentów. Proste porównanie z zakresem dat może dać dobry rezultat, jeżeli rekordy są ułożone w sposób sprzyjający rozdzieleniu okresów. Złożone wyrażenia, przekształcenia wartości lub funkcje zastosowane bezpośrednio na filtrowanej kolumnie mogą ograniczyć możliwość szybkiego odrzucenia grup.

Nie należy zakładać, że Columnstore przyspieszy każdy typ zapytania. Odczyt pojedynczego rekordu po mało selektywnym warunku może nie wykorzystać zalet dużych grup kolumnowych. W takim przypadku znaczenie mają także inne elementy projektu, takie jak właściwy rodzaj indeksu, sposób filtrowania oraz częstotliwość modyfikacji. Row group jest jednym z mechanizmów wspierających przetwarzanie, a nie zamiennikiem całego modelu optymalizacji.

Row group: praktyczne wskazówki diagnostyczne

Podczas analizy problemu warto zacząć od ustalenia, czy dane są ładowane małymi porcjami, czy większymi partiami. Następnie można porównać rozmiary grup, sprawdzić, czy występuje wiele niepełnych fragmentów, oraz ocenić, czy wartości w ważnych kolumnach są rozłożone w sposób sprzyjający eliminacji. Pomocne jest zestawienie czasu zapytań przed i po zmianie sposobu ładowania danych, ponieważ sama obserwacja rozmiaru indeksu nie pokazuje pełnego obrazu.

Wskazane jest również unikanie pochopnej przebudowy całej struktury. Operacja porządkująca może chwilowo zwiększyć zużycie zasobów, dlatego powinna być planowana po sprawdzeniu obciążenia i dostępnego miejsca. Jeżeli problem dotyczy wyłącznie kilku małych grup, wystarczające może być ich połączenie lub uporządkowanie. Jeżeli natomiast zmiany są stałe i dotyczą dużej części danych, potrzebna jest szersza ocena procesu importu oraz modelu zapytań.

Przydatne jest prowadzenie prostego porównania: liczba row group, średni rozmiar grupy, udział danych skompresowanych, liczba modyfikacji oraz czas najważniejszych zapytań. Takie zestawienie ułatwia odróżnienie problemu z samym indeksem od problemu wynikającego z niekorzystnego zapytania lub niejednorodnego źródła danych. Wnioski powinny opierać się na pomiarach, a nie wyłącznie na założeniu, że większa grupa zawsze oznacza lepszy rezultat.

Row group i moment zgłoszenia do serwisu

Do serwisu warto zgłosić się wtedy, gdy analiza indeksu Columnstore ujawnia gwałtowne spadki wydajności, nietypowe rozdrobnienie grup, problemy z odczytem po większej aktualizacji albo trudności z oceną, czy dane są prawidłowo zapisane. Szczególnej uwagi wymaga sytuacja, w której zapytania działają poprawnie na niewielkim zbiorze, lecz wyraźnie zwalniają po zwiększeniu ilości danych. Przydatne będzie przygotowanie przykładów zapytań, informacji o sposobie ładowania oraz opisów momentu, w którym pojawiło się pogorszenie.

W Warszawie pomocą w sprawach związanych z diagnozą sprzętu komputerowego może zajmować się Warszawskie Pogotowie Komputerowe 24/7. Przed przekazaniem urządzenia dobrze jest opisać objawy własnymi słowami i wskazać, czy problem występuje stale, czy tylko podczas konkretnych operacji. Ułatwia to rozdzielenie kłopotu z oprogramowaniem, nośnikiem danych, pamięcią lub konfiguracją od problemu dotyczącego samej organizacji danych. Row group pozostaje pojęciem logicznym, lecz jego działanie zależy od całego środowiska, w którym przechowywane są dane i wykonywane są zapytania.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę