Kosmous beyond the clouds: Sviluppo, Formazione e Consulenza Informatica

StatsPack

STATSPACK è l'utility che rimpiazza, in Oracle 9i, l'uso di UTLBSTAT ed UTLESTAT per monitorare il database al fine di applicare correzioni che possono migliorare le performance di un database Oracle.
Tale utility deve essere installata in ogni database da monitorare, tramite lo script SPCREATE.SQL
Lo script crea l'utente PERFSTAT ed una serie di oggetti nel suo schema (circa 100Mb di spazio occupato). Lo script si trova nella cartella ORACLE_HOME/RDBMS/ADMIN e deve essere eseguito dall'utente SYS. Ad esempio in Windows potrebbe trovarsi in:

c:/oracle/ora90/rdbms/admin/spcreate.sql

Se volessi cancellare tutti gli oggetti creati dallo script, posso lanciare lo script (si trova nella stessa cartella di SPCREATE.sql ): SPDROP.SQL

Prima di lanciare lo script di creazione è bene editarlo e controllare la stringa di connessione dell'utente perfstat, aggiungendo eventualmente il nome del servizio di connessione: ad esempio occorre sostituire

connect perfstat/perfstat
con

connect perfstat/perfstat@juve
dove juve è, in questo caso, la stringa di connessione al db

Durante l'esecuzione dello script verrà chiesto di definire quali tablespace usare come default e temporary per l'utente PERFSTAT.

