Sess waiting
| Fiche express | |
|---|---|
| Type | Script SQL*Plus de diagnostic |
| Voir aussi | Sess waiting 8i · Sess users active |
Sess waiting produit un rapport des sessions actuellement en attente (wait
events), classées par durée d'attente décroissante — les sessions en tête sont celles qui
attendent depuis le plus longtemps sur un événement non-idle. Toutes les instances d'un
cluster sont couvertes (gv$*).
La liste des événements exclus dans la clause NOT IN correspond aux
idle events habituels (attente de message client, timers internes SMON/PMON, messages
inter-instances RAC...) qui ne reflètent pas un vrai goulot d'étranglement — cette liste
n'est pas figée d'une version à l'autre d'Oracle, à ajuster si un nouvel événement idle
apparaît dans les résultats (à vérifier selon version).
Note : le script ne remonte pas les colonnes P1/P2/
P3 de gv$session_wait, alors que ce sont elles qui donnent le
détail spécifique à l'événement (numéro de fichier/bloc pour une attente I/O, identifiant de
verrou pour une attente de lock...). Pour aller plus loin dans le diagnostic d'un événement
précis, ajouter sw.p1, sw.p2, sw.p3 à la liste des
colonnes sélectionnées.
Depuis Oracle 10g, v$session expose aussi directement l'événement d'attente
courant d'une session (colonnes event, seconds_in_wait...), ce qui
permet de se passer de la jointure vers v$session_wait — celle-ci reste
disponible pour compatibilité.
Script
SET LINESIZE 180
SET PAGESIZE 50000
SET FEEDBACK 6
SET VERIFY OFF
COLUMN instance_name FORMAT a9 HEADING 'Instance'
COLUMN sid FORMAT 999999 HEADING 'SID'
COLUMN serial_id FORMAT 99999999 HEADING 'Serial ID'
COLUMN oracle_username FORMAT a20 HEADING 'Utilisateur Oracle'
COLUMN state FORMAT a8 HEADING 'État'
COLUMN event FORMAT a25 HEADING 'Événement'
COLUMN wait_time_sec FORMAT 999,999,999 HEADING 'Attente (sec)'
COLUMN last_sql FORMAT a45 HEADING 'Dernier SQL'
SELECT
i.instance_name instance_name
, s.sid sid
, s.serial# serial_id
, s.username oracle_username
, sw.state state
, sw.event event
, sw.seconds_in_wait wait_time_sec
, sa.sql_text last_sql
FROM
gv$session_wait sw
INNER JOIN gv$session s ON ( sw.inst_id = s.inst_id AND sw.sid = s.sid )
INNER JOIN gv$sqlarea sa ON ( s.inst_id = sa.inst_id AND s.sql_address = sa.address )
INNER JOIN gv$instance i ON ( s.inst_id = i.inst_id )
WHERE
sw.event NOT IN ( 'rdbms ipc message'
, 'smon timer'
, 'pmon timer'
, 'SQL*Net message from client'
, 'lock manager wait for remote message'
, 'ges remote message'
, 'gcs remote message'
, 'gcs for action'
, 'client message'
, 'pipe get'
, 'null event'
, 'PX Idle Wait'
, 'single-task message'
, 'PX Deq: Execution Msg'
, 'KXFQ: kxfqdeq - normal deqeue'
, 'listen endpoint status'
, 'slave wait'
, 'wakeup time manager'
)
AND sw.seconds_in_wait > 0
ORDER BY
wait_time_sec DESC
, i.instance_name;
Voir aussi
- Sess waiting 8i — même rapport, syntaxe de jointure historique
- Sess users active — sessions actives, sans focus sur les attentes