Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

calcolo dello spazio degli indici

553 views
Skip to first unread message

Simone Sarzano

unread,
May 22, 2003, 6:01:56 AM5/22/03
to
Salve a tutti,
dovrei fare una stima dello spazio occupato dagli indici di un database
Oracle che verrà messo in produzione tra non molto.
Ho eseguito un'analisi degli indici che esistono tuttora.
Ora dalla tabella dba_indexes quale campo devo usare per trovare la
dimensione media?
A presto,
Simone

"I'm a travelling man, I'm a drinking man, I'm a gentle when I'm sober"


felice_pago

unread,
May 26, 2003, 3:57:49 AM5/26/03
to
Il 22 Mag 2003, 12:01, Simone Sarzano <sim...@sarzano.com.invalid> ha
scritto:

> Salve a tutti,
> dovrei fare una stima dello spazio occupato dagli indici di un database
> Oracle che verrà messo in produzione tra non molto.
> Ho eseguito un'analisi degli indici che esistono tuttora.
> Ora dalla tabella dba_indexes quale campo devo usare per trovare la
> dimensione media?
per una colonna:
SELECT AVG(NVL(VSIZE(PK_col_name),0)+1) FROM owner.table_name
per + colonne
AVG(NVL(VSIZE(col1),0)+1
+NVL(VSIZE(col2),0)+1
+NVL(VSIZE(col3),0)+1)
FROM owner.table_name

> A presto,
> Simone

felice_pago


--------------------------------
Inviato via http://usenet.libero.it

Andrea Salzano

unread,
May 26, 2003, 4:42:01 AM5/26/03
to
On Thu, 22 May 2003 12:01:56 +0200, Simone Sarzano wrote:

> Salve a tutti,
> dovrei fare una stima dello spazio occupato dagli indici di un database
> Oracle che verrà messo in produzione tra non molto.
> Ho eseguito un'analisi degli indici che esistono tuttora.
> Ora dalla tabella dba_indexes quale campo devo usare per trovare la
> dimensione media?
> A presto,
> Simone
>

1. Puoi controllare gli extent allocati per quell'indice
select bytes/1024/1024 bytes, exetents
from user_segments where segment_name='<NOME_INDICE'>

Attenzione. In questo modo vedi lo spazio effettivamente
allocato che però potrebbe anche essere vuoto.

2. L'indice per definizione contiene il valore della colonna
indicizzata ed il rowid corrispondente. Facendo un calcolo
approssimativo, potresti calcolare la dimensione della colonna
ed aggiungere la metà del valore ottenuto

SQL> select avg(vsize(SERVICEID))+
avg(vsize(SERVICEID))*1.5 dimensione from NOTIFICATION_DATA;

DIMENSIONE
----------
38.3443983

Il tuo indice occupa circa 38,35 bytes.

3. Puoi fare un calcolo preciso. Leggi pagina A.5 del manuale
Oracle7 Server Administrator's Guide, Release 7.3


In realtà ci sono tanti altri modi per calcolare la dimensione
indici, ma dovrei mettrmeli a studiare (prima o poi lo farò).

Andrea Salzano

unread,
May 26, 2003, 5:12:25 AM5/26/03
to
> per una colonna:
> SELECT AVG(NVL(VSIZE(PK_col_name),0)+1) FROM owner.table_name
> per + colonne
> AVG(NVL(VSIZE(col1),0)+1
> +NVL(VSIZE(col2),0)+1
> +NVL(VSIZE(col3),0)+1)
> FROM owner.table_name
>

Mi ero dimenticato di dell'nvl. Cmq, a rigor di logica, la funzione
nvl va applicata alla colonna e non a vsize(colonna).

Domanda. PErché aggiungi 1 al risultato di vsize?

felice_pago

unread,
May 26, 2003, 6:22:27 AM5/26/03
to
Il 26 Mag 2003, 11:12, "Andrea Salzano" <andrea....@inwind.it> ha
scritto:

> > per una colonna:
> > SELECT AVG(NVL(VSIZE(PK_col_name),0)+1) FROM owner.table_name
> > per + colonne
> > AVG(NVL(VSIZE(col1),0)+1
> > +NVL(VSIZE(col2),0)+1
> > +NVL(VSIZE(col3),0)+1)
> > FROM owner.table_name
> >
>
> Mi ero dimenticato di dell'nvl. Cmq, a rigor di logica, la funzione
> nvl va applicata alla colonna e non a vsize(colonna).

