Query dinamica per creazione comando REBUILD INDEX

.

Con l’articolo Query dinamica per creazione comando REBUILD INDEX, forniamo 2 query dinamiche con cui avremo la possibilità di creare il comando di rebuild degli indici e degli indici partizionati che hanno lo stato UNUSABLE.

La REBUILD è la ricostruzione dell’indice.
Questa operazione viene effettuata, quando viene modificata la DDL della tabella, per recuperare spazio inutilizzato, ma sopratutto per eliminare la frammentazione all’interno dell’indice.

Quindi è di vitale importanza tenere sotto controllo lo stato della frammentazione delle tabelle e degli indici di uno schema.

Poichè se troppo frammentati un degrado delle performance sarebbe inevitabile.

In fase di REBUILD, la tabella non deve essere acceduta poichè la rebuild fallirebbe con l’errore ORA-00054: resource busy and acquire with NOWAIT specified.

Se invece viene eseguita la REBUILD con la clausola ONLINE, i dati restano disponibili agli utenti, questo perchè, con la REBUILD classica, viene impostato un EXCLUSIVE LOCK in modo da bloccare tutte le operazioni DML nell’oggetto impattato.
Con le ultime release Oracle, è stato ridotto il periodo di LOCK e questo permette ugualmente l’accesso ai DATI.

Di seguito gli statement

Query dinamica per creazione comando REBUILD INDEX

SET LINES 170
select 'alter index '||i.OWNER||'.'||i.INDEX_NAME||' REBUILD;'
from dba_indexes i, dba_segments s
where i.OWNER not in ('SYS','SYSTEM') 
and i.OWNER = s.OWNER
and i.INDEX_NAME = s.SEGMENT_NAME
and i.STATUS <>'VALID';

Costruzione statement di REBUILD INDEX PARTITION

SET LINES 170
select 'alter index '||i.index_OWNER||'.'||i.INDEX_NAME||' REBUILD PARTITION ' ||s.PARTITION_NAME|| ';'
from dba_ind_partitions i, dba_segments s
where i.INDEX_OWNER not in ('SYS','SYSTEM') 
and i.INDEX_OWNER = s.OWNER
and i.INDEX_NAME = s.SEGMENT_NAME
and i.partition_name = s.partition_name and i.STATUS <> 'VALID';

Per visionare le mie guide sui Comandi CRS clicca qui!
A questo LINK, invece, troverai le query SQL

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin

Query indici partizionati Oracle

.

Query per verificare la dimensione degli indici partizionati

Con l’articolo Query dimensione indici partizionati Oracle, saremo in grado di verificare la dimensione degli indici partizionati.

Una buona organizzazione dei dati permette efficenza e stabilita in termini di servizio, quindi in ambienti di grandi dimensione, un ottima organizzazione dei dati è la base per poter permettere al database di essere performante.

Per mantenere i dati accessibili nel migliore dei modi bisogna partire dalle tablespace costruite in base al tipo (TABELLE, TABELLE PARTIZIONATE, INDICI, INDICI PARTIZIONATI, LOB, LOB PARTIZIONATI) e alla quantità di dati.

Le tablespace devo essere create in base alla tipologia e alla quantità di dati che dovrà ospitare in modo da configurare l’uniform size adeguato.

A livello logico gli oggetti devono essere creati con tabelle che non superino grosse dimensioni. Nel caso devono essere partizionate.

Se la tabella è partizionata anche l’indice di default sarà partizionato con la medesimo organizzazione tablespace.

Quindi con questo articolo passo la query per estrarre le informazioni relative agli indici partizionati.

Eseguendo la query vediamo il tipo di INDICE, lo status dell’INDICE e il tablespace di provenienza.

I campi selezionati sono:

OWNER – Proprietario dell’indice.
INDEX_NAME – Nome dell’indice.
INDEX_TYPE – Tipo dell’indice.

Inoltre:
PARTITION_NAME – Nome della partizione.
TABLESPACE_NAME – Nome della tablespace dove risiede l’indice.
BYTES – Dimensione dell’indice trasformato in MB.
STATUS – Status dell’indice.

Inotre estrapoliamo le informazioni dalle viste
DBA_IND_PARTITIONS e
DBA_SEGMENTS.

Infine sono messe in relazione dalla JOIN
OWNER=OWNER e
INDEX_NAME=SEGMENT_NAME.

Query indici partizionati Oracle:

set lines 200
set pages 99
col INDEX_OWNER for a16
col INDEX_NAME for a24
col INDEX_TYPE for a10
col TABLESPACE_NAME for a24
col PARTITION_NAME for a24
select i.INDEX_OWNER, i.INDEX_NAME, s.SEGMENT_TYPE, s.PARTITION_NAME, s.TABLESPACE_NAME, s.BYTES/1024/1024 as "Size MB", i.STATUS
from dba_ind_partitions i, dba_segments s
where i.INDEX_OWNER not in ('SYS','SYSTEM') 
and i.INDEX_OWNER = s.OWNER
and i.INDEX_NAME = s.SEGMENT_NAME
and i.partition_name = s.partition_name
order by 1,2,4
/

Per visionare le mie guide sui Comandi CRS clicca qui!
A questo LINK, invece, troverai le query SQL

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin

Query dimensione indici

.

Query per verificare la dimensione degli indici

Con l’articolo Query dimensione indici, vediamo velocemente gli indici e le loro dimensioni.

Gli indici sono degli oggetti del database che permettono l’accesso veloce ai dati.
Se non ci fosse l’indice nella tabella, le query sarebbero molto lente perchè andrebbero a leggere tutte le righe in maniera sequenziale, generando molto I/O in lettura sul disco e un grosso consumo di CPU.

Quindi la presenza e la manutenzione degli indici è un fattore molto importante per avere il database sempre performante.

Se una tabella subisce frequenti DELETE, sicuramente avrà lo spazio all’interno frammentato e questo può determinare grossi rallentamenti.

Quindi a fronte di queste situazioni occorre effettuare una reorg dei dati ossia, MOVE TABLE, REBUILD INDEX e statistiche finali.

Quindi con la query sotto riportata è possibile individuare:
il tipo di indice,
il nome della partizione,
il tablespace di provenienza e
lo status dell’indice.

I campi selezionati sono:

OWNER – Proprietario dell’indice.
INDEX_NAME – Nome dell’indice.
INDEX_TYPE – Tipo dell’indice.
PARTITION_NAME – Nome della partizione.
TABLESPACE_NAME – Nome della tablespace dove risiede l’indice.
BYTES – Dimensione dell’indice trasformato in MB.
STATUS – Status dell’indice.

Inoltre estrapoliamo le informazioni dalle viste
DBA_INDEXES e
DBA_SEGMENTS.

Infine, mettiamo i dati in relazione dalla JOIN
OWNER=OWNER e
INDEX_NAME=SEGMENT_NAME.

Query per verificare la dimensione degli indici:

set lines 200
set pages 99
col OWNER for a16
col INDEX_NAME for a30
col INDEX_TYPE for a21
col TABLESPACE_NAME for a24
col PARTITION_NAME for a24
select i.OWNER, i.INDEX_NAME, i.INDEX_TYPE, s.PARTITION_NAME, s.TABLESPACE_NAME, s.BYTES/1024/1024 as "Size MB", i.STATUS 
from dba_indexes i, dba_segments s
where i.OWNER not in ('SYS','SYSTEM') and 
i.OWNER = s.OWNER and
i.INDEX_NAME = s.SEGMENT_NAME 
order by 1,2,4;

Per visionare le mie guide sui Comandi CRS clicca qui!
A questo LINK, invece, troverai le query SQL

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin


Query INDICI PARTIZIONATI INVALIDI Oracle

.

Con l’articolo Query INDICI PARTIZIONATI INVALIDI Oracle,
vediamo tutti gli indici invalidi,
che puntano a tabelle partizionate
degli utenti del database.

Quando occorre cancellare una partizione di una tabella con numerose partizioni, bisogna fare molta attenzione in fase della drop della partizione, poichè se non viene dichiarato la clausala UPDATE GLOBAL INDEX nel fine del comando di drop l’indice globale di tutte le partizioni ovvero della tabella passerà allo stato invalido e quindi inutilizzabile.

Questo causerà grossi problemi poichè gli statement che insisterebbero sulla tabella, causerebbero dei full_table_scan e quindi grossi rallentamenti generalizzati per via dell’eccessivo consumo di risorse (CPU, read disk I/O).

Un altro grosso problema è il tempo di indisponibilità della tabella che durerà per tutto il tempo della rebuild dell’indice.la

Con la Query per individuare gli indici partizioni Oracle possiamo individuare se effettivamente si è creata questa drammatica situazione.

I campi che selezioniamo sono:

OWNER – Proprietario dell’indice.
INDEX_NAME – Nome dell’indice.
PARTITION_NAME – Nome della partizione.
STATUS – Status dell’indice.

In otre le informazioni sopra menzionate,
le vediamo dalla vista DBA_IND_PARTITIONS.

In fine, filtriamo le informazioni dalla condizione
STATUS <> ‘VALID’ e
INDEX_OWNER è diverso da SYS e SYSTEM.

Query INDICI PARTIZIONATI INVALIDI Oracle:

set lines 400
col owner for a10
col index_name for a25
select INDEX_OWNER,index_name,partition_name,status
from dba_ind_partitions
where status <>'VALID'
and index_owner not in ('SYSTEM','SYS')
order by 1,2;

Per visionare le mie guide sui Comandi CRS clicca qui!
A questo LINK, invece, troverai le query SQL

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin

Query INDICI INVALID Oracle

.

INDICI INVALID SCHEMA database Oracle

Con l’articolo Query INDICI INVALID Oracle, riusciamo ad individuare velocemente, tutti gli indici INVALIDI di uno SCHEMA.

Può capitare che per diversi fattori, gli indici di uno SCHEMA cambiano stato da USABLE a UNUSABLE.

I fattori appunto sono diversi. Una delle cause principali può essere una reorg dei dati che comprende MOVE TABLE. Gli indici associati alla tabella mossa per eliminare la frammentazione vengono invalidati.

Oppure, In caso di modifica DDL della tabella, gli indici si possono invalidare.

Un indice invalido causa grossi rallentamenti, poichè ogni SELECT sulla tabella andrebbe a leggere tutti i record.

Il FULL_TABLE_SCAN generato è la causa delle basse performance della query e in alcuni casi dell’intero schema. L’effettiva causa sono i consumi elevati di risorse che richiede una lettura massiva di dati, grandi quantità di I/O del disco in lettura ed elevati consumi di CPU.

Come facciamo a controllare se sono presenti indici invalidi?

Eseguiamo la query fornita in modo tale da individuarli ed eseguire la rebuild.

I campi che andremo a selezionare sono:

OWNER – Proprietario dell’indice.
INDEX_NAME – Nome dell’indice.
INDEX_TYPE – Tipo dell’indice.
STATUS – Status dell’indice.

Inoltre, informazioni sopra menzionate, le abbiamo estratte dalla vista DBA_INDEXES.

Infine le informazioni sono filtrate per
STATUS <> ‘VALID’ e
OWNER diverso da SYS e SYSTEM.

Query INDICI INVALID Oracle:

set lines 180
col owner for a30
col index_name for a30
col index_type for a30
col status for a15
select owner, index_name,index_type,status
from dba_indexes
where owner not in ('SYSTEM','SYS')
and status <> 'VALID' order by 1,2;

Per visionare le mie guide sui Comandi CRS clicca qui!
A questo LINK, invece, troverai le query SQL

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin

Query INDICI di uno SCHEMA

.

Query INDICI di uno SCHEMA con le relative dimensioni di uno SCHEMA

Nell’articolo Query INDICI di uno SCHEMA, viene fornito uno statement, con cui è possibile individuare tutti gli indici di un utente del database.
Inoltre è possibile individuare il tipo di indice e lo status.

Un INDICE è un oggetto del database che permette l’accesso ai dati in maniera performante. Questo avviene perchè nel caso in cui non fosse presente, Oracle andrebbe a leggere tutti i campi della tabella generando tanto I/O sul disco per via delle letture massive e un consumo eccessivo di CPU che potrebbe determinare grossi rallentamenti propagati per tutta l’istanza.

Inoltre se creati con la clausola UNIQUE, garantiscono l’univocità del record all’interno della tabella andando a supporto alla constraint PK.

Può capitare che se cambia la definizione della tabella, o per via delle statistiche, un indice puo passara allo stato UNUSABLE e questo può causare problemi o rallentamenti.

Quindi, nel caso in cui si dovesse invalidare un indice con la seguente query potrete individuarlo facilmente.

Infine la query non presenterà gli INDICI degli utenti SYS e SYSTEM.

I campi che andremo a selezionare sono:

OWNER – Proprietario dell’indice.
INDEX_NAME – Nome dell’indice.
INDEX_TYPE – Tipo dell’indice.
STATUS – Status dell’indice.

Le informazioni sopra mensionate le abbiamo estratte dalla vista DBA_INDEXES.

set lines 400 
col owner for a10 
col index_name for a25 
select owner, index_name,index_type,status from dba_indexes where owner not in ('SYSTEM','SYS') order by 1,2;

Per visionare le mie guide sui Comandi CRS clicca qui!
A questo LINK, invece, troverai le query SQL

Resta aggiornato sulle nostre attività entrando a far parte della nostra community:
Facebook
Youtube
Linkedin

Wordpress Social Share Plugin powered by Ultimatelysocial