Al termine dell'esecuzione non sarò più connesso come utente SYS ma come utente PERFSTAT.
A tale utente sono state concesse, per default, alcune grant (necessarie per il corretto funzionamento dell'utility stessa:

  • SELECT_CATALOG_ROLE
  • HS_ADMIN_ROLE
  • CREATE/ALTER SESSION
  • CREATE TABLE
  • CREATE/DROP PUBLIC SYNONYM
  • CREATE SEQUENCE
  • CREATE PROCEDURE
Tale utente risulta quindi potenzialmente pericoloso perchè può accedere a tutte viste del tipo DBA e V$.

Lo script creerà circa 40 tabelle, oltre ad alcuni indici e sequence;
Gli oggetti creati cominciano con STATS e contengono i dati corrispondenti delle viste V$ cui il nome fa riferimento, ma con alcune colonne in più:

  • DBID
    Indica l'identificatore numerico del DB
  • INSTANCE_NUMBER
    E' identificativo numerico dell'instanza. Serve per il RAC (Real Application Cluster).
  • SNAP_ID
    E' il numero identificativo della collezione di statistiche. Ciascuna collezione viene chiamata Snapshot, e gli viene assegnata un identificativo numerico incrementale.

Ad ogni nuova collezione di dati che creo (mediante comando execute STATSPACK.SNAP), viene assegnato un nuovo SNAP_ID che è consistente con i dati messi nelle varie tabelle. Pertanto devo conoscere il valore di SNAP_ID quando eseguo il report delle statistiche.

Gli Snapshot sono quindi collezioni di statistiche riferite ad un certo istante temporale, e posso generare report che fanno riferimento all'intervallo temporale tra due snapshot.

Prima di registrare le statistiche occorre assicurarsi di avere impostato il parametro TIMED_STATISTICS = TRUE.
Durante la registrazione delle statistiche, non si deve fare lo startup e shutdown del Database, altrimenti i valori registrati risulteranno falsati, in quanto dopo lo shutdown ed il successivo restart, viene azzerato tutto quello che si trova in RAM. Pertanto snapshot successivi devono essere eseguiti senza mai azzerare il database.

Per generare statistiche occorre connettersi come PERFSTAT ed eseguire la procedura SNAP:

SQL> CONNECT perfstat/perfstat@juve;
SQL> execute STATSPACK.SNAP;


Con tale comando, Oracle registra nelle tabelle dell'utente PERFSTAT le statistiche correnti.
A questo punto posso interrogare tali tabelle direttamente, oppure uso i report di STATSPACK (per avere report tra due snapshot).

Dalla query su STATS$STATSPACK_PARAMETER ho colonna SNAP_LEVEL impostata per default a 5. Esso indica l'accuratezza delle informazione che vengono memorizzate (Lo vedo anche da colonna LEVEL di STATS$SNAPSHOT):

  • 0 - 4 : Statistiche sulle performance generali per tutte le aree di memoria, latches, pools ed events
  • 5 - 9 : aggiunge al livello più basso informazioni più dettagliate sui comandi SQL che utilizzano più risorse.
  • 10 e più: aggiunge ulteriori info sui parent/child latch data.

Per essere più precisi, da STATS$STATSPACK_PARAMETER posso analizzare:

  • SNAP_LEVEL: livello di accuratezza;

  • EXECUTIONS_TH: valore soglia del numero di esecuzioni;

  • DISK_READS_TH: valore soglia del numero di letture dal disco;

  • BUFFER_GETS_TH: valore soglia del numero di buffer ottenuti;

Se lascio i valori di soglia impostati per default, ed il livello SNAP_LEVEL = 5, i comandi sql che verranno registrati sono quelli che superano le seguenti soglie:
  • comando sql eseguito almeno 100 volte;
  • comando sql che ha eseguito più di 1000 letture dal disco;
  • comando sql che ha eseguito più di 1000 chiamate di parsing;
  • comando sql che ha eseguito più di 10.000 buffer gets;
  • comando sql che ha usato più di 1Mb di memoria condivisa;
  • comando sql che ha eseguito più di 20 version count;

I valori per i vari parametri sono cumulativi, pertanto, una query molto efficiente ma eseguita abbastanza spesso, supererà la soglia dei 10000 buffer gets; Devo pertanto comparare il numero di buffer gets e disk reads con il numero di volte in cui la query viene eseguita.

Per modificare le soglie dei vari parametri, devo usare la procedura MODIFY_STATSPACK_PARAMETER del Package STATSPACK. Es:

execute STATSPACK.MODIFY_STATSPACK_PARAMETER (i_snap_level => 5, i_buffer_gets_th => 100000);

Esso modifica il i_buffer_gets_th per il livello i_snap_level 5;

Altri parametri che posso modificare sono:

PARAMETRO RANGE VALORI DEFAULT DESCRIZIONE
I_SESSION_ID Sid valido della V$SESSION 0 Indica il Sid di una sessione Oracle se voglio statistiche a livello di sessione
I_SNAP_LEVEL 0,5,10 5 livello di snapshot
I_EXECUTIONS_TH int > 0 100 Soglia numero di esecuzioni
I_PARSE_CALLS_TH int > 0 1000 Soglia Numero cumulativo di parse calls
I_DISK_READS_TH int > 0 1000 Soglia Numero cumulativo di disk reads
I_BUFFER_GETS_TH int > 0 10000 Soglia Numero cumulativo di buffer gets
I_SHARABLE_MEM_TH int > 0 1048576 Soglia Quantità di Sharable memory allocata
I_VERSION_COUNT_TH int > 0 20 Soglia Numero di versioni del comando sql
I_UCOMMENT qualunque blank commento
I_modify_parameter TRUE o FALSE FALSE Impostare a TRUE se voglio salvare le mie modifiche per gli snapshot futuri

Se volessi attivare la raccolta delle statistiche ad ogni avvio del DB, potrei attivare un Trigger:

CREATE OR REPLACE TRIGGER mio_trigger
AFTER STARTUP ON DATABASE
BEGIN
DBMS_SHARED_POOL.KEEP
('PERFSTAT.STATSPACK','P');
END;
/


Per eliminare degli snapshot, posso usare lo script interattivo SPPURGE.SQL, che chiede quale intervallo di snapshot eliminare, oppure uso SPTRUNC.SQL che tronca direttamente le tabelle.

Dopo aver generato più snapshot, posso vedere analisi e report delle operazioni comprese tra due di essi, mandando in esecuzione il file
SPREPORT.SQL

Esso lavora in modalità interattiva mostrandomi gli snapshot registrati, e facendo scegliere l'intervallo da monitorare.
Mi verrà anche chiesto il nome del file che voglio creare per contenere tali informazioni.
Se ho scelto gli snapshots 1 e 3, il file proposto sarà: sp_1_3.LST

Suppongo di aver lanciato l'utility 4 volte, e di aver quindi collezionato 4 snapshot diversi. Quindi eseguo il report, indicandogli come snapshot da analizzare il numero 1 ed il numero 3. Verrà creato il file sp_1_3.LST. Analizziamone il contenuto:
STATSPACK report for
DB Name DB Id Instance Inst Num Release Cluster Host ------- ---------- --------- --------- ---------- ------- --------- JUVE 402858486 juve 1 9.0.1.1.1 NO KOSMOUS01
Snap Id Snap Time Sessions Curs/Sess Comment ------- ------------------ -------- --------- ------- Begin Snap: 1 21-Ott-02 14:22:16 7 4.6 End Snap: 3 22-Ott-02 09:27:39 7 5.6 Elapsed: 1,145.38 (mins)

Questa prima parte mi riassume brevemente informazioni sul Database, sull'instanza esaminata, sulla versione del database, e sul nome della macchina su cui gira il database. Inoltre ho informazioni specifiche sugli snapshot utilizzati per creare questo report.
In questo caso vedrò gli snapshot 1 e 3, la data in cui sono stati eseguiti, e l'intervallo di tempo trascorso tra essi.
Di seguito ho altre informazioni sul dimensionamento della cache:
Cache Sizes (end)
~~~~~~~~~~~~~~~~~
Buffer Cache: 32M Std Block Size: 4K Shared Pool Size: 44M Log Buffer: 512K

Il Load profile seguente mi da indicazioni sul tipo di attività. In questo caso si tratta prevalentemente di query.
Load Profile
~~~~~~~~~~~~ Per Second Per Transaction --------------- --------------- Redo size: 18.41 632,610.00 Logical reads: 1.02 34,894.50 Block changes: 0.09 3,240.00 Physical reads: 0.37 12,652.00 Physical writes: 0.02 751.50 User calls: 0.00 42.00 Parses: 0.01 412.00 Hard parses: 0.00 9.50 Sorts: 0.00 66.00 Logons: 0.00 0.00 Executes: 0.01 463.00 Transactions: 0.00 % Blocks changed per Read: 9.29 Recursive Call %: 98.25 Rollback per transaction %: 0.00 Rows per Sort: 122.46
Questa sezione mostra l'efficienza dell'instanza, come la buffer Hit Ratio e la library cache Hit Ratio
La HIT RATIO è la frequenza con la quale un processo che sta cercando una risorsa la trova già caricata in memoria. Maggiore è la HIT RATIO, e migliori sono quindi le performance.
Instance Efficiency Percentages (Target 100%)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
            Buffer Nowait %:  100.00       Redo NoWait %:  100.00
            Buffer  Hit   %:   63.74    In-memory Sort %:  100.00
            Library Hit   %:   95.79        Soft Parse %:   97.69
         Execute to Parse %:   11.02         Latch Hit %:  100.00
Parse CPU to Parse Elapsd %:   95.24     % Non-Parse CPU:   99.81
Questa sezione mostra la percentuale di Shared Pool usata e la percentuale di comandi SQL eseguiti più di una volta.
Nel dettaglio vedo che al momento del secondo snapshot il 54.92 % della shared pool fisica è usata. Inoltre di tale parte in uso, il 55.83 % è stato eseguito più di una volta.
 Shared Pool Statistics        Begin   End
                               ------  ------
             Memory Usage %:   53.56   54.92
    % SQL with executions>1:   50.29   55.83
  % Memory for SQL w/exec>1:   54.04   72.09
Questa sezione mostra i 5 eventi che hanno avuto il maggior tempo di wait, seguiti dall'elenco di tutti gli eventi che sono andati in wait.
Top 5 Wait Events
~~~~~~~~~~~~~~~~~                               Wait     % Total
Event                                  Waits  Time (s)   Wt Time
--------------------------------- ---------- ----------- -------
control file parallel write           22,337          47   46.63
control file sequential read           6,790          36   35.97
db file scattered read                 3,684          13   13.34
db file parallel write                   616           3    2.94
log file parallel write                  605           1     .57
          ------------------------------------------------------

 
Wait Events for DB: JUVE  Instance: juve  Snaps: 1 -3
-> s  - second
-> cs - centisecond -     100th of a second
-> ms - millisecond -    1000th of a second
-> us - microsecond - 1000000th of a second
-> ordered by wait time desc, waits desc (idle events last)

                                            
                                                Total Wait   wait
Event                          Waits   Timeouts  Time (s)    (ms)
---------------------------- ------- ---------- ---------- ------
control file parallel write   22,337          0         47      2
control file sequential read   6,790          0         36      5
db file scattered read         3,684          0         13      4
db file parallel write           616        616          3      5
log file parallel write          605        588          1      1
db file sequential read           67          0          0      7
SQL*Net more data to client        2          0          0      1
latch free                         4          4          0      0
log file sync                      1          0          0      1
SQL*Net break/reset to clien       2          0          0      0
LGWR wait for redo copy            1          0          0      0
virtual circuit status         2,290      2,290     68,489  29908
SQL*Net message from client       72          0      2,683  37262
SQL*Net message to client         72          0          0      0
-----------------------------------------------------------------
                                                  
                              Avg Waits
Event                              /txn
----------------------------- ----------
control file parallel write     ########
control file sequential read     3,395.0
db file scattered read           1,842.0
db file parallel write             308.0
log file parallel write            302.5
db file sequential read             33.5
SQL*Net more data to client          1.0
latch free                           2.0
log file sync                        0.5
SQL*Net break/reset to clien         1.0
LGWR wait for redo copy              0.5
virtual circuit status           1,145.0
SQL*Net message from client         36.0
SQL*Net message to client           36.0
----------------------------------------

 
Background Wait Events for DB: JUVE  Instance: juve  Snaps: 1 -3
-> ordered by wait time desc, waits desc (idle events last)

                                                                  
                                                 Total Wait   wait
Event                           Waits   Timeouts  Time (s)    (ms)
---------------------------- -------- ---------- ---------- ------
control file parallel write    22,337          0         47      2
control file sequential read    6,702          0         36      5
db file scattered read          3,684          0         13      4
db file parallel write            616        616          3      5
log file parallel write           605        588          1      1
db file sequential read            67          0          0      7
rdbms ipc reply                    10          0          0      7
latch free                          4          4          0      0
LGWR wait for redo copy             1          0          0      0
rdbms ipc message              67,997     67,694    258,435   3801
pmon timer                     22,957     22,957     68,695   2992
smon timer                        223        223     67,227 ######
------------------------------------------------------------------
                                                                  
                              Avg Waits
Event                              /txn
---------------------------- ----------
control file parallel write    ########
control file sequential read    3,351.0
db file scattered read          1,842.0
db file parallel write            308.0
log file parallel write           302.5
db file sequential read            33.5
rdbms ipc reply                     5.0
latch free                          2.0
LGWR wait for redo copy             0.5
rdbms ipc message              ########
pmon timer                     ########
smon timer                        111.5
---------------------------------------

Questa sezione mostra i comandi SQL che hanno consumato più risorse, in ordine decrescente di Buffer Gets. Tuttavia le statistiche sono cumulative, per cui è possibile che un comando che non consuma eccessive risorse sia stato eseguito tante di quelle volte da essere messo ai primi posti. Dovrei comparare il valore con quello (più in basso) che mi mostra il numero cumulativo di letture dal disco per quella query. Se i due valori sono vicini, devo indagare meglio con EXPLAIN PLAN.
SQL ordered by Gets for DB: JUVE  Instance: juve  Snaps: 1 -3
-> End Buffer Gets Threshold:   10000
-> Note that resources reported for PL/SQL includes the resources
   used by all SQL statements called within the PL/SQL code.
   As individual SQL statements are also reported, it is possible
   and valid for the summed total % to exceed 100
                                             CPU      Elapsd
Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
     18,342         18       1,019.0   26.3    1.70     7.88
Hash Value
----------
1212505517
select i.obj#, i.flags, u.name, o.name from sys.obj$ o, sys.
user$ u, sys.ind$ i where (bitand(i.flags, 256) = 256 or bit
and(i.flags, 512) = 512) and (not((i.type# = 9) and bi
tand(i.flags,8) = 8)) and o.obj#=i.obj# and o.owner# =
 u.user#

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
     18,342         18       1,019.0   26.3    1.51     7.48
Hash Value
----------
3326791696
select u.name, o.name, t.spare1, t.bobj# from sys.obj$ o, sys
.user$ u, sys.tab$ t where (bitand(t.trigflag, 1048576) = 10
48576) and o.obj#=t.obj# and o.owner# = u.user#

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
     10,147          2       5,073.5   14.5    0.01     0.01
Hash Value
----------
1421192181
BEGIN STATSPACK.SNAP; END;

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
      8,550        285          30.0   12.3    0.25     0.27
Hash Value
----------
1714733582
select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t
where t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
      3,757        286          13.1    5.4    1.11     1.32
Hash Value
----------
1239889223
SELECT MIN(TIME_MP), COUNT(*) FROM SMON_SCN_TIME
WHERE THREAD = :1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
      2,787        286           9.7    4.0    0.18     0.18
Hash Value
----------
3634611010
UPDATE SMON_SCN_TIME SET SCN_WRP=:1, SCN_BAS=:2, 
TIME_MP=:3, TIME_DP=:4 WHERE TIME_MP = :5 AND
THREAD = :6  AND   ROWNUM <= 1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
         20          4           5.0    0.0    0.00     0.00
Hash Value
----------
2085632044
select intcol#,nvl(pos#,0),col# from ccol$ where con#=:1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
          9          2           4.5    0.0    0.00     0.00
Hash Value
----------
1536916657
select con#,type#,condlength,intcols,robj#,rcon#,match#,
refact,nvl(enabled,0),rowid,cols,nvl(defer,0),mtime,
nvl(spare1,0) from cdef$ where obj#=:1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
          6          2           3.0    0.0    0.01     0.01
Hash Value
----------
1705880752
select file# from file$ where ts#=:1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
          4          2           2.0    0.0    0.00     0.00
Hash Value
----------
114078687
select con#,obj#,rcon#,enabled,nvl(defer,0) from cdef$ 
where rob j#=:1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
          4          2           2.0    0.0    0.00     0.00
Hash Value
----------
1966425544
select text from view$ where rowid=:1

Buffer Gets Executions Gets per Exec %Total Time(s) Time (s)
----------- ---------- ------------- ------ ------- --------
          3          1           3.0    0.0    0.00     0.00
Hash Value
----------
931956286
select grantee#,privilege#,nvl(col#,0),max(mod(nvl(option$,
0),2))from objauth$ where obj#=:1 group by grantee#,
privilege#,nvl(col#,0) order by grantee#

