Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

69

积分

0

好友

13

主题
1#
发表于 2012-8-9 00:59:50 | 查看: 6454| 回复: 9
直连模式PGA哪些区是UGA的,共享模式UGA哪些区在SGA,哪些区保留在PGA?

看了一大堆PGA内存结构,连HELLODBA和tianlesoftware  好像都没有讲清楚.
http://blog.csdn.net/tianlesoftware/article/details/5594080

ORACLE培训的PPT好像也没讲得很详细.
有的人说PGA=UGA+工作区,看某些图好像是PGA=堆栈+UGA
工作区=SORT_AREA+HASHJOIN_AREA+CREATE BITMAP+BITMAP MERGE

UGA=用户回话数据+游标状态, 有的说 UGA=用户回话数据+游标状态+SORT AREA
daiwei_uga.png



所以我总结了下画了个图
PGA_UGA.jpg
2#
发表于 2012-8-9 13:12:38
UGA

===>  

1. Fixed UGA   UGA Variables, Fixed UGA在session连接时分配并初始化
   UGA Variables 变量用来方便访问UGA对象结构


2. UGA heap , uga heap要么是 top pga heap的子堆 (subheap)  (dedicated mode),  要么是 shared pool heap 或者 large pool heap的子堆(shared mode)



The UGA is part of: The PGA when using dedicated servers The SGA when using multithreaded servers UGA heap information can be seen in X$KSMUP
X $KSMUP - [U]GA Hea[P]

x$ksmhp

SQL> create or replace view v$uga_subheaps as
  2  select /*+use_nl(h,s)*/
  3         h.ksmchds, u.ksmchcom
  4  ,      h.ksmchcom ksmchnam
  5  ,      h.ksmchsiz, h.ksmchcls, h.ksmchpar
  6  from   x$ksmhp h, x$ksmup u
  7  where  h.ksmchds = u.ksmchpar
  8  and    u.ksmchcls like '%recr'
  9  and    u.ksmchpar != hextoraw('00');

View created.

SQL> select distinct ksmchcom from  v$uga_subheaps;

KSMCHCOM
----------------
Alloc environm
koh-kghu sessi
dbgdInitEventG
PLS UGA hp
kxs-heap-p
kxs-heap-b
kxs-heap-d
kxs-heap-i
kxs-heap-w


dump UGA

SQL> oradebug setmypid;
Statement processed.
SQL> oradebug dump heapdump 4;
Statement processed.
SQL> oradebug tracefile_name
/s01/orabase/diag/rdbms/g11r23/G11R23/trace/G11R23_ora_12207.trc


top uga heap的 subheap之一是session heap

*** 2012-08-09 06:11:08.743
Processing Oradebug command 'dump heapdump 4'
******************************************************
HEAP DUMP heap name="session heap"  desc=0x2b1008a167c8
extent sz=0xffc8 alt=32767 het=32767 rec=0 flg=2 opc=3
parent=0xbaf9700 owner=0x11b845d98 nex=(nil) xsz=0x1e278 heap=(nil)
fl2=0x20, nex=(nil), dsxvers=1, dsxflg=0x0
dsx first ext=0x8a20098
EXTENT 0 addr=0x2b1008b67038
  Chunk     2b1008b67048 sz=    64416    free      "               "
  Chunk     2b1008b76be8 sz=     1048    freeable  "kxs-heap-p     "  ds=0x2b1008a30d00
EXTENT 1 addr=0x2b1008a40030
  Chunk     2b1008a40040 sz=     4928    perm      "perm           "  alo=4928
  Chunk     2b1008a41380 sz=      736    free      "               "
  Chunk     2b1008a41660 sz=     1296    recreate  "kxs-heap-p     "  latch=(nil)
     ds     2b1008a30d00 sz=     3392 ct=        3
            2b1008b76be8 sz=     1048
            2b1008a47ca0 sz=     1048
  Chunk     2b1008a41b70 sz=      584    freeable  "kqdAllocFromUGA"
  Chunk     2b1008a41db8 sz=     1048    freeable  "kxs-heap-p     "  ds=0x2b1008a503c8
  Chunk     2b1008a421d0 sz=      176    free      "               "
  Chunk     2b1008a42280 sz=     1016    freeable  "kgsc:kxsc      "
  Chunk     2b1008a42678 sz=     1048    freeable  "kxs-heap-p     "  ds=0x2b1008a40f08
  Chunk     2b1008a42a90 sz=     1048    recreate  "kxs-heap-p     "  latch=(nil)
     ds     2b1008a31338 sz=     1048 ct=        1




不知道这样是否你可以 明白一点

回复 只看该作者 道具 举报

3#
发表于 2012-8-9 13:22:50
kxs-heap-b  => kxs         dict/instmgmt         support for executing shared cursors

dbgdInitEventG    => init event  


koh-kghu sessi => Heap Services


PLS UGA hp  => for PL SQL

回复 只看该作者 道具 举报

4#
发表于 2012-8-9 14:59:38

非常不明白

官方文档说的和官方的图形 发生了冲突

好像PGA和UGA 连盖国强 都没法讲清楚

回复 只看该作者 道具 举报

5#
发表于 2012-8-9 15:47:57
你觉得不清楚的 是什么部分?

回复 只看该作者 道具 举报

6#
发表于 2012-8-9 16:09:10
10G和11G 官方文档之间有冲突, 官方的图形和文档有冲突. 盖国强的PPT跟官方文档有冲突

