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

DELETE w indeksach kolumnowych

Termin Definicja
DELETE w indeksach kolumnowych

DELETE w indeksach kolumnowych to operacja usuwania danych uwzględniająca specyfikę fizycznej organizacji tego typu indeksu.

Na czym polega DELETE w indeksie kolumnowym

Instrukcja DELETE w indeksie kolumnowym usuwa logicznie wskazane wiersze z danych objętych indeksem, ale sposób wykonania tej operacji różni się od usuwania rekordów z klasycznego indeksu wierszowego. Indeks kolumnowy przechowuje dane przede wszystkim w segmentach kolumnowych, a nie w pojedynczych rekordach ułożonych jeden za drugim. Segment zawiera wartości określonej kolumny dla pewnego zakresu wierszy, zwykle po kompresji. Usunięcie jednego wiersza może więc dotyczyć wielu powiązanych segmentów kolumn, ponieważ jego wartości są rozproszone pomiędzy osobne struktury przechowujące poszczególne kolumny.

W praktycznych implementacjach usunięcie nie musi oznaczać natychmiastowego fizycznego przepisania całego segmentu. Silnik może oznaczyć wiersz jako usunięty w pomocniczej strukturze, często nazywanej mapą usunięć. Podczas kolejnych odczytów wiersze oznaczone jako usunięte są pomijane. Dzięki temu pojedyncza operacja nie wymaga natychmiastowej dekompresji, przebudowania i ponownej kompresji całego segmentu. Mechanizm ten zmniejsza koszt krótkiej operacji, ale pozostawia w strukturze dane, które nadal zajmują miejsce i mogą zwiększać koszt późniejszego skanowania.

Wpływ usuwania na segmenty, kompresję i odczyt

Indeks kolumnowy jest projektowany przede wszystkim do odczytów analitycznych obejmujących wiele wierszy i niewielką liczbę kolumn. Taki sposób dostępu dobrze wykorzystuje kompresję oraz przetwarzanie wektorowe, w którym operator wykonuje działania na grupach wartości zamiast przetwarzać każdy rekord całkowicie osobno. Po wykonaniu wielu operacji DELETE część segmentu może jednak zawierać wiersze niewidoczne logicznie dla zapytań. Silnik musi wtedy odczytać odpowiednie struktury i odfiltrować wpisy oznaczone jako usunięte.

Duża liczba logicznie usuniętych wierszy obniża efektywność kompresji oraz może zwiększać ilość pracy wykonywanej podczas skanowania. Nie oznacza to, że każde usunięcie natychmiast powoduje zauważalny problem. Znaczenie ma między innymi udział usuniętych wierszy w segmencie, rozmiar danych, selektywność predykatów i częstotliwość wykonywania zapytań. Segment z niewielką liczbą usunięć może działać poprawnie, natomiast masowe kasowanie danych z dużej tabeli kolumnowej wymaga późniejszej oceny stanu segmentów oraz zajętego miejsca.

Różnica między usunięciem logicznym a fizycznym

Warto rozdzielić dwa pojęcia: usunięcie logiczne oraz odzyskanie miejsca po usuniętych danych. Pierwsze oznacza zmianę widoczności wiersza dla zapytań. Drugie wymaga uporządkowania albo przebudowania odpowiednich struktur tak, aby niepotrzebne wartości przestały zajmować miejsce. Samo wykonanie DELETE nie powinno być automatycznie utożsamiane z natychmiastowym zmniejszeniem pliku danych. Przestrzeń może zostać oznaczona jako możliwa do ponownego wykorzystania przez silnik, lecz jej zwrot do systemu operacyjnego jest odrębnym zagadnieniem administracyjnym.

Przy diagnostyce skutków usuwania analizuje się liczbę wierszy usuniętych w poszczególnych segmentach, ich stan kompresji, rozkład danych oraz rozmiar struktur pomocniczych. Istotne jest również sprawdzenie, czy operacja była wykonywana pojedynczym dużym poleceniem, czy w partiach. Usuwanie partiami może ograniczać jednorazowe zużycie zasobów i czas trwania pojedynczej transakcji, ale nie usuwa automatycznie skutków nagromadzonych oznaczeń. Zbyt częste modyfikacje tabeli kolumnowej mogą ponadto zwiększać obciążenie mechanizmów blokowania, dziennika transakcyjnego i kontroli współbieżności.

Jak oceniać skutki DELETE w praktycznym środowisku

Ocena problemu powinna rozpocząć się od ustalenia, czy spowolnienie dotyczy samego polecenia DELETE, czy późniejszych zapytań odczytujących tabelę. Należy porównać czas wykonania przed i po operacji, sprawdzić plan zapytania oraz określić, czy zapytanie skanuje wiele segmentów. Przydatne są także informacje o liczbie wierszy logicznie usuniętych, stopniu kompresji i ilości miejsca zajmowanego przez tabelę. Bez tych danych nie można rzetelnie stwierdzić, że przyczyną problemu jest właśnie indeks kolumnowy.

W przypadku środowisk korzystających z indeksów kolumnowych działania porządkowe dobiera się do konkretnego silnika bazy danych i jego wersji. Nie należy bez sprawdzenia stosować poleceń przeznaczonych dla innego produktu, ponieważ podobne nazwy struktur mogą oznaczać odmienne mechanizmy. Przed większym usuwaniem warto zweryfikować plan awaryjny, wpływ transakcji na dziennik oraz zachowanie zapytań wykonywanych równolegle. Diagnostyka powinna obejmować także warstwę sprzętową, jeśli objawy wskazują na ograniczenia pamięci, wydajność nośnika albo przeciążenie procesora, ponieważ problemy tych elementów mogą wyglądać podobnie do degradacji indeksu.

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