SQL ordered by Gets for DB: JUVE  Instance: juve  Snaps: 1 -3
-> End Buffer Gets Threshold:   10000
-> Note that resources reported for PL/SQL includes the 
   resources used by all SQL statements called within the 
   PL/SQL code.  As individual SQL statements are also reported,
   it is possible and valid for the summed total % to exceed 100

                                             CPU      Elapsd
Buffer Gets Executions Gets per Exec %Total Time (s) Time (s)
----------- ---------- ------------- ------ -------- --------
          2          1           2.0    0.0     0.00     0.00
Hash Value
----------
1453445442
select col#, grantee#, privilege#,max(mod(nvl(option$,0),2)) fro
m objauth$ where obj#=:1 and col# is not null group by privilege
#, col#, grantee# order by col#, grantee#

Buffer Gets Executions Gets per Exec %Total Time (s) Time (s)
----------- ---------- ------------- ------ -------- --------
          1          1           1.0    0.0     0.00     0.00
Hash Value
----------
1491008679
select u.name,o.name, t.update$, t.insert$, t.delete$, t.enabled
  from obj$ o,user$ u,trigger$ t  where t.baseobject=:1 and t.ob
j#=o.obj# and o.owner#=u.user#  order by o.obj#

Buffer Gets Executions Gets per Exec %Total Time (s) Time (s)
----------- ---------- ------------- ------ -------- --------
          0          1           0.0    0.0     0.00     0.00
Hash Value
----------
3889181447
BEGIN /* NOP UNLESS A TABLE OBJECT */ IF dictionary_
obj_type = 'TABLE' THEN sys.dbms_cdc_publish.change_tabl
e_trigger(dictionary_obj_owner,dictionary_obj_name,'LOCK');
  END IF;       END;

-------------------------------------------------------------
Questa sezione mostra i comandi SQL che hanno consumato più risorse, in ordine decrescente di letture dal disco.

Da notare, per ogni istruzione SQL riportata, il numero di letture fisiche dal disco che il numero di volte in cui l'istruzione è stata eseguita.

Non meno importanti, al fine di valutare il "peso" dell'istruzione, la media del numero di letture per esecuzione, che il tempo (totale e di CPU) necessari per elaborare la singola istruzione.

Nell'esempio trattato in questo articolo, il database non era soggetto ad un grosso carico di lavoro, tra l'altro era stata eseguita da pochissimo un'operazione di Shutdown e Startup, per cui molte delle istruzioni che compaiono sonoistruzioni "interne", cioè di accesso ad oggetti interni per individuare, ad esempio, i permessi di accesso a tabelle, o la loro posizione nei tablespace.
SQL ordered by Reads for DB: JUVE  Instance: juve  Snaps: 1 -3
-> End Disk Reads Threshold:    1000

                                                 CPU      Elapsd
Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
        12,770         18          709.4   50.5     1.70     7.88
Hash Value
----------
1212505517
select i.obj#, i.flags, u.name, o.name     from sys.obj$ o, sys.
user$ u, sys.ind$ i    where  (bitand(i.flags, 256) = 256 or bit
and(i.flags, 512) = 512) and           (not((i.type# = 9) and bi
tand(i.flags,8) = 8)) and           o.obj#=i.obj# and o.owner# =
 u.user#

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
        12,524         18          695.8   49.5     1.51     7.48
Hash Value
----------
3326791696
select u.name, o.name, t.spare1, t.bobj#    from sys.obj$ o, sys
.user$ u, sys.tab$ t    where  (bitand(t.trigflag, 1048576) = 10
48576) and           o.obj#=t.obj# and o.owner# = u.user#

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
            16        286            0.1    0.1     1.11     1.32
Hash Value
----------
1239889223
SELECT MIN(TIME_MP), COUNT(*) FROM SMON_SCN_TIME 
WHERE THREAD = :1

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
            14        285            0.0    0.1     0.25     0.27
Hash Value
----------
1714733582
select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t whe
re t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             2        286            0.0    0.0     0.18     0.18
Hash Value
----------
3634611010
UPDATE SMON_SCN_TIME SET SCN_WRP=:1, SCN_BAS=:2, TIME_MP=:3, TIM
E_DP=:4 WHERE TIME_MP = :5  AND   THREAD = :6  AND   ROWNUM <= 1

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             1          2            0.5    0.0     0.01     0.01
Hash Value
----------
1421192181
BEGIN STATSPACK.SNAP; END;

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          2            0.0    0.0     0.00     0.00
Hash Value
----------
 114078687
select con#,obj#,rcon#,enabled,nvl(defer,0) from cdef$ where rob
j#=:1

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          1            0.0    0.0     0.00     0.00
Hash Value
----------
 931956286
select grantee#,privilege#,nvl(col#,0),max(mod(nvl(option$,0),2)
)from objauth$ where obj#=:1 group by grantee#,privilege#,nvl(co
l#,0) order by grantee#

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          1            0.0    0.0     0.00     0.00
Hash Value
----------
1453445442
select col#, grantee#, privilege#,max(mod(nvl(option$,0),2)) fro
m objauth$ where obj#=:1 and col# is not null group by privilege
#, col#, grantee# order by col#, grantee#

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          1            0.0    0.0     0.00     0.00
Hash Value
----------
1491008679
select u.name,o.name, t.update$, t.insert$, t.delete$, t.enabled
  from obj$ o,user$ u,trigger$ t  where t.baseobject=:1 and t.ob
