← Performance
Oracle · Performance

How to check PGA and UGA memory per session in Oracle

Rank Oracle sessions by PGA and UGA memory (current and peak) from V$SESSTAT and V$STATNAME.

Tested on11g12c18c19c21c23ai26ai

For each session, show current and peak PGA and UGA memory alongside session identifiers (Oracle user, OS user, program, machine). Ranked by current PGA to surface memory hogs.

SET LINESIZE 145
SET PAGESIZE 9999

COLUMN sid                    FORMAT 999           HEADING 'SID'
COLUMN oracle_username        FORMAT a12           HEADING 'Oracle User'     JUSTIFY right
COLUMN os_username            FORMAT a9            HEADING 'O/S User'        JUSTIFY right
COLUMN session_program        FORMAT a18           HEADING 'Session Program' TRUNC
COLUMN session_machine        FORMAT a8            HEADING 'Machine'         JUSTIFY right TRUNC
COLUMN session_pga_memory     FORMAT 9,999,999,999 HEADING 'PGA Memory'
COLUMN session_pga_memory_max FORMAT 9,999,999,999 HEADING 'PGA Memory Max'
COLUMN session_uga_memory     FORMAT 9,999,999,999 HEADING 'UGA Memory'
COLUMN session_uga_memory_max FORMAT 9,999,999,999 HEADING 'UGA Memory Max'

SELECT s.sid,
       LPAD(s.username, 12) AS oracle_username,
       LPAD(s.osuser, 9)    AS os_username,
       s.program            AS session_program,
       LPAD(s.machine, 8)   AS session_machine,
       (SELECT ss.value FROM v$sesstat ss, v$statname sn
        WHERE  ss.sid        = s.sid
        AND    sn.statistic# = ss.statistic#
        AND    sn.name       = 'session pga memory')     AS session_pga_memory,
       (SELECT ss.value FROM v$sesstat ss, v$statname sn
        WHERE  ss.sid        = s.sid
        AND    sn.statistic# = ss.statistic#
        AND    sn.name       = 'session pga memory max') AS session_pga_memory_max,
       (SELECT ss.value FROM v$sesstat ss, v$statname sn
        WHERE  ss.sid        = s.sid
        AND    sn.statistic# = ss.statistic#
        AND    sn.name       = 'session uga memory')     AS session_uga_memory,
       (SELECT ss.value FROM v$sesstat ss, v$statname sn
        WHERE  ss.sid        = s.sid
        AND    sn.statistic# = ss.statistic#
        AND    sn.name       = 'session uga memory max') AS session_uga_memory_max
FROM   v$session s
ORDER BY session_pga_memory DESC;
performancememorypgaugav$sesstat