Le statistiche diventano stale
nel momento in cui dopo averle calcolate le righe all’interno della tabella,
partizione o sottopartizione subiscono una movimentazione
superiore al 10% del totale.
- In questo caso la tabella risulta analizzata alle 10:04 con 64 righe
SELECT
OWNER,TABLE_NAME,NUM_ROWS,LAST_ANALYZED
FROM DBA_TABLES
WHERE
TABLE_NAME='STAF15_WRK';
OWNER
TABLE_NAME
NUM_ROWS LAST_ANALYZED
-------------
------------------------------ ---------- --------------------
PIPPO
STAF15_WRK
64 28-GEN-2015 10:04:29
- Alle 10:54 vengono effettuate delle operazioni di delete. Viene cancellato l'intero contenuto della tabella, 64 rgihe, senza effettuare la refresh delle statistiche.
SELECT
TABLE_OWNER,TABLE_NAME,INSERTS,UPDATES,DELETES,TIMESTAMP
FROM
DBA_TAB_MODIFICATIONS
WHERE TABLE_NAME ='STAF15_WRK' AND TABLE_OWNER='PIPPO';
TABLE_OWNER TABLE_NAME
INSERTS UPDATES DELETES
TIMESTAMP
-----------
--------------- ---------- ---------- ----------
--------------------
PIPPO
STAF15_WRK
0
0 64 28-GEN-2015 10:54:58
- Oracle a questo punto, poiché abbiamo che la movimentazione di righe in questo caso è pari al 100% marca le statistiche della tabella come STALE.
- ROUND ( (DTM.DELETES + DTM.UPDATES + DTM.INSERTS)/DT.NUM_ROWS*100)>= 10
SELECT
OWNER,TABLE_NAME,NUM_ROWS,LAST_ANALYZED,STALE_STATS
FROM
DBA_TAB_STATISTICS
WHERE TABLE_NAME='STAF15_WRK';
OWNER TABLE_NAME NUM_ROWS LAST_ANALYZED STALE_STATS
----------- ------------
---------- -------------------- -----------
PIPPO
STAF15_WRK
64 28-GEN-2015 10:04:29
YES
Da documentazione
viene indicato che in questi
casi I piani di accesso potrebbero essere “poor”:
“Automatic
optimizer statistics collection eliminates many of the manual tasks associated
with managing the query optimizer, and significantly reduces the risks of
generating poor execution plans due to missing or stale statistics.”
A questo punto l'unica soluzione è la rigenerazione delle statistiche sull'oggetto STALE.
Nessun commento:
Posta un commento