è da utilizzarsi come script generico, io lo lancio sullo schema , e per
ogni
tabella indice mi calcolo la media, da mettere in un foglio di calcolo
per avere le dimensioni delle tabell/schemi/istanze,
quando ero prg mi ero fatto un qualcosa + bello ma l'ho perso.

> Domanda. PErché aggiungi 1 al risultato di vsize?


AVG(NVL(VSIZE(PK_col_name),0)+1)
se lvsize(colonna) è 0, nvl mi restituisce 0.

Alessandro Trebbi

unread,
May 26, 2003, 6:27:24 AM5/26/03
to
Simone Sarzano <sim...@sarzano.com.invalid> wrote in message news:<bai6tr$shn$1...@grillo.cs.interbusiness.it>...

> Salve a tutti,
> dovrei fare una stima dello spazio occupato dagli indici di un database
> Oracle che verrà messo in produzione tra non molto.
> Ho eseguito un'analisi degli indici che esistono tuttora.
> Ora dalla tabella dba_indexes quale campo devo usare per trovare la
> dimensione media?

Mi sbagliero' ma mi sembra che la dimensione di un record dell'indice,
a differenza di un record della tabella, sia fisso (per un motivo di
efficienza), e non venga mai sprecato spazio

In particolare, per i varchar2, e' pari alla lunghezza del record (per
questo motivo conviene spesso indicizzare solo l'inizio del varchar2)

Detto questo, ti calcoli la dimensione di un record dell'indice come
lo faresti per la dimensione di un record della tabella

Greetings,
Alessandro Trebbi
Pesaro, Italy
http://www.b3soft.com

Andrea Salzano

unread,
May 26, 2003, 6:27:26 AM5/26/03
to

>
> AVG(NVL(VSIZE(PK_col_name),0)+1)
> se lvsize(colonna) è 0, nvl mi restituisce 0.

Ed è giusto che restituisca 0 (zero). L'indice mantiene un
puntatore alla riga della tabella solo se questo ha valore
non nullo.
In soldoni, i null non sono nell'indice. E' per questo motivo
che se nella query viene specificata la clausola
where <campo indicizzato> is null
oppure
where <campo indicizzato> is not null

l'rdbms fa un full table scan. In entrambi i casi Oracle non
sa quali sono i valori nulli sono non interroga tutta la tabella.

felice_pago

unread,
May 26, 2003, 6:40:43 AM5/26/03
to
Il 26 Mag 2003, 12:27, "Andrea Salzano" <andrea....@inwind.it> ha
scritto:
>
> >

il problema è che se lo metto, come dovrebbe essere, su raw device è
un pò complicato cambiare la storage della tbs , e :
1 byte non si nega a nessuno :)

cmq per Simone,
grande IMHO, derivato da ...
a spanne se le storage sono calcolate "correttamente" ,
dovresti assegnare al tbs degli indici il 75% della dimensione del tbs dei
dati.
e tbs che difettano sulla percentuale, diciamo da 60%-80%, hanno sempre
sbilanciamenti di spazio insufficienti/eccessivi.

Andrea Salzano

unread,
May 26, 2003, 7:22:53 AM5/26/03
to
On Mon, 26 May 2003 10:40:43 +0000, felice_pago wrote:

> il problema è che se lo metto, come dovrebbe essere, su raw device è
> un pò complicato cambiare la storage della tbs ,

non ho capito

felice_pago

unread,
May 26, 2003, 7:47:01 AM5/26/03
to
Il 26 Mag 2003, 13:22, "Andrea Salzano" <andrea....@inwind.it> ha
scritto:

è il mio dramma :(

i datafile dovrebbero stare su raw-device, il che implica maggiore
velocità di accesso e di rimando maggiore difficoltà di gestione,
di tutti gli oggetti che ci finiscono sopra, quindi un pò di spazio
per futura gestione, calcolato però, serve a mettere l'anima
in pace.

Andrea Salzano

unread,
May 26, 2003, 10:48:42 AM5/26/03
to
On Mon, 26 May 2003 10:40:43 +0000, felice_pago wrote:

> il problema è che se lo metto, come dovrebbe essere, su raw device è
> un pò complicato cambiare la storage della tbs , e :
> 1 byte non si nega a nessuno :)


