"I'm a travelling man, I'm a drinking man, I'm a gentle when I'm sober"
> A presto,
> Simone
felice_pago
--------------------------------
Inviato via http://usenet.libero.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?
> 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ò).
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?
è 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.
> 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
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.
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.
> il problema è che se lo metto, come dovrebbe essere, su raw device è
> un pò complicato cambiare la storage della tbs ,
non ho capito
è 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.
> 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 .
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
-