Segment Oracle Database – jego extent’y i bloki danych

Pewnie zadajesz sobie pytanie co to segment?… Już śpieszę z odpowiedzią! Bloki danych są używane przez Oracle we wszystkich operacjach wejścia-wyjścia. Segment Oracle składa się z jednego lub więcej bloków danych, ale wszystkie dane w tabeli lub indeksie muszą być zawarte w jednym segmencie. Nie tworzy się segmentów bezpośrednio, ponieważ są one automatycznie tworzone w celu obsługi różnych typów przechowywania.

Pytanie: Jaką rolę pełni extent w kontekście bloków danych i segmentów w Oracle?

W systemie zarządzania bazą danych Oracle, extent’y odgrywają kluczową rolę w organizacji i zarządzaniu przechowywaniem danych. Stanowią one pośrednią warstwę między blokami danych a segmentami, zapewniając logiczne i skalowalne podejście do przydzielania miejsca dla obiektów bazy danych, takich jak tabele i indeksy. Zrozumienie związku między blokami danych, extent’ami a segmentami jest istotne dla administratorów baz danych i programistów pracujących z systemami Oracle.

eBook Niezbędnik Administratora Baz Danych cover

Extent Oracle

Inaczej obszar to ciągły zbiór bloków danych przydzielonych dla określonego obiektu bazy danych, takiego jak tabela czy indeks bazy danych. Kiedy obiekt bazy danych wymaga dodatkowego miejsca, system zarządzania bazą danych Oracle przydziela nowe extent’y aby pomieścić wzrost. Każdy z nich jest powiązany z pojedynczym segmentem i należy do określonej przestrzeni tabel. Kluczowe cechy obszarów to:

  • Alokacja: Extent’y są przydzielane obiektom bazy danych według potrzeb, na podstawie zdefiniowanych parametrów przechowywania: INITIAL, NEXT, PCTINCREASE i MINEXTENTS. Parametry te określają rozmiar i wzorzec wzrostu obszarów dla obiektu.
  • De-alokacja: Kiedy obiekt bazy danych zostaje usunięty lub skrócony, powiązane obszary są zwalniane i zwracane do wolnej przestrzeni tablespace, stając się dostępnymi do przyszłego przydziału innym obiektom.

Związek z blokami danych

Extent’y składają się z ciągłego zbioru bloków danych, przy czym wszystkie bloki w obszarze mają ten sam rozmiar, określony przez parametr rozmiaru bloku bazy danych (DB_BLOCK_SIZE) ustawiony podczas tworzenia bazy danych. Bloki danych w obrębie obszaru przechowują rzeczywiste dane dla powiązanego obiektu bazy danych, takie jak wiersze w tabeli lub wpisy w indeksie.

Związek z segmentami

Segment to wyższa poziomowo logiczna struktura przechowywania, która reprezentuje obiekt bazy danych, taki jak tabela, indeks lub partycja. Segmenty składają się z jednego lub więcej extent’ów, z których każdy przyczynia się do przechowywania danych obiektu. Kiedy obiekt bazy danych rośnie, przydzielane są nowe obszary dla odpowiadającego segmentu, zapewniając obiektowi wystarczające miejsce do przechowywania danych.

Segmenty posiadają następujące kluczowe cechy:

  • Typy: Główne typy segmentów w Oracle to segmenty danych, segmenty indeksów, segmenty rollback i segmenty tymczasowe. Każdy typ służy określonym celom i jest powiązany z określonym rodzajem obiektu bazy danych lub operacją.
  • Zarządzanie: Segmenty są zarządzane na poziomie przestrzeni tabel. Każda przestrzeń tabeli składa się z jednego lub więcej plików danych, które przechowują obszary i segmenty dla obiektów bazy danych w obrębie przestrzeni tabeli.

Podsumowując, obszary(extent’y) odgrywają kluczową rolę w organizacji i zarządzaniu przechowywaniem w systemie zarządzania bazą danych Oracle. Stanowią one pośrednią warstwę między blokami danych a segmentami. Zapewnia to skalowalne i logiczne podejście do przydzielania miejsca dla obiektów bazy danych. Obszary składają się z ciągłych bloków danych. Ich grupa jest łączona, aby utworzyć segmenty, które reprezentują obiekty bazy danych, takie jak tabele i indeksy. Hierarchiczna struktura przechowywania umożliwia efektywne i elastyczne zarządzanie przestrzenią i jest jedną z zalet Oracle Database.