j#=o.obj# and o.owner#=u.user#  order by o.obj#

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          2            0.0    0.0     0.00     0.00
Hash Value
----------
1536916657
select con#,type#,condlength,intcols,robj#,rcon#,match#,refact,n
vl(enabled,0),rowid,cols,nvl(defer,0),mtime,nvl(spare1,0) from c
def$ where obj#=:1

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          2            0.0    0.0     0.01     0.01
Hash Value
----------
1705880752
select file# from file$ where ts#=:1

SQL ordered by Reads for DB: JUVE  Instance: juve  Snaps: 1 -3
-> End Disk Reads Threshold:    1000

                                                 CPU      Elapsd
Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          2            0.0    0.0     0.00     0.00
Hash Value
----------
1966425544
select text from view$ where rowid=:1

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          4            0.0    0.0     0.00     0.00
Hash Value
----------
2085632044
select intcol#,nvl(pos#,0),col# from ccol$ where con#=:1

Physical Reads Executions Reads per Exec %Total Time (s) Time (s)
-------------- ---------- -------------- ------ -------- --------
             0          1            0.0    0.0     0.00     0.00
Hash Value
----------
3889181447
BEGIN       /* NOP UNLESS A TABLE OBJECT */       IF dictionary_
obj_type = 'TABLE' THEN         sys.dbms_cdc_publish.change_tabl
e_trigger(dictionary_obj_owner,dictionary_obj_name,'LOCK');
  END IF;       END;

-------------------------------------------------------------
Questa sezione mostra i comandi SQL che hanno consumato più risorse, in ordine decrescente rispetto al numero di volte in cui sono stati eseguiti.
SQL ordered by Executions for DB: JUVE  
Instance: juve  Snaps: 1 -3
-> End Executions Threshold:     100

                CPU per    Elap per
Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
       286            286           1.0     0.00     0.00
Hash Value
----------
1239889223
SELECT MIN(TIME_MP), COUNT(*) FROM SMON_SCN_TIME 
WHERE THREAD = :1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
       286            286           1.0     0.00     0.00
Hash Value
----------
3634611010
UPDATE SMON_SCN_TIME SET SCN_WRP=:1, SCN_BAS=:2, TIME_MP=:3, TIM
E_DP=:4 WHERE TIME_MP = :5  AND   THREAD = :6  AND   ROWNUM <= 1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
       285            285           1.0     0.00     0.00
Hash Value
----------
1714733582
select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t whe
re t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
        18              0           0.0     0.09     0.44
Hash Value
----------
1212505517
select i.obj#, i.flags, u.name, o.name     from sys.obj$ o, sys.
user$ u, sys.ind$ i    where  (bitand(i.flags, 256) = 256 or bit
and(i.flags, 512) = 512) and           (not((i.type# = 9) and bi
tand(i.flags,8) = 8)) and           o.obj#=i.obj# and o.owner# =
 u.user#

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
        18              0           0.0     0.08     0.42
Hash Value
----------
3326791696
select u.name, o.name, t.spare1, t.bobj#    from sys.obj$ o, sys
.user$ u, sys.tab$ t    where  (bitand(t.trigflag, 1048576) = 10
48576) and           o.obj#=t.obj# and o.owner# = u.user#

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         4              6           1.5     0.00     0.00
Hash Value
----------
2085632044
select intcol#,nvl(pos#,0),col# from ccol$ where con#=:1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         2              0           0.0     0.00     0.00
Hash Value
----------
 114078687
select con#,obj#,rcon#,enabled,nvl(defer,0) from cdef$ 
where rob j#=:1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         2              2           1.0     0.01     0.01
Hash Value
----------
1421192181
BEGIN STATSPACK.SNAP; END;

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         2              4           2.0     0.00     0.00
Hash Value
----------
1536916657
select con#,type#,condlength,intcols,robj#,rcon#,match#,refact,n
vl(enabled,0),rowid,cols,nvl(defer,0),mtime,nvl(spare1,0) from c
def$ where obj#=:1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         2              2           1.0     0.01     0.01
Hash Value
----------
1705880752
select file# from file$ where ts#=:1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         2              2           1.0     0.00     0.00
Hash Value
----------
1966425544
select text from view$ where rowid=:1

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         1              1           1.0     0.00     0.00
Hash Value
----------
 931956286
select grantee#,privilege#,nvl(col#,0),max(mod(nvl(option$,0),2)
)from objauth$ where obj#=:1 group by grantee#,privilege#,nvl(co
l#,0) order by grantee#

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         1              0           0.0     0.00     0.00
Hash Value
----------
1453445442
select col#, grantee#, privilege#,max(mod(nvl(option$,0),2)) fro
m objauth$ where obj#=:1 and col# is not null group by privilege

SQL ordered by Executions for DB: JUVE  Instance: juve  
Snaps: 1 -3
-> End Executions Threshold:     100

                                        CPU per  Elap per
Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
Hash Value
----------
#, col#, grantee# order by col#, grantee#

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         1              0           0.0     0.00     0.00
Hash Value
----------
1491008679
select u.name,o.name, t.update$, t.insert$, t.delete$, t.enabled
  from obj$ o,user$ u,trigger$ t  where t.baseobject=:1 and t.ob
j#=o.obj# and o.owner#=u.user#  order by o.obj#

Executions Rows Processed Rows per Exec Exec (s) Exec (s) 
---------- -------------- ------------- -------- --------
         1              1           1.0     0.00     0.00
Hash Value
----------
3889181447
BEGIN       /* NOP UNLESS A TABLE OBJECT */       IF dictionary_
obj_type = 'TABLE' THEN         sys.dbms_cdc_publish.change_tabl
e_trigger(dictionary_obj_owner,dictionary_obj_name,'LOCK');
  END IF;       END;

-------------------------------------------------------------
Questa sezione mostra i comandi SQL che hanno consumato più risorse, in ordine decrescente dichiamate di parsing.
SQL ordered by Parse Calls for DB: JUVE  Instance: juve  
Snaps: 1 -3
-> End Parse Calls Threshold:      1000

                           % Total
 Parse Calls  Executions   Parses  Hash Value
------------ ------------ -------- ----------
         286          286     0.35 1239889223
SELECT MIN(TIME_MP), COUNT(*) FROM SMON_SCN_TIME WHERE THREAD =
:1

         286          286     0.35 3634611010
UPDATE SMON_SCN_TIME SET SCN_WRP=:1, SCN_BAS=:2, TIME_MP=:3, TIM
E_DP=:4 WHERE TIME_MP = :5  AND   THREAD = :6  AND   ROWNUM <= 1


         285          285     0.35 1714733582
select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t whe
re t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped=0

          18           18     0.02 1212505517
