Temp sort users

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
Fiche express
Type Script SQL*Plus de diagnostic (Tablespace temporaire)
Voir aussi Temp sort segment · Temp status

Temp sort users identifie les sessions qui effectuent actuellement un tri (ou toute autre opération) dans l'espace temporaire. Le script croise la vue V$SORT_USAGE (tris actifs de l'instance) avec V$SESSION et V$PROCESS pour retrouver l'utilisateur Oracle, l'utilisateur système, le PID côté OS et le programme client à l'origine du tri. Compatible RAC (vues GV$).

La colonne Contents indique si le segment est créé dans un tablespace temporaire ou permanent — en pratique elle vaut toujours TEMPORARY depuis Oracle9i, la distinction ne concernant que les très anciennes versions.

Utile pour identifier rapidement quelle session sature le tablespace temporaire (gros tri, hash join mal dimensionné, requête sans index adapté...).

Script

-- Sessions consommant actuellement de l'espace de tri temporaire (RAC-compatible)
SET LINESIZE 180
SET PAGESIZE 50000
SET VERIFY OFF

COLUMN instance_name      FORMAT a8                 HEADING 'Instance'
COLUMN tablespace_name    FORMAT a15                HEADING 'Tablespace Name'
COLUMN sid                FORMAT 99999              HEADING 'SID'
COLUMN serial_id          FORMAT 99999999           HEADING 'Serial ID'
COLUMN session_status     FORMAT a9                 HEADING 'Status'
COLUMN oracle_username    FORMAT a18                HEADING 'Oracle User'
COLUMN os_username        FORMAT a18                HEADING 'O/S User'
COLUMN os_pid             FORMAT a8                 HEADING 'O/S PID'
COLUMN session_program    FORMAT a20                HEADING 'Session Program' TRUNC
COLUMN contents           FORMAT a9                 HEADING 'Contents'
COLUMN segtype            FORMAT a12                HEADING 'Segment Type'
COLUMN bytes              FORMAT 999,999,999,999    HEADING 'Bytes'

BREAK ON instance_name SKIP PAGE

SELECT
    i.instance_name       instance_name
  , t.tablespace          tablespace_name
  , s.sid                 sid
  , s.serial#             serial_id
  , s.status               session_status
  , s.username             oracle_username
  , s.osuser               os_username
  , p.spid                 os_pid
  , s.program               session_program
  , t.contents               contents
  , t.segtype                segtype
  , (t.blocks * c.value)     bytes
FROM
    gv$instance     i
  , gv$session      s
  , gv$process      p
  , gv$sort_usage   t
  , (SELECT value FROM v$parameter
     WHERE name = 'db_block_size') c
WHERE
      s.inst_id = p.inst_id
  AND p.inst_id = i.inst_id
  AND t.inst_id = i.inst_id
  AND s.inst_id = i.inst_id
  AND s.saddr = t.session_addr
  AND s.paddr = p.addr
ORDER BY
    i.instance_name
  , s.sid;

Voir aussi

  • Temp sort segment — état réel du segment de tri consommé par ces sessions
  • Temp status — vue d'ensemble (taille, occupation) de tous les tablespaces temporaires