10G的PGA 构成  1 会话内存,2 SQL工作区, 3 私有内存  4 游标和SQL区 ;  私有内存 里分 1 持久区 2 运行区
11G的PGA 构成  1 会话内存,2 SQL工作区, 3 私有内存  ;  私有内存 里分 1 持久区 2 运行区
11G的UGA构成:  1 会话变量  2 OLAP POOL

10G和11G 官方文档   说共享模式下 PGA 里的 会话内存 和 私有内存的持久区 迁到SGA里.

盖国强的PPT里说的是 10G  PGA构成是 堆栈+UGA     UGA构成是 用户会话数据和游标状态.
有的PPT图形  UGA构成是 用户会话数据和游标状态. 加 SORT AREA.
UGA 在共享模式全迁到了SGA

盖国强2005年的PPT
盖国强PPT.JPG
英文PPT
uga01.jpg

[ 本帖最后由 zengmuansha 于 2012-8-9 16:12 编辑 ]

回复 只看该作者 道具 举报

7#
发表于 2012-8-9 16:15:03

根据官方文档构思的图形

构思的PGA和UGA
myPGAUGA.PNG

[ 本帖最后由 zengmuansha 于 2012-8-9 16:16 编辑 ]

回复 只看该作者 道具 举报

8#
发表于 2012-8-10 12:23:37
这个问题很有意思, 我可能还是需要写一篇东西 回复你, 敬请期待

回复 只看该作者 道具 举报

9#
发表于 2013-7-12 17:21:51
Maclean Liu(刘相兵 发表于 2012-8-10 12:23
这个问题很有意思, 我可能还是需要写一篇东西 回复你, 敬请期待

我对这个概念也很模糊,刘老大,我们还期待着呢

回复 只看该作者 道具 举报

10#
发表于 2013-7-14 16:59:30
我做了一个实验,在10.2.0.5的环境下。如果pga是自动管理,那么以shared模式连接进入,sort area就是在PGA里面分配;如果是手工管理,那么sort area就在UGA里面分配,而UGA在large pool里面。
有一点是肯定的,如果以shared模式进去,fixed uga会是在shared_pool里面。
你可以在shared session连进后,查看 v$sgastat里面的内容。

下面是实验步骤:
这个脚本其实是tom书面的
建立table t, create table t select * from all_objects。完成后可以反复向T插入数据,insert into t select * from t;
run_query脚本1:这个地方可以设定session pga 为自动或手动管理,
  1. set serveroutput off
  2. set echo on
  3. column sid new_val SID
  4. select sid from v$mystat where rownum = 1;
  5. alter session set workarea_size_policy=MANUAL;
  6. alter session set sort_area_size = &1;
  7. prompt run @reset_stat &SID and @watch_stat in another session here!
  8. pause
  9. set termout off
  10. select * from t order by 1, 2, 3, 4;
  11. set termout on
  12. prompt run @watch_stat in another session here!
  13. Pause
复制代码
reset_stat 脚本:
  1. variable sid number
  2. exec :sid := &1
复制代码
watch_stat
  1. merge into sess_stats
  2. using
  3. (
  4. select a.name, b.value
  5. from v$statname a, v$sesstat b
  6. where a.statistic# = b.statistic#
  7. and b.sid = :sid
  8. and (a.name like '%ga %'
  9. or a.name like '%direct temp%')
  10. ) curr_stats
  11. on (sess_stats.name = curr_stats.name)
  12. when matched then
  13. update set diff = curr_stats.value - sess_stats.value,
  14. value = curr_stats.value
  15. when not matched then
  16. insert ( name, value, diff )
  17. values
  18. ( curr_stats.name, curr_stats.value, null )
  19. /
  20. select name,
  21. case when name like '%ga %'
  22. then round(value/1024,0)
  23. else value
  24. end kbytes_writes,
  25. case when name like '%ga %'
  26. then round(diff /1024,0)
  27. else value
  28. end diff_kbytes_writes
  29. from sess_stats
  30. order by name;
复制代码
实验要在单一用户连接的环境。怕别的用户连接对数据会有影响

首先shared server模式,手动管理,
在一个窗口以shared server模式连接,@T:\oradata\run_query 6291456
在排序的过程中,可以看large pool的session heap 变化,是会变大的
然后在另一个窗口观察数据
@T:\oradata\reset_stat 147
@T:\oradata\watch_stat

对比结果:
  1. NAME                           KBYTES_WRITES DIFF_KBYTES_WRITES
  2. ------------------------------ ------------- ------------------
  3. physical reads direct temporar             0                  0
  4. y tablespace

  5. physical writes direct tempora             0                  0
  6. ry tablespace

  7. session pga memory                       928                  0
  8. session pga memory max                 928                  0
  9. session uga memory                       219                  0
  10. session uga memory max                 219                  0

  11. 6 rows selected.

  12. SQL> @T:\oradata\watch_stat

  13. 6 rows merged.


  14. NAME                           KBYTES_WRITES DIFF_KBYTES_WRITES
  15. ------------------------------ ------------- ------------------
  16. physical reads direct temporar          2292               2292
  17. y tablespace

  18. physical writes direct tempora          2292               2292
  19. ry tablespace

  20. session pga memory                       928                  0
  21. session pga memory max                928                  0
  22. session uga memory                       219                  0
  23. session uga memory max              5921               5702

  24. 6 rows selected.
复制代码
UGA增大了哟,但是pga没有

相反,如果shared模式,自动管理呢,结果就会是PGA增大,uga不怎么变

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-29 16:32 , Processed in 0.053817 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569