select i.obj#, i.flags, u.name, o.name     from sys.obj$ o, sys.
user$ u, sys.ind$ i    where  (bitand(i.flags, 256) = 256 or bit
and(i.flags, 512) = 512) and           (not((i.type# = 9) and bi
tand(i.flags,8) = 8)) and           o.obj#=i.obj# and o.owner# =
 u.user#

          18           18     0.02 3326791696
select u.name, o.name, t.spare1, t.bobj#    from sys.obj$ o, sys
.user$ u, sys.tab$ t    where  (bitand(t.trigflag, 1048576) = 10
48576) and           o.obj#=t.obj# and o.owner# = u.user#

           3            2     0.00 1421192181
BEGIN STATSPACK.SNAP; END;

           2            2     0.00 1705880752
select file# from file$ where ts#=:1

           2            2     0.00 1966425544
select text from view$ where rowid=:1

           1            1     0.00 1491008679
select u.name,o.name, t.update$, t.insert$, t.delete$, t.enabled
  from obj$ o,user$ u,trigger$ t  where t.baseobject=:1 and t.ob
j#=o.obj# and o.owner#=u.user#  order by o.obj#

           1            1     0.00 3889181447
BEGIN       /* NOP UNLESS A TABLE OBJECT */       IF dictionary_
obj_type = 'TABLE' THEN         sys.dbms_cdc_publish.change_tabl
e_trigger(dictionary_obj_owner,dictionary_obj_name,'LOCK');
  END IF;       END;

           0            0     0.00   29771263
insert into argument$( obj#,procedure$,procedure#,overload#,posi
tion#,sequence#,level#,argument,type#,default#,in_out,length,pre
cision#,scale,radix,charsetid,charsetform,properties,type_owner,
type_name,type_subname,type_linkname,pls_type) values (:1,:2,:3,
:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15,:16,:17,:18,:19,:20,:2

           0            0     0.00   58950663
select con# from con$ where owner#=:1 and name=:2

SQL ordered by Parse Calls for DB: JUVE  Instance: juve  
Snaps: 1 -3
-> End Parse Calls Threshold:      1000

                           % Total
 Parse Calls  Executions   Parses  Hash Value
------------ ------------ -------- ----------

           0            0     0.00   79934617
select ts#,file#,block#,nvl(bobj#,0),nvl(tab#,0),intcols,nvl(clu
cols,0),audit$,flags,pctfree$,pctused$,initrans,maxtrans,rowcnt,
blkcnt,empcnt,avgspc,chncnt,avgrln,analyzetime, samplesize,cols,
property,nvl(degree,1),nvl(instances,1),avgspc_flb,flbcnt,kernel
cols,nvl(trigflag, 0),nvl(spare1,0),nvl(spare2,0),spare4 from ta

           0            2     0.00  114078687
select con#,obj#,rcon#,enabled,nvl(defer,0) from cdef$ where rob
j#=:1

           0            0     0.00  181436173
select /*+ index(idl_sb4$ i_idl_sb41) +*/ max(version)   from id
l_sb4$ where obj#=:1 and version<=:2 and   (part=0 or part=2) an
d piece#=0

           0            0     0.00  189272129
select o.owner#,o.name,o.namespace,o.remoteowner,o.linkname,o.su
bname,o.dataobj#,o.flags from obj$ o where o.obj#=:1

           0            0     0.00  199702406
select i.obj#,i.ts#,i.file#,i.block#,i.intcols,i.type#,i.flags,
i.property,i.pctfree$,i.initrans,i.maxtrans,i.blevel,i.leafcnt,i
.distkey, i.lblkkey,i.dblkkey,i.clufac,i.cols,i.analyzetime,i.sa
mplesize,i.dataobj#, nvl(i.degree,1),nvl(i.instances,1),i.rowcnt
,mod(i.pctthres$,256),i.indmethod#,i.trunccnt,nvl(c.unicols,0),n

           0            0     0.00  315090940
update con$ set con#=:3 where owner#=:1 and name=:2

           0            0     0.00  365454555
select cols,audit$,textlength,intcols,property,flags,rowid from
view$ where obj#=:1

           0            0     0.00  411033441
insert into dependency$(d_obj#,d_timestamp,order#,p_obj#,p_times
tamp,d_owner#, property)values (:1,:2,:3,:4,:5,:6, :7)

           0            0     0.00  449029010
delete from dependency$ where d_obj#=:1

           0            0     0.00  636388251
insert into ccol$(con#,obj#,intcol#,pos#,col#) values(:1,:2,:3,d
ecode(:4,0,null,:4),:5)

           0            0     0.00  641766606
insert into col$(obj#,name,intcol#,segcol#,type#,length,precisio
n#,scale,null$,offset,fixedstorage,segcollength,deflength,defaul
t$,col#,property,charsetid,charsetform,spare1,spare2,spare3)valu
es(:1,:2,:3,:4,:5,:6,decode(:7,0,null,:7),decode(:5,2,decode(:8,
-127/*MAXSB1MINAL*/,null,:8),178,:8,179,:8,180,:8,181,:8,182,:8,

           0            0     0.00  787265282

SQL ordered by Parse Calls for DB: JUVE  Instance: juve  
Snaps: 1 -3
-> End Parse Calls Threshold:      1000

                           % Total
 Parse Calls  Executions   Parses  Hash Value
------------ ------------ -------- ----------
BEGIN       /* NOP UNLESS A TABLE OBJECT */       IF dictionary_
obj_type = 'TABLE' THEN         sys.dbms_cdc_publish.change_tabl
e_trigger(dictionary_obj_owner,dictionary_obj_name,sysevent);

-------------------------------------------------------------

Questa sezione mostra la lista delle statistiche dalla V$SYSTAT, e cioè in memoria. Risulta molto utile una comparazione tra questi valori e quelli precedenti.

Ad esempio posso analizzare le operazioni di SORT effettuate sul disco con quelle effettuate in memoria. Se adesso aumento la Sort Area Size (spazio della memoria destinato ad eseguire operazioni di ordinamento),
ridurrò di conseguenza il Disk Sort (ordinamento eseguito su disco a causa di spazio insufficiente in memoria).




Da guardare con attenzione se ho elevato numero di Full Table Scan su tabelle grandi.
Instance Activity Stats for DB: JUVE  Instance: juve  
Snaps: 1 -3

Statistic                           Total per Second per Trans
--------------------------------- ------- ---------- ---------
background timeouts                67,104        1.0  33,552.0
buffer is not pinned count         49,322        0.7  24,661.0
buffer is pinned count              1,160        0.0     580.0
bytes received via SQL*Net from c   9,889        0.1   4,944.5
bytes sent via SQL*Net to client   75,893        1.1  37,946.5
calls to get snapshot scn: kcmgss   3,807        0.1   1,903.5
calls to kcmgas                       932        0.0     466.0
calls to kcmgcs                    22,660        0.3  11,330.0
change write time                      32        0.0      16.0
cleanouts and rollbacks - consist       0        0.0       0.0
cleanouts only - consistent read        6        0.0       3.0
cluster key scan block gets         5,907        0.1   2,953.5
cluster key scans                   1,145        0.0     572.5
commit cleanout failures: buffer        0        0.0       0.0
commit cleanout failures: callbac       6        0.0       3.0
commit cleanouts                      427        0.0     213.5
commit cleanouts successfully com     421        0.0     210.5
consistent changes                      1        0.0       0.5
consistent gets                    57,448        0.8  28,724.0
consistent gets - examination       4,119        0.1   2,059.5
CPU used by this session              314        0.0     157.0
CPU used when call started            314        0.0     157.0
CR blocks created                       1        0.0       0.5
cursor authentications                  7        0.0       3.5
data blocks consistent reads - un       1        0.0       0.5
db block changes                    6,480        0.1   3,240.0
db block gets                      12,341        0.2   6,170.5
DBWR checkpoint buffers written     1,500        0.0     750.0
DBWR checkpoints                        0        0.0       0.0
DBWR revisited being-written buff       0        0.0       0.0
DBWR transaction table writes         228        0.0     114.0
DBWR undo block writes                989        0.0     494.5
deferred (CURRENT) block cleanout     275        0.0     137.5
enqueue conversions                     0        0.0       0.0
enqueue releases                   32,658        0.5  16,329.0
enqueue requests                   32,658        0.5  16,329.0
enqueue waits                           0        0.0       0.0
execute count                         926        0.0     463.0
free buffer requested              26,173        0.4  13,086.5
hot buffers moved to head of LRU       27        0.0      13.5
immediate (CR) block cleanout app       6        0.0       3.0
immediate (CURRENT) block cleanou      85        0.0      42.5
leaf node splits                       35        0.0      17.5
logons cumulative                       0        0.0       0.0
messages received                     628        0.0     314.0
messages sent                         628        0.0     314.0
no buffer to keep pinned count      3,525        0.1   1,762.5
no work - consistent read gets     51,621        0.8  25,810.5
opened cursors cumulative             824        0.0     412.0
parse count (failures)                  0        0.0       0.0
parse count (hard)                     19        0.0       9.5
parse count (total)                   824        0.0     412.0
parse time cpu                         60        0.0      30.0
parse time elapsed                     63        0.0      31.5
physical reads                     25,304        0.4  12,652.0
physical reads direct                   0        0.0       0.0

Instance Activity Stats for DB: JUVE  Instance: juve  
Snaps: 1 -3

Statistic                              Total per Second per Trans
--------------------------------- ---------- ---------- ---------
physical writes                        1,503        0.0     751.5
physical writes direct                     0        0.0       0.0
physical writes non checkpoint           883        0.0     441.5
prefetched blocks                     21,553        0.3  10,776.5
process last non-idle time                 0        0.0       0.0
recovery blocks read                       0        0.0       0.0
recursive calls                        4,710        0.1   2,355.0
recursive cpu usage                      189        0.0      94.5
redo blocks written                    2,922        0.0   1,461.0
redo entries                           4,649        0.1   2,324.5
redo size                          1,265,220       18.4 632,610.0
redo synch time                            0        0.0       0.0
redo synch writes                          2        0.0       1.0
redo wastage                         208,216        3.0 104,108.0
redo write time                           70        0.0      35.0
redo writer latching time                  0        0.0       0.0
redo writes                              605        0.0     302.5
rollback changes - undo records a          0        0.0       0.0
rollbacks only - consistent read           1        0.0       0.5
rows fetched via callback                  2        0.0       1.0
session connect time                       0        0.0       0.0
session logical reads                 69,789        1.0  34,894.5
session pga memory                   266,432        3.9 133,216.0
session pga memory max               266,432        3.9 133,216.0
session uga memory                     9,316        0.1   4,658.0
session uga memory max                16,224        0.2   8,112.0
shared hash latch upgrades - no w      3,039        0.0   1,519.5
sorts (memory)                           132        0.0      66.0
sorts (rows)                          16,165        0.2   8,082.5
SQL*Net roundtrips to/from client         72        0.0      36.0
summed dirty queue length                  0        0.0       0.0
switch current to new buffer               0        0.0       0.0
table fetch by rowid                     715        0.0     357.5
table fetch continued row                  0        0.0       0.0
table scan blocks gotten              42,988        0.6  21,494.0
table scan rows gotten               132,619        1.9  66,309.5
table scans (long tables)                 38        0.0      19.0
table scans (short tables)               298        0.0     149.0
user calls                                84        0.0      42.0
user commits                               2        0.0       1.0
write clones created in backgroun          0        0.0       0.0
write clones created in foregroun          0        0.0       0.0
          -------------------------------------------------------

Questa sezione mostra le statistiche di I/O per i Tablespaces, ordinate per operazioni di I/O (lettura + scrittura). Tali statistiche devono essere guardate con attenzione soprattutto negli intervalli di tempo in cui si registra un'elevata attività.
Tablespace IO Stats for DB: JUVE  Instance: juve  
Snaps: 1 -3
->ordered by IOs (Reads + Writes) desc

Tablespace
------------------------------
            Av      Av     Av              Av    Buffer Av Buf
    Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s  Waits Wt(ms)
--------- ------- ------ ------- ------ -------- ------ ------
SYSTEM
    3,751       0    3.7     6.7     81        0      0    0.0
UNDOTBS
        0       0    0.0          1,251        0      0    0.0
USERS
        0       0    0.0            244        0      0    0.0
      --------------------------------------------------------
Questa sezione mostra le statistiche di I/O per i Datafiles, ordinate per operazioni di I/O (lettura + scrittura). Tali statistiche devono essere guardate con attenzione soprattutto negli intervalli di tempo in cui si registra un'elevata attività.
File IO Stats for DB: JUVE  Instance: juve  Snaps: 1 -3
->ordered by Tablespace, File

Tablespace               Filename
------------------------ --------------------------------------
             Av      Av     Av             Av     Buffer Av Buf
     Reads Reads/s Rd(ms) Blks/Rd Writes Writes/s Waits  Wt(ms)
---------- ------- ------ ------- ------ -------- ------ ------
SYSTEM                   D:ORACLEORADATAJUVESYSTEM01.DBF
     3,751       0    3.7     6.7    81        0       0

UNDOTBS                  D:ORACLEORADATAJUVEUNDOTBS01.DBF
         0       0                1,251        0       0

USERS                    D:ORACLEORADATAJUVEUSERS01.DBF
         0       0                  244        0       0

      ---------------------------------------------------------
Questa sezione mostra le statistiche sulla Buffer Cache divisa per le tre aree (Default, Keep, Recycle).
In questo caso specifico, non sono state configurate le aree Keep e Recycle, pertanto avrò statistiche solo per l'area Default.
Buffer Pool Statistics for DB: JUVE  Instance: juve  Snaps: 1 -3
-> Standard block size Pools  D: default,  K: keep,  R: recycle
-> Default Pools for other block sizes: 2k, 4k, 8k, 16k, 32k

                                                           Free
     Number of Cache      Buffer    Physical   Physical  Buffer
P      Buffers Hit %        Gets       Reads     Writes   Waits
--- ---------- ----- ----------- ----------- ---------- -------
D        7,864  61.5      65,773      25,304      1,576       0
          -----------------------------------------------------
    Write  Buffer
 Complete    Busy
P   Waits   Waits
 --------  ------
D       0       0
  -------------------------------------------------------------
Questa sezione mostra statistiche sull'instance Recovery. Si tratta di una stima del tempo necessario a fare il recovery dell'instanza, avendo fissato determinati parametri come l'intervallo di Checkpoint e la dimensione dei files di Log
Instance Recovery Stats for DB: JUVE  Instance: juve  Snaps: 1 -3
-> B: Begin snapshot,  E: End snapshot

  Targt Estd                                    Log File 
  MTTR  MTTR   Recovery    Actual     Target      Size   
   (s)   (s)   Estd IOs  Redo Blks  Redo Blks  Redo Blks 
- ----- ----- ---------- ---------- ---------- ----------
B   227    46       7864        681        252       1836
E   227    45       7864        499        243       1836
          -----------------------------------------------
 Log Ckpt  Log Ckpt
 Timeout   Interval
 Redo Blks Redo Blks
---------- ---------
B      252 ##########
E      243 ##########
      ---------------
Questa sezione mostra statistiche sulla PGA (Program Global Area) allocata.
PGA Memory Stats for DB: JUVE  Instance: juve  Snaps: 1 -3
-> WorkArea (W/A) memory is used for: sort, bitmap merge, 
and hash join ops

Statistic                 Begin (M) End (M) % Diff
------------------------- --------- ------- ------
maximum PGA allocated        10.268  10.521   2.47
total PGA allocated          10.268  10.521   2.47
          ----------------------------------------
Questa sezione mostra Statistiche sugli RBS (RollBack Segments).
Se trovo valore elevato per i Wait, significa che è meglio aggiungere altri RBS.
Rollback Segment Stats for DB: JUVE  Instance: juve  
Snaps: 1 -3
->A high value for "Pct Waits" suggests more rollback segments
   may be required
->RBS stats may not be accurate between begin and end snaps
   when using Auto Undo managment, as RBS may be dynamically
   created and dropped as needed
        Trans Table       Pct   Undo Bytes
RBS No   Gets   Waits   Written      Wraps  Shrinks  Extends
------ -------- ----- ----------- -------- -------- --------
     0    227.0  0.00           0        0        0        0
     1    293.0  0.00       4,806        0        1        0
     2    283.0  0.00       4,608        0        1        0
     3  1,040.0  0.00      14,774        1        1        0
     4    292.0  0.00       4,518        0        2        0
     5  1,348.0  0.00     144,758        1        1        0
     6    769.0  0.00     141,576        1        1        0
     7    523.0  0.00       7,056        1        1        0
     8    299.0  0.00       4,572        0        2        0
     9    855.0  0.00      10,710        0        0        0
    10  1,273.0  0.00      15,102        0        1        0
          ---------------------------------------------------
Questa sezione mostra il dimensionamento e le altre caratteristiche fisiche degli RBS, fornendo quindi delle linee guida per la creazione di ulteriori RBS o per il ridimensionamento delle caratteristiche degli RBS già allocati.
Rollback Segment Storage for DB: JUVE  Instance: juve  
Snaps: 1 -3
->Optimal Size should be larger than Avg Active

RBS No  Segment Size    Avg Active   Optimal Size Maximum Size
------ ------------- ------------- -------------- ------------
     0       425,984             0                     425,984
     1       126,976       104,857                   1,175,552
     2       126,976       104,857                   1,175,552
     3       126,976       110,755                   1,175,552
     4       126,976        22,238                     323,584
     5       126,976       104,857                   1,175,552
     6       126,976       104,857                   1,175,552
     7       126,976       104,857                   1,175,552
     8       126,976        40,472                     585,728
     9     1,175,552             0                   1,175,552
    10     1,175,552       115,653                   2,224,128
        ------------------------------------------------------
Questa sezione e la seguente, sono l'analogo degli RBS, nel caso in cui si sia scelto di attivare la gestione automatica tramite UNDO.
Undo Segment Summary for DB: JUVE  Instance: juve  Snaps: 1 -3
-> Undo segment block stats:
-> uS - unexpired Stolen,   uR - unexpired Released,   
uU - unexpired reUsed
-> eS - expired   Stolen,   eR - expired   Released,   
eU - expired   reUsed

Undo   Undo   Num Max Qry   Max Tx Snapshot Out of uS/uR/uU/
 TS# Blocks Trans Len (s) Concurcy  Too Old  Space eS/eR/eU
---- ------ ----- ------- -------- -------- ------ ------------
   1    781   933       7        2        0      0 0/0/60/0/0/0
  ------------------------------------------------
Undo Segment Stats for DB: JUVE  Instance: juve  Snaps: 1 -3
-> ordered by Time desc

               Undo   Num Max Qry Max Tx Snap   Out of uS/uR/uU/
End Time     Blocks Trans Len (s)  Concy  Old  Space eS/eR/eU
------------ ------ ----- ------- ------ ---- ------ ------------
22-Ott 09:23      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 09:13    202   209       0      1    0      0 0/0/60/0/0/0
22-Ott 09:03      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 08:53      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 08:43      0     2       2      1    0      0 0/0/0/0/0/0
22-Ott 08:33      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 08:23      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 08:13      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 08:03      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 07:53      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 07:43      0     2       1      1    0      0 0/0/0/0/0/0
22-Ott 07:33      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 07:23      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 07:13      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 07:03      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 06:53      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 06:43      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 06:33      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 06:23      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 06:13      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 06:03      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 05:53      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 05:43      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 05:33      0     1       0      1    0      0 0/0/0/0/0/0
22-Ott 05:23      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 05:13      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 05:03      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 04:53      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 04:43      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 04:33      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 04:23      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 04:13      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 04:03      0     2       0      1    0      0 0/0/0/0/0/0
22-Ott 03:53      0     2       0      1    0      0 0/0/0/0/0/0
          --------------------------------------------------

Questa sezione mostra invece statistiche sulle attività di LATCH
Latch Activity for DB: JUVE  Instance: juve  Snaps: 1 -3
->"Get Requests", "Pct Get Miss" and "Avg Slps/Miss" 
   are statistics for willing-to-wait latch get requests
->"NoWait Requests", "Pct NoWait Miss" are for no-wait latch
   get requests
->"Pct Misses" for both should be very close to 0.0
-> ordered by Wait Time desc, Avg Slps/Miss,
    Pct NoWait Miss desc

                                     Pct    Avg   Wait          
                            Get      Get   Slps   Time   NoWait
Latch                     Requests   Miss  /Miss    (s) Requests
------------------------ --------- ------ ------ ------ --------
cache buffers chains       183,396    0.0             0   48,099
cache buffers lru chain     65,162    0.0             0    1,692
kmcpvec latch                    0                    0        4
redo copy                        0                    0    4,637
SQL memory manager worka       134    0.0             0        0
checkpoint queue latch     545,683    0.0             0        0
dml lock allocation          1,639    0.0             0        0
enqueues                   128,715    0.0             0        0
hash table column usage        150    0.0             0        0
library cache               26,571    0.0             0        0
row cache objects           18,019    0.0             0        0
post/wait queue latch            2    0.0             0        0
ncodef allocation latch      1,093    0.0             0        0
multiblock read objects      7,478    0.0             0        0
messages                   136,972    0.0             0        0
list of block allocation       536    0.0             0        0
library cache load lock         54    0.0             0        0
ktm global data                223    0.0             0        0
kmcptab latch                    4    0.0             0        0
undo global data            11,575    0.0             0        0
transaction branch alloc     1,093    0.0             0        0
transaction allocation       2,792    0.0             0        0
sort extent pool             1,316    0.0             0        0
shared pool                  2,203    0.0             0        0
session timer               22,957    0.0             0        0
session switching            1,093    0.0             0        0
session idle bit               703    0.0             0        0
session allocation           1,069    0.0             0        0
sequence cache                   6    0.0             0        0
file number translation         19    0.0             0        0
enqueue hash chains         65,294    0.0             0        0
child cursor hash table        198    0.0             0        0
channel operations paren    22,337    0.0             0        0
active checkpoint queue     22,679    0.0             0        0
redo allocation             27,684    0.0    1.0      0        0
redo writing                93,525    0.0    1.0      0        0

   Pct
NoWait
  Miss
------
   0.0
   0.0
   0.0
   0.0
          -----------------------------------------------------
Latch Sleep breakdown for DB: JUVE  Instance: juve  Snaps: 1 -3
-> ordered by misses desc

                             Get                            Spin &
Latch Name              Requests  Misses   Sleeps Sleeps 1->4
-------------------- ----------- ------- -------- ------------
redo allocation           27,684       2        2    0/2/0/0/0
redo writing              93,525       2        2    0/2/0/0/0
          -----------------------------------------------------
Questa sezione mostra statistiche sulla Dictionary Cache e sull'attività della Library Cache. Se ho valori troppo alti per PCT MISS potrebbe essere opportuno aumentare la dimensione della Shared Pool.
Dictionary Cache Stats for DB: JUVE  Instance: juve  Snaps: 1 -3
->"Pct Misses"  should be very low (< 2% in most cases)
->"Cache Usage" is the number of cache entries being used
->"Pct SGA"     is the ratio of usage to allocated size 
for that cache

                          Get  Pct Scan   Pct  Mod  Final  Pct
Cache                Requests Miss Reqs  Miss Reqs  Usage  SGA
-------------------- -------- ---- ---- ----- ---- ------ ----
dc_free_extents           223  0.0    0          0      2   29
dc_object_ids              52  0.0    0          0    463   98
dc_objects                 86  0.0    0          0  1,397  100
dc_rollback_segments    4,952  0.0    0          0     12   67
dc_segments                64  0.0    0          0    276   96
dc_tablespaces            678  0.0    0          0     14   58
dc_user_grants              8  0.0    0          0      5   18
dc_usernames               22  0.0    0          0     13   62
dc_users                   25  0.0    0          0     29   67
          ------------------------------------------------
Library Cache Activity for DB: JUVE  Instance: juve  
Snaps: 1 -3
->"Pct Misses"  should be very low

                     Get Pct     Pin      Pct          Invali-
Namespace       Requests Miss  Requests   Miss Reloads dations
--------------- -------- ---- ---------- ----- ------- -------
BODY                   1  0.0          1   0.0       0       0
CLUSTER                2  0.0          2   0.0       0       0
SQL AREA             829  0.6      2,392   2.3       0       0
TABLE/PROCEDURE      221  0.0        382  16.5       0       0
TRIGGER                2  0.0          2   0.0       0       0
          ----------------------------------------------------
Questa sezione mostra il dimensionamento delle aree che costituiscono la SGA
SGA Memory Summary for DB: JUVE  Instance: juve  Snaps: 1 -3

SGA regions                       Size in Bytes
------------------------------ ----------------
Database Buffers                     33,554,432
Fixed Size                              282,576
Redo Buffers                            532,480
Variable Size                        83,886,080
                               ----------------
sum                                 118,255,568
          --------------------------------------
In questa sezione trovo invece un'analisi più accurata delle varie aree della SGA con le differenze che intercorrono tra i due istanti temporali in cui ho eseguito gli snapshot.
SGA breakdown difference for DB: JUVE  Instance: juve  Snaps: 1 -3

Pool   Name                      Begin value   End value  % Diff
------ ------------------------- ----------- ----------- -------
java   free memory                27,529,216  27,529,216    0.00
java   memory in use               6,025,216   6,025,216    0.00
shared character set object          315,704     315,704    0.00
shared Checkpoint queue              141,152     141,152    0.00
shared dictionary cache            1,121,180   1,121,180    0.00
shared DML lock                      100,408     100,408    0.00
shared enqueue                       171,860     171,860    0.00
shared errors                         56,648      56,648    0.00
shared event statistics per sess   1,356,600   1,356,600    0.00
shared FileIdentificatonBlock        323,292     323,292    0.00
shared FileOpenBlock                 695,504     695,504    0.00
shared fixed allocation callback          60          60    0.00
shared free memory                21,427,728  20,799,456   -2.93
shared joxlod: in ehe                328,852     328,852    0.00
shared joxlod: in phe                146,820     146,820    0.00
shared joxlod: init P                    748         748    0.00
shared joxs heap init                  4,220       4,220    0.00
shared KGK heap                        3,756       3,756    0.00
shared KGLS heap                   2,074,032   2,103,596    1.43
shared ksm_file2sga region           148,652     148,652    0.00
shared KSXR pending messages que     226,636     226,636    0.00
shared KSXR receive buffers        1,060,000   1,060,000    0.00
shared library cache               4,633,224   4,712,884    1.72
shared message pool freequeue        772,672     772,672    0.00
shared miscellaneous               2,420,880   2,420,880    0.00
shared parameters                     16,980      16,980    0.00
shared PLS non-lib hp                  2,068       2,068    0.00
shared PL/SQL DIANA                2,997,680   2,997,680    0.00
shared PL/SQL MPCODE                 728,908     728,908    0.00
shared processes                     127,800     127,800    0.00
shared sessions                      395,760     395,760    0.00
shared simulator trace entries        98,304      98,304    0.00
shared sql area                    2,731,672   3,250,924   19.01
shared table definiti                  3,076       3,916   27.31
shared transaction                   182,376     182,376    0.00
shared trigger defini                  3,444       3,444    0.00
shared trigger inform                  1,272         228  -82.08
shared trigger source                  2,168       2,168    0.00
shared VIRTUAL CIRCUITS              266,120     266,120    0.00
shared 1M buffer                   1,049,088   1,049,088    0.00
       db_block_buffers           33,554,432  33,554,432    0.00
       fixed_sga                     282,576     282,576    0.00
       log_buffer                    524,288     524,288    0.00
          -----------------------------------------------------

Poichè durante l'intervallo temporale tra i due Snapshot potrei aver apportato alcune modifiche ai parametri di inizializzazione (magari per testare gli effetti sulle prestazioni legate ad alcune modifiche), ecco allora un report sui valori assunti da alcuni parametri:
init.ora Parameters for DB: JUVE  Instance: juve  Snaps: 1 -3

                                                               
Parameter Name                Begin value                      
----------------------------- ---------------------------------
background_dump_dest          C:oracleadminjuvebdump
compatible                    9.0.0
control_files                 C:oracleoradatajuveCONTROL01.
core_dump_dest                C:oracleadminjuvecdump
db_block_size                 4096
db_cache_size                 33554432
db_create_file_dest           d:oracleoradatajuve
db_create_online_log_dest_1   d:oracleoradatajuveuno
db_create_online_log_dest_2   d:oracleoradatajuvedue
db_domain
db_name                       juve
dispatchers                   (PROTOCOL=TCP)(SER=MODOSE), (PROT
fast_start_mttr_target        300
ifile                         C:oracleadminjuvepfileinit.o
instance_name                 juve
java_pool_size                33554432
large_pool_size               1048576
open_cursors                  300
processes                     150
remote_login_passwordfile     EXCLUSIVE
shared_pool_size              46137344
sort_area_size                524288
timed_statistics              TRUE
undo_management               AUTO
undo_tablespace               UNDOTBS
user_dump_dest                C:oracleadminjuveudump

  End value
(if different)
--------------
          ----------------------------------------------------

End of Report

Prima di chiudere l'articolo, alcuni piccoli consigli:
  • non esagerare con la creazione di snapshot: Averne troppi non è un vantaggio, soprattutto se poi non vengono analizzati.


  • creare degli snapshot nei momenti di carico più significativi e rappresentativi, cioè in queglii intervalli di tempo che meglio rappresentano l'attività "normale" del database.


  • cercare di essere regolari nelle analisi, in modo da accorgersi, per tempo, di situazioni anomale o di variazioni di carico sul database


  • prima di eseguire il report, potrebbe essere opportuno eseguire un ANALYZE sulle tabelle di PERFSTAT; ad esempio con : SQL> execute DBMS_UTILITY.ANALYZE_SCHEMA ('PERFSTAT','COMPUTE');


  • dopo aver eseguito uno Shutdown e Startup, posso eliminare gli snapshot vecchi, in quanto non ha senso metterli in relazione con Snapshot nuovi. posso usare script interattivo SPPURGE.SQL che chiederà quale intervallo di snapshot eliminare.


Questo documento non è un documento ufficiale della Oracle Corporation. Oracle detiene tutti i diritti sulla propria documentazione. Alcuni termini usati sono trademarks registrati. In caso di dubbi o incertezze consultate la documentazione ufficiale di Oracle o contattate il Customer Support di Oracle.
Commenti (0)2003-06-19