Translation

The oldest posts, are written in Italian. If you are interested and you want read the post in English, please use Google Translator. You can find it on the right side. If the translation is wrong, please email me: I'll try to translate for you.
Visualizzazione post con etichetta Wait Events. Mostra tutti i post
Visualizzazione post con etichetta Wait Events. Mostra tutti i post

mercoledì, gennaio 13, 2016

Wait Event: Introduzione (3 di 3)


La seguente immagine riassume gli stati e le condizioni in cui può trovarsi una sessione

  

Mentre la seguente tabella interpreta i valori della coppia di colonne (STATE,EVENT) della vista del dizionario dati V$SESSION.


V$SESSION.SATE
V$SESSION.EVENT
Significato di STATE
Significato di EVENT
WAITING
Motivo di attesa
WAITING
Motivo di attesa
WAITED UNKNOWN TIME
Valore
ON CPU
NULL
WAITED SHORT TIME
Valore
ON CPU
NULL
WAITED KNOWN TIME
Valore
ON CPU
NULL

Al fine di ottenere la corretta interpretazione della coppia di collonne (simulando la tabella di cui sopra), possiamo utilizzare la seguente select

select
         state
        ,event
        ,decode (state, 'WAITING', 'WAITING', 'ON CPU') real_state
        ,decode (state, 'WAITING, event, NULL) real_event
from
        v$session
di cui questo è un esempio di output


STATE
EVENT
REAL_STATE
REAL_EVENT
WAITING
db file sequential read
WAITING
db file sequential read
WAITING
db file scattered read
WAITING
db file scattered read
WAITED SHORT TIME
SQL*Net more data to client
ON CPU

WAITING
PX Deq: Table Q Normal
WAITING
PX Deq: Table Q Normal
WAITING
db file sequential read
WAITING
db file sequential read
WAITED KNOWN TIME
db file scattered read
ON CPU

WAITED KNOWN TIME
db file sequential read
ON CPU

WAITING
db file sequential read
WAITING
db file sequential read
WAITING
db file sequential read
WAITING
db file sequential read

Wait Event: Introduzione (2 di 3)


I “wait events” rappresentano il motivo per cui una sessione aspetta.

Una sessione ATTIVA può essere (1) nella condizione di attesa, ovvero “WAITING”, oppure (2) di lavoro, ovvero “ON CPU”. Nel primo caso, la sessione aspetta che una richiesta venga terminata prima di proseguire, nel secondo, la sessione sta consumando CPU.

Quando la sessione è nella condizione di WAITING (colonna V$SESSION.STATE), nella colonna V$SESSION.EVENT viene riportato il motivo di tale attesa.

Durante le nostre analisi dobbiamo pertanto sempre considerare la coppia “condizione in cui versa la sessione” + “motivo dell’attesa”, ovvero la coppia delle colonne “V$SESSION.STATE” + “V$SESSION.EVENT”. In caso contrario otteniamo informazioni incomplete.

Purtroppo c'è un po' di confusione. Se una sessione è in attesa, Oracle indica correttamente la condizione di "WAITING" in V$SESSION.STATE, ma se sta lavorando riporta uno dei seguenti valori
·         WAITED UNKNOWN TIME  
·         WAITED SHORT TIME
·         WAITED KNOWN TIME

In ogni caso V$SESSION.EVENT resta valorizzata.

Poiché il “wait event” è il motivo dell’attesa di una sessione, la colonna V$SESSION.EVENT ha senso se e soltanto se la sessione è nella condizione di WAITING: se questa sta consumando CPU, allora tale colonna non ha più alcun significato.

Wait Event: Introduzione (1 di 3)


Un processo oracle può lavorare o non lavorare. Nel primo caso diciamo che il processo è ATTIVO, nel secondo è INATTIVO. Oracle registra questa informazione in V$SESSION.SATUS del dizionario dati (i valori sono ovviamente immagazzinati in inglese: ACTIVE e INACTIVE, rispettivamente).

Durante le normali attività quotidiane, normalmente siamo impegnati in un lavoro che assorbe tutte le nostre energie, e spesso, in un modo o nell’altro dobbiamo interrompere quello che stiamo facendo per poi riprenderlo in un secondo momento.

I processi Oracle si comportano in modo simile. Quelli che lavorano, quelli di tipo “ACTIVE”, consumano CPU ma se non possono farlo, allora devono aspettare.

Ogni processo Oracle tiene traccia del proprio del proprio lavoro (consumo di CPU). Quando un processo Oracle non può consumare CPU, allora ci avvisa. Da punto di vista di Oracle, noi chiamiamo questo avviso, "tempo di attesa" o “Wait Time” e, quando l’attesa termina, il processo riprende a consumare CPU. Ogni processo Oracle raccoglie quindi statistiche sul proprio consumo di CPU.

Le attese, dette anche “eventi di attesa” sono raccolti in categorie o classi. Queste possiamo raggrupparle macroscopicamente in due. Di tipo:
* Idle
* not Idle (nutte le altre classi)

La differenza consiste nel fatto che il primo tipo non ha impatto sulle prestazioni (in inglese “performace”) mentre il secondo ha diretta influenza sull'esperienza dell'utente. Le sessioni NON ATTIVE hanno sempre attese di tipo “not idle”.

Esiste una vista di sistema che elenca tutte le classi: V$SYSTEM_WAIT_CLASS. La colonna che riporta il nome della classe è WAIT_CLASS.