Segment i extent Oracle – slajd z kursu Praktyczna Administracja Oracle

Segment Oracle

Powyżej obszarów, poziomem logicznego przechowywania bazy danych jest segment. Segment to zestaw obszarów przydzielonych dla tabeli, indeksu, segmentu rollback lub do tymczasowego użytku przez sesję, transakcję lub optymalizator SQL. W odniesieniu do fizycznych struktur bazy danych, wszystkie obszary należące do segmentu znajdują się w tej samej przestrzeni tabel, ale mogą znajdować się w różnych plikach danych. Kiedy obszary segmentu są pełne, Oracle Database dynamicznie przydziela kolejny obszar dla tego segmentu. Ponieważ obszary są przydzielane według potrzeb, obszary segmentu mogą być lub nie być sąsiadujące na dysku.

Segment to zestaw obszarów, które zawierają wszystkie dane dla określonej logicznej struktury przechowywania w przestrzeni tabel. Na przykład, dla każdej tabeli, Oracle Database przydziela jeden lub więcej obszarów(extent’ów), aby utworzyć segment danych tej tabeli, a dla każdego indeksu, Oracle Database przydziela jeden lub więcej obszarów, aby utworzyć segment indeksu.

Rodzaje segmentów

W Oracle są cztery rodzaje segmentów:

Data segmentSegment tworzony automatycznie przy tworzeniu nowej tabeli. Wielkość i ilość extent’ów jest definiowana w poleceniu CREATE TABLE.
Index segmentSegment tworzony automatycznie przy tworzeniu nowego indeksu. Wielkość i ilość extent’ów jest definiowana w poleceniu CREATE INDEX.
Temporary segmentSegment tymczasowy może być niezbędny do przechowywania danych tymczasowych dla operacji typu sortowanie. Segmenty tymczasowe są alokowane w tablespace tymczasowych(domyślnie TEMP).
Rollback segmentSegment wycofania zawiera informacje niezbędne do wycofania transakcji. Nie są to segmenty dostępne bezpośrednio dla użytkowników, ich alokacja i zarządzanie leży całkowicie po stronie algorytmów silnika bazodanowego.

Praktyczne ćwiczenia z konfiguracji Oracle Database znajdziesz w kursie: Praktyczna Administracja – Oracle Database!


Segmenty danych

Pojedynczy segment danych w bazie danych Oracle przechowuje wszystkie dane dla jednego z poniższych przypadków:

  • Tabela, która nie jest podzielona na partycje ani sklastrowana
  • Partycja tabeli podzielonej na partycje
  • Klaster tabel

Oracle Database tworzy ten segment danych podczas tworzenia tabeli lub klastra za pomocą instrukcji CREATE. Parametry polecenia określają jak są przydzielane obszary segmentu danych. Możesz ustawić je bezpośrednio za pomocą odpowiednich instrukcji CREATE lub ALTER. Parametry przechowywania wpływają na wydajność pobierania i przechowywania danych dla segmentu danych powiązanego z danym obiektem.

Segmenty indeksów

Każdy niepodzielony indeks w bazie danych Oracle ma pojedynczy segment indeksu, który przechowuje wszystkie jego dane. Dla indeksu podzielonego, każda partycja ma pojedynczy segment indeksu, który przechowuje jej dane. Oracle Database tworzy segment indeksu dla indeksu lub partycji indeksu przy użyciu instrukcji CREATE INDEX. Instrukcja określa parametry przechowywania dla obszarów segmentu indeksu oraz przestrzeń tabeli, w której ma zostać utworzony segment indeksu. (Segmenty tabeli i indeksu z nim związane nie muszą zajmować tej samej przestrzeni tabel.) Ustawienie parametrów przechowywania bezpośrednio wpływa na wydajność pobierania i przechowywania danych.

Segmenty tymczasowe

Podczas przetwarzania zapytań, baza danych Oracle często wymaga tymczasowej przestrzeni roboczej do pośrednich etapów analizy i wykonania instrukcji SQL. Oracle Database automatycznie przydziela ten obszar na dysku, nazywany segmentem tymczasowym. Zazwyczaj Oracle Database wymaga segmentu tymczasowego jako obszaru bazy danych do sortowania. Oracle Database nie tworzy segmentu, jeśli operacja sortowania może być wykonana w pamięci lub jeśli Oracle Database znajduje inny sposób wykonania operacji przy użyciu indeksów.