Co to jest partycjonowana tabela Oracle?
Partycjonowanie dzieli tabelę, indeks lub tabelę zorganizowaną według indeksu na mniejsze składniki. Każdy składnik jest nazywany partycją (lub podpartycją dla złożonych obiektów partycjonowanych). Każda partycja ma unikatową nazwę i opcjonalnie może mieć indywidualne cechy przechowywania:na przykład kompresja lub przechowywanie w różnych obszarach tabel. Dobrze zaprojektowana strategia partycjonowania może poprawić dostęp do zapytań i aktualizacje, ograniczając operację do jednego lub podzbioru partycji.
Partycjonowanie pod kątem wydajności — czyszczenie partycji
Funkcja Oracle Partitioned table umożliwia optymalizatorowi zapytań pomijanie partycji, które nie są wymagane przez określoną instrukcję SQL. W zależności od instrukcji SQL optymalizator może zidentyfikować partycje i podpartycje, do których należy uzyskać dostęp, a także te, do których nie ma dostępu. Może to skutkować znaczną poprawą wydajności zapytań, ponieważ optymalizator koncentruje się na określonym podzestawie danych, które można dalej doprecyzować, jeśli istnieją dodatkowe predykaty.
Optymalizator robi to, korzystając z informacji o partycjach przechowywanych w słownik danych do identyfikowania zawartości partycji bez zapytania o zawarte w niej dane. Partycjonowanie to dodatkowa warstwa słownika danych między tabelami/indeksami i przestrzeniami tabel
Ograniczenie tabeli partycjonowanej
W Oracle Database 11g tabela może zawierać maksymalnie 1048575 partycji (1024K – 1). Z wyjątkiem tabel zawierających kolumny typu danych LONG lub LONG RAW, wszystkie tabele mogą być podzielone na partycje (w tym kolumny typu CLOB lub BLOB).
Typ partycji tabeli
Partycjonowanie jest dostępne w bazie danych Oracle od wersji 8.0, a Oracle stale dodaje coraz więcej funkcji z każdą wersją. Poniższa tabela przedstawia podsumowanie głównych zmian
Główne strategie partycji podane przez Oracle to
(1)Zakres
(2)List
(3) Hash
(4)Złożony
Jak utworzyć tabelę partycji
W zależności od typu partycji , oto sposób tworzenia tabeli partycji
Podział zakresu
Oracle Partition dane na podstawie kolejnych zakresów wartości klucza partycji.
Punkt końcowy każdej partycji jest określony przy użyciu następującej składni:
VALUES LESS THAN (value-list)
Przykład
CREATE TABLE EXP_RANGE (ID NUMBER(15) NOT NULL, CODE_ID NUMBER(15) NOT NULL, PERIOD_NAME VARCHAR2(15) NOT NULL, ACTUAL_FLAG VARCHAR2(1) NOT NULL, VERSION_ID NUMBER(15), LAST_UPDATE_DATE DATE NOT NULL, . . . . . . ) PARTITION BY RANGE (PERIOD_NAME) ( PARTITION PR1 VALUES LESS THAN ('JAN-2019'), PARTITION PR2 VALUES LESS THAN ('FEB-2019') . . . . . . );
Podział zakresu jest przydatny do partycjonowania danych historycznych i transakcyjnych, ponieważ granice podziału zakresu definiują kolejność partycjonowania w tabelach i indeksach
Podział listy
W tej metodzie oracle mapuje określone wiersze na partycje na podstawie statycznej listy wartości dosłownych. Klucz partycji do partycjonowania listy może być oparty tylko na jednej kolumnie.
CREATE TABLE EXP_LIST (ID NUMBER NOT NULL, ORG_ID NUMBER, OPEN_FLAG VARCHAR2(4) NOT NULL, . . . . . . ) PARTITION BY LIST (open_flag) ( PARTITION PR1 VALUES ('YES'), PARTITION PR2 VALUES ('NO') );
Partycjonowanie haszujące
W tej wyroczni użył algorytmu mieszającego do decydowania o fizycznym rozmieszczeniu danych. Partycjonowanie haszujące spowoduje równomierne rozłożenie danych na ustaloną liczbę partycji.
CREATE TABLE EXP_HASH (ID NUMBER NOT NULL, ORG_ID NUMBER, ORDERED_ITEM VARCHAR2(2000), OPEN_FLAG VARCHAR2(1) NOT NULL, . . . . . . ) PARTITION BY HASH (ID) PARTITIONS 10 . . . . . .; );
Partycjonowanie kompozytowe
W tej wyroczni użyto kombinacji range, list i hash partitioning.composite metodami partycjonowania są range-hash lub range-list.
CREATE TABLE sales_details ( prod_id NUMBER(6) , cust_id NUMBER , time_id DATE , channel_id VARCHAR2(1) , promo_id NUMBER(6) , quantity_sold NUMBER(3) , amount_sold NUMBER(10,2) ) PARTITION BY RANGE (time_id) SUBPARTITION BY HASH (cust_id) SUBPARTITIONS 8 STORE IN (ts1, ts2, ts3, ts4) ( PARTITION sales_q1_2019 VALUES LESS THAN (TO_DATE('01-APR-2019','dd-MON-yyyy')) , PARTITION sales_q2_2019 VALUES LESS THAN (TO_DATE('01-JUL-2019','dd-MON-yyyy')) , PARTITION sales_q3_2019 VALUES LESS THAN (TO_DATE('01-OCT-2019','dd-MON-yyyy')) , PARTITION sales_q4_2019 VALUES LESS THAN (TO_DATE('01-JAN-2019','dd-MON-yyyy')) );
Jak przenieść istniejący obiekt do obiektu podzielonego na partycje
Jest wiele sposobów na osiągnięcie tego wyczynu. Wyjaśniam tutaj uproszczoną metodę
1. Utwórz pustą tabelę partycjonowaną za pomocą klauzuli partycjonowanej i opcji równoległej. Nazwa tabeli musi mieć inną nazwę niż tabela niepartycjonowana.
2.Wypełnij dane dla wymaganej partycji z tabeli niepartycjonowanej.
3. Rozważ użycie wskazówki APPEND oracle z instrukcją INSERT jako łatwej zmiany kodu, która zapewnia dobrą wydajność. Jeśli rejestrowanie jest włączone, a indeksy są obecne, wskazówka INSERT /*+ APPEND */ może nie być skuteczna. Aby zminimalizować obciążenie związane z konserwacją indeksów, usuń indeksy przed migracją i utwórz je ponownie po zapełnieniu tabeli partycjonowanej.
4. Zmień nazwę tabeli partycjonowanej na taką samą jak tabela oryginalna lub zmień synonim.
5. Zbuduj indeksy tabeli dla tabeli partycjonowanej
Też czyta
Indeks partycji Oracle
Równoległe zapytanie Oracle
https://docs.oracle.com/cd/B28359_01/server.111/b32024/partition.htm