- 最后登录
- 2018-9-14
- 在线时间
- 103 小时
- 威望
- 0
- 金钱
- 1829
- 注册时间
- 2012-12-17
- 阅读权限
- 10
- 帖子
- 139
- 精华
- 1
- 积分
- 0
- UID
- 820
|
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 为自动或手动管理,- set serveroutput off
- set echo on
- column sid new_val SID
- select sid from v$mystat where rownum = 1;
- alter session set workarea_size_policy=MANUAL;
- alter session set sort_area_size = &1;
- prompt run @reset_stat &SID and @watch_stat in another session here!
- pause
- set termout off
- select * from t order by 1, 2, 3, 4;
- set termout on
- prompt run @watch_stat in another session here!
- Pause
复制代码 reset_stat 脚本:- variable sid number
- exec :sid := &1
复制代码 watch_stat- merge into sess_stats
- using
- (
- select a.name, b.value
- from v$statname a, v$sesstat b
- where a.statistic# = b.statistic#
- and b.sid = :sid
- and (a.name like '%ga %'
- or a.name like '%direct temp%')
- ) curr_stats
- on (sess_stats.name = curr_stats.name)
- when matched then
- update set diff = curr_stats.value - sess_stats.value,
- value = curr_stats.value
- when not matched then
- insert ( name, value, diff )
- values
- ( curr_stats.name, curr_stats.value, null )
- /
- select name,
- case when name like '%ga %'
- then round(value/1024,0)
- else value
- end kbytes_writes,
- case when name like '%ga %'
- then round(diff /1024,0)
- else value
- end diff_kbytes_writes
- from sess_stats
- 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
对比结果:- NAME KBYTES_WRITES DIFF_KBYTES_WRITES
- ------------------------------ ------------- ------------------
- physical reads direct temporar 0 0
- y tablespace
- physical writes direct tempora 0 0
- ry tablespace
- session pga memory 928 0
- session pga memory max 928 0
- session uga memory 219 0
- session uga memory max 219 0
- 6 rows selected.
- SQL> @T:\oradata\watch_stat
- 6 rows merged.
- NAME KBYTES_WRITES DIFF_KBYTES_WRITES
- ------------------------------ ------------- ------------------
- physical reads direct temporar 2292 2292
- y tablespace
- physical writes direct tempora 2292 2292
- ry tablespace
- session pga memory 928 0
- session pga memory max 928 0
- session uga memory 219 0
- session uga memory max 5921 5702
- 6 rows selected.
复制代码 UGA增大了哟,但是pga没有
相反,如果shared模式,自动管理呢,结果就会是PGA增大,uga不怎么变
|
|