Ma il concetto di tablespace non serve proprio a rendere la vita
+ semplice?

Se creo una tabella in un tablespace, è l'rdbms che si preoccupa
di gestire il segmento dati oracle all'interno del tablespace
stesso. L'utente non se ne deve preoccupare.
Il compito del dba è quello di creare inizialmente il ts su
file system o raw device, ma questo è tutto.

Non capisco quindi il problema relativo al calcolo dello spazio
allocato da una tabella o da un indice.

felice_pago

unread,
May 26, 2003, 11:13:42 AM5/26/03
to
Il 26 Mag 2003, 16:48, "Andrea Salzano" <andrea....@inwind.it> ha
scritto:

> On Mon, 26 May 2003 10:40:43 +0000, felice_pago wrote:
>
> > il problema č che se lo metto, come dovrebbe essere, su raw device č
> > un pň complicato cambiare la storage della tbs , e :

> > 1 byte non si nega a nessuno :)
>
>
> Ma il concetto di tablespace non serve proprio a rendere la vita
> + semplice?
>
> Se creo una tabella in un tablespace, č l'rdbms che si preoccupa

> di gestire il segmento dati oracle all'interno del tablespace
> stesso. L'utente non se ne deve preoccupare.
> Il compito del dba č quello di creare inizialmente il ts su
> file system o raw device, ma questo č tutto.

>
> Non capisco quindi il problema relativo al calcolo dello spazio
> allocato da una tabella o da un indice.

hai presente:
ORA-1654: unable to extend index
lo ottiene anche quando ti "scoppia" il tbs, e se sei su raw
non basta mica fare:

alter DATABASE DATAFILE '/dev/xxxx.dbf' RESIZE xxxx

certo un dba puň chiedere un nuovo raw al systemista,
ma se č anche data architect fŕ una figura barbina .

Andrea Salzano

unread,
May 26, 2003, 11:22:59 AM5/26/03
to

>
> hai presente:
> ORA-1654: unable to extend index
> lo ottiene anche quando ti "scoppia" il tbs, e se sei su raw
> non basta mica fare:
>
> alter DATABASE DATAFILE '/dev/xxxx.dbf' RESIZE xxxx
>
> certo un dba può chiedere un nuovo raw al systemista,
> ma se è anche data architect fà una figura barbina .

Capisco.
Ti chiedo scusa, ma non capivo cosa centrava la richiesta
di calcolo di spazio di Simone con il problema dei raw device.

felice_pago

unread,
May 26, 2003, 11:31:47 AM5/26/03
to
Il 26 Mag 2003, 17:22, "Andrea Salzano" <andrea....@inwind.it> ha
scritto:
[cut]

> Capisco.
> Ti chiedo scusa, ma non capivo cosa centrava la richiesta
> di calcolo di spazio di Simone con il problema dei raw device.
non c'č proprio niente da scusarsi, solo che quando si parla di
storage bisogna andare con i piedi di piombo!

ho appena conosciuto un'azienda che previsti 10GB all'avvio
allo start si č trovata con 150 GB, ed erano su raw device !
solo per i dati e ciccia per gli indici.

per questo che io applico la regola del 75% per gli indici,
per fortuna che dalla 8i si possono muovere anche le table

:)


felice_pago
-

Andrea Salzano

unread,
May 27, 2003, 3:20:38 AM5/27/03
to
> ho appena conosciuto un'azienda che previsti 10GB all'avvio
> allo start si è trovata con 150 GB, ed erano su raw device !

> solo per i dati e ciccia per gli indici.
>
> per questo che io applico la regola del 75% per gli indici,
> per fortuna che dalla 8i si possono muovere anche le table
>
bhe, esiste anche l'opzione di partitioning nella versione
enterprise di oracle. Devo dire che è molto utile.

Simone Sarzano

unread,
May 31, 2003, 3:11:56 AM5/31/03
to
Vi ringrazio tutti,
scusatemi se non l'ho fatto prima ma ero a Roma per un corso ;)
Non volevo creare questa discussione ma mi è servita!
Grazie ancora per le vostre risposte.
0 new messages