Clusters (Object Type) – Parte I

giovedì 22 maggio 2008 alle 22:45 | Pubblicato su Installation and Configuration, SQL | Lascia un commento

Comincio precisando che questo post riguarda il tipo oggetto Oracle chiamato Clusters, che non ha niente a che vedere con RAC. Distribuirò la descrizione dei cluster in più post. In questa parte farò solo una breve introduzione.
I cluster sono un modo per raggruppare due o più tabelle (in 10gR2 al massimo 32) in uno stesso blocco. In sostanza si tratta di metodo per raggruppare insieme più tabelle che vengono interrogate molto in join. Questo raggruppamente avviene in modo fisico mettendo i record delle tabelle negli stessi blocchi e non ripetendo quindi i valori delle colonne condivise (le quali possono essere al massimo 16).
L’utililzzo dei cluster permette in determinate condizioni di ridurre l’I/O su disco e quindi di accelerare l’accesso ai dati quando si fa il join tra le tabelle interessate.

Tipi di Cluster

In oracle 10.2 vi sono tre tipologie di cluster:

  • Index Cluster, il default. Viene usato un indice per gestire i dati del cluster
  • Hash cluster. Viene usata una funzione hash sui campi comuni del cluster per accedere ai dati del cluster.
  • Sorted Hash Cluster. Viene usata una funzione hash sui campi comuni del cluster per accedere ai dati del cluster ed ogni lista corrispondente ad una chiave hash contiene i record ordinati.

A parte la creazione e la manutenzione strettamente di competenza del DBA l’utilizzo del cluster dal punto di vista applicativo è trasparente: le tabelle che lo compongono di utiizzano come tabelle normali. Ovviamente cambiano le prestazioni a seconda del tipoi di uso. Ad esempio un full table scan su una tabella componente un cluster è generalmente più lento. Vicevera l’accesso in join alle tabelle del cluster è più veloce. Vi è un piccolo risparmio nello spazio occupato in quanto i valori delle colonne condivise non sono duplicati.

Esempio di creazione di un index cluster
Prima si crea il cluster:


CREATE CLUSTER TEST_CLUSTER (commoncolumn number(10))
SIZE 1024 TABLESPACE users;

La clausola size indica la dimensione in byte da riservare in ogni blocco per le righe corrispondenti ad ogni chiave (o hash value nel caso di hash cluster). In questo caso ad esempio verranno riservati 1024 byte per ogni chiave, il che significa che con blocchi da 8 Kb non vi saranno più di 8 chiavi per blocco. Se non viene specificata questa clausola oracle riserva un blocco per ogni chiave.
Ora si possono creare le tabelle del cluster:

CREATE TABLE ORDINI_TESTATE (
 ORD_ID NUMBER(10),
  DESCRIZIONE VARCHAR2(100))
CLUSTER TEST_CLUSTER(ORD_ID);
Per brevità ne creo una sola. A questo punto per poter inserire dati in questa tabella (cluster) occorre prima creare un indice, altrimenti:
SVILUPPO40@PERSEO10 > insert into ordini_righe values (1,'a');
insert into ordini_righe values (1,'a')
            *
ERRORE alla riga 1:
ORA-02032: imposs. usare tabelle in cluster prima 
che l'indice del cluster sia creato

quindi:

SVILUPPO40@PERSEO10 > create index test_cluster_index 
            on cluster test_cluster;

Indice creato.

Infatti:

SVILUPPO40@PERSEO10 > insert into ordini_righe values (1,'a');

Creata 1 riga.

Lascia un commento »

RSS feed for comments on this post. TrackBack URI

Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: