← Performance
Oracle · Performance

How to find top CPU-consuming sessions in Oracle

Rank the top 10 active Oracle sessions by CPU used from V$SESSTAT, with OS PID, module, and SQL_ID.

Tested on11g12c18c19c21c23ai26ai

Rank active user sessions by CPU used since login, from V$SESSTAT. Joins to V$PROCESS for OS PID so you can correlate with OS tools (top, pidstat) when a database is CPU-bound right now.

SET LINES 500 PAGES 500
COL program       FORMAT a30 HEADING "Program"
COL cpu_usage_sec FORMAT 999999999 HEADING "CPU in Seconds"
COL module        FORMAT a18
COL osuser        FORMAT a40
COL username      FORMAT a15
COL ospid         FORMAT a06 HEADING "OS PID"
COL sid           FORMAT 99999
COL serial#       FORMAT 999999
COL sql_id        FORMAT a15
COL machine       FORMAT a25

SELECT *
FROM (
  SELECT p.spid AS ospid,
         ss.sid, ss.serial#, ss.sql_id, ss.username,
         SUBSTR(ss.program, 1, 30) AS program,
         ss.module, ss.osuser, ss.machine, ss.status,
         se.value / 100 AS cpu_usage_sec
  FROM   v$session  ss,
         v$sesstat  se,
         v$statname sn,
         v$process  p
  WHERE  se.statistic# = sn.statistic#
  AND    sn.name       LIKE '%CPU used by this session%'
  AND    se.sid        = ss.sid
  AND    ss.username  != 'SYS'
  AND    ss.status     = 'ACTIVE'
  AND    ss.username  IS NOT NULL
  AND    ss.paddr      = p.addr
  AND    se.value      > 0
  ORDER BY se.value DESC
)
WHERE rownum < 11;
performancesessionscpuv$sesstat