Re: What is the better session memory used stat; UGA or PGA?

  • From: "Radoulov, Dimitre" <cichomitiko@xxxxxxxxx>
  • To: <cmarquez@xxxxxxxxxxxxxxxx>, <oracle-l@xxxxxxxxxxxxx>
  • Date: Tue, 25 Oct 2005 20:48:22 +0200

What is the better session memory used stat; UGA or PGA?Quote from AskTom Forum. Try pmap -x.

<quote>
The User Global Area (UGA) is memory that is associated with a user session.
The UGA normally comes from the SGA to allow migration of sessions across
processes. If session migration is disabled, UGA memory will be allocated from
the PGA.


The Process Global Area (PGA) is memory which is physically private to a process
(cannot be accessed by another process). Note that an OS process and an Oracle
session are not equivalent. The PGA, unlike the SGA, can grow at runtime.


So, in dedicated server mode, when session migration is not needed, the UGA is
in the PGA is in the individual process.


It looks like you are using Solaris. On Solaris, ps, top and other tools are
virtually useless for looking at memory usage of Oracle processes. They
report back not only the process memory but all shared memory attached by the
process. You are seeing much of the SGA as well as process memory in that
report.


You should investigate the /usr/proc/bin/pmap utility instead.  It'll report
back the breakdown of memory, showing shared memory segments and shared data
from .so files and the like.
</quote>

<quote>

We use UGA memory in dedicated server mode. It is just where is the UGA located
-- in dedicated server mode, it's in the PGA. In shared server mode, it's in
the SGA.


If you have my book -- i describe these structures in some detail, here is a
short extract:

...
PGA and UGA

As stated earlier, the PGA is a process piece of memory. This is memory specific
to a single operating system process or thread. This memory is not accessible by
any other process/thread in the system. It is typically allocated via the C
run-time call malloc(), and may grow (and shrink even) at run-time. The PGA is
never allocated out of Oracle's SGA - it is always allocated locally by the
process or thread.


The UGA is in effect, your session's state. It is memory that your session must
always be able to get to. The location of the UGA is wholly dependent on how
Oracle has been configured to accept connections. If you have configured MTS,
then the UGA must be stored in a memory structure that everyone has access to -
and that would be the SGA. In this way, your session can use any one of the
shared servers, since any one of them can read and write your sessions data.
On the other hand, if you are using a dedicated server connection, this need
for universal access to your session state goes away, and the UGA becomes
virtually synonymous with the PGA - it will in fact be contained in the PGA. In
fact, when you look at the system statistics, you'll find the UGA reported in
the PGA in dedicated server mode (the PGA will be greater then or equal to the
UGA memory used, the PGA memory size will include the UGA size as well).


</quote>


For more info:

http://asktom.oracle.com/pls/ask/f?p=4950:8:15452666227313862376::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:267215452482

http://asktom.oracle.com/pls/ask/f?p=4950:8:15452666227313862376::NO::F4950_P8_DISPLAYID,F4950_P8_CRITERIA:404110378143


HTH Dimitre Radoulov




----- Original Message ----- From: Marquez, Chris
To: oracle-l@xxxxxxxxxxxxx
Sent: Tuesday, October 25, 2005 7:26 PM
Subject: What is the better session memory used stat; UGA or PGA?





ENV; - 9205 - Dedicated Server Mode.

UGA is part of the PGA, and PGA part of the SGA.
Which is the better stat for session memory (currently) used?
I think and am finding UGA as the answer...but don't want to ignore the higher PGA number I see, considering what the PGA holds.



SELECT
e.SID,
e.username,
e.status,
a.UGA_MEMORY,
b.PGA_MEMORY
FROM
-- Current UGA size for the session.
(select y.SID, TO_CHAR(ROUND(y.value/1024),99999999) || ' KB' UGA_MEMORY from v$sesstat y, v$statname z where y.STATISTIC# = z.STATISTIC# and NAME = 'session uga memory') a,
-- Current PGA size for the session.
(select y.SID, TO_CHAR(ROUND(y.value/1024),99999999) || ' KB' PGA_MEMORY from v$sesstat y, v$statname z where y.STATISTIC# = z.STATISTIC# and NAME = 'session pga memory') b,
v$session e
WHERE e.sid=a.sid
AND e.sid=b.sid
ORDER BY
e.status,
a.UGA_MEMORY desc
/



SID USERNAME STATUS UGA_MEMORY PGA_MEMORY
---------- ------------- ------------------------ -------------------- --------------------
190 SCOTT ACTIVE 14723 KB 17243 KB
25 SYS ACTIVE 2205 KB 401 KB
80 WEBUSERS ACTIVE 422 KB 1616 KB
50 ACTIVE 37 KB 11532 KB
222 ACTIVE 37 KB 8412 KB
169 ACTIVE 37 KB 6370 KB
217 ACTIVE 36 KB 115 KB
16 ACTIVE 36 KB 4255 KB
3 ACTIVE 36 KB 2030 KB
15 ACTIVE 36 KB 4255 KB
19 ACTIVE 36 KB 1366 KB
1 ACTIVE 36 KB 115 KB
11 ACTIVE 35 KB 3443 KB
9 ACTIVE 34 KB 1558 KB
2 ACTIVE 33 KB 208 KB
4 ACTIVE 33 KB 2951 KB
5 ACTIVE 33 KB 3918 KB
10 ACTIVE 33 KB 8439 KB
7 ACTIVE 33 KB 3918 KB
133 WEBUSERS INACTIVE 1653 KB 2546 KB
61 WEBUSERS INACTIVE 1422 KB 2336 KB
194 WEBUSERS INACTIVE 565 KB 1901 KB
154 WEBUSERS INACTIVE 511 KB 1902 KB
22 WEBUSERS INACTIVE 491 KB 1853 KB




Thanks,

Chris Marquez
Oracle DBA


--
//www.freelists.org/webpage/oracle-l

Other related posts: