引用thomas kyte的PGA和UGA的统计内存的使用情况,用排序区不同的大小来查看pga、UGA、物理读取不同内存使用

会话1:创建测试表和测试不同排序大小

create table t as select * from all_objects;
exec dbms_stats.gather_table_stats( user, 'T' );

创建测试表

创建run_query脚本:用于控制内存参数排序区(sort_area_size)的大小和表的排序

connect glltabspace/oracle
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

run_query

会话2:查看会话1中不同排序大小,得到PGA\UGA、物理读取的情况。

reset_stat脚本:记录PGA\UGA、物理读取使用情况和与之前相比差值

create table sess_stats
( name varchar2(64), value number, diff number ); variable sid number
exec :sid := &1

reset_stat

watch_stat脚本:统计PGA\UGA、物理读取使用情况,并写入reset_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;

watch_stat

设置排序区为64KB(65536),查看PGA,UGA

###########################################################
###

设置排序区为64KB(65536),查看PGA,UGA

         ###
###########################################################
#会话1:
glltabspace@GULL> @run_query 65536
已连接。
glltabspace@GULL> column sid new_val SID
glltabspace@GULL> select sid from v$mystat where rownum = 1; SID
----------
1 glltabspace@GULL> alter session set workarea_size_policy=manual; 会话已更改。 glltabspace@GULL> alter session set sort_area_size = &1;
原值 1: alter session set sort_area_size = &1
新值 1: alter session set sort_area_size = 65536 会话已更改。 glltabspace@GULL> prompt run @reset_stat &SID and @watch_stat in another session here!
run @reset_stat 1 and @watch_stat in another session here!
glltabspace@GULL> pause #新建一个会话,为会话2,在表还未排序时,查看初始的PGA\UGA
#@reset_stat 1 ,1是会话1中的SID
glltabspace@GULL> @reset_stat 1 表已创建。 PL/SQL 过程已成功完成。 glltabspace@GULL> @watch_stat 6 行已合并。 NAME KBYTES_WRITES DIFF_KBYTES_WRITES
---------------------------------------------------------------- ------------- ------------------
physical reads direct temporary tablespace 0 0
physical writes direct temporary tablespace 0 0
session pga memory 1185
session pga memory max 1185
session uga memory 370
session uga memory max 434 已选择6行。 #此时说明:现在的会话使用uga=370kb,最大值434kb,PGA=1185KB,最大值1185kb

#会话1:按回车,继续执行表的排序

glltabspace@GULL> set termout off
glltabspace@GULL> prompt run @watch_stat in another session here!
run @watch_stat in another session here!
glltabspace@GULL> pause

#会话2:

glltabspace@GULL> @watch_stat

6 行已合并。

NAME                                                             KBYTES_WRITES DIFF_KBYTES_WRITES
---------------------------------------------------------------- ------------- ------------------
physical reads direct temporary tablespace 3181 3181
physical writes direct temporary tablespace 3181 3181
session pga memory 993 -192
session pga memory max 1249 64
session uga memory 498 128
session uga memory max 562 128 已选择6行。
#说明:临时表空间的读取、写入比较大
pga:993KB,最大值1249kb
uga:498kb,最大值562kb

排序区为64kb

设置排序区为1MB(1048576)查看PGA,UGA

NAME                                                             KBYTES_WRITES DIFF_KBYTES_WRITES
---------------------------------------------------------------- ------------- ------------------
physical reads direct temporary tablespace 1064 1064
physical writes direct temporary tablespace 1064 1064
session pga memory 801 0
session pga memory max 2209 0
session uga memory 370 0
session uga memory max 1344 0 已选择6行。

排序区1MB

发现此时的临时表空间的I/O次数有所下降

设置排序区为1G(1073741820)查看PGA,UGA

NAME                                                             KBYTES_WRITES DIFF_KBYTES_WRITES
---------------------------------------------------------------- ------------- ------------------
physical reads direct temporary tablespace 0 0
physical writes direct temporary tablespace 0 0
session pga memory 737 0
session pga memory max 10849 10112
session uga memory 306 0
session uga memory max 10282 9977

排序区1G

当排序区为1g,实际的uga的大小使用10mb,此时的临时表空间I/O数为0,说明排序区的内存不是一开始就分配,需要多少分配多少,但不会超过sort_area_size的大小

PGA和UGA内存的使用情况的更多相关文章

  1. ORACLE内存结构:PGA And UGA,ORACLE用户进程、服务器进程

    执行一个SQL语句 执行查询语句的过程: 用户进程执行一个查询语句如select * from emp where empno=7839 用户进程和服务器进程建立连接,把改用户进程的信息存储到PGA的 ...

  2. 萌新笔记——linux下查看内存的使用情况

    windows上有各种软件可以进行"一键加速"之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: ...

  3. Android最佳性能实践(二)——分析内存的使用情况

    由于Android是为移动设备开发的操作系统,我们在开发应用程序的时候应当始终把内存问题充分考虑在内.虽然Android系统拥有垃圾自动回收机制,但这并不意味着我们就可以完全忽略何时去分配或释放内存. ...

  4. RabbitMQ 使用QOS(服务质量)+Ack机制解决内存崩溃的情况

    当消息有几万条或者几十万条的时候,如果消费的方式不对,会造成内存崩溃的情况 一:consumer 1. 短链接:basicget 独自去获取message... request 的方式去获取,断开式. ...

  5. "每日一道面试题".net托管堆是否会存在内存泄漏的情况

    首先说答案:会 所谓的内存泄漏,就是指内存空间上产生了不再被实际使用却又无非被分配的对象.严格意义上来说,在.net中经常会遇到内存泄漏的情况,因为托管堆内的对象不再被使用时,需要等待下一次GC才会被 ...

  6. linux下查看内存的使用情况

    windows上有各种软件可以进行“一键加速”之类的操作,释放掉一些内存(虽然我暂时不知道是怎么办到的,有待后续学习).而任务管理器也可以很方便地查看各进程使用的内存情况,如下图: 同样地,linux ...

  7. Android 中查看内存的使用情况集经常使用adb命令

    1. 在IDE中查看Log信息 当程序执行垃圾回收的时候,会打印一条Log信息.其格式例如以下: D/dalvikvm: <GC_Reason> <Amount_freed>, ...

  8. [linux]free命令详解-显示内存的使用情况

    本文部分转载于https://blog.csdn.net/sunansheng/article/details/51942522 free命令可以显示当前系统未使用的和已使用的内存数目,还可以显示被内 ...

  9. WPF的TextBox产生内存泄露的情况

    前段时间参与了一个WPF编写的项目,在该项目中有这样一个场景:在程序运行过程中需要动态地产生大量文本信息,并追加WPF界面上的一个TextBox的Text中进行显示.编写完之后,运行该项目的程序,发现 ...

随机推荐

  1. ios+openflow 问题

    环境:xcode5.1+ios7.1 需求:A试图 的scroll加入 B视图:[A addSubview:B.view] 问题: 1.B视图载入到A视图上了,但Openflow的图片未载入.后经调试 ...

  2. linux中sed的使用方法具体解释(对行数据的加入、删除等)

    sed使用语法 [root@fwq test]# sed --help 使用方法: sed [选项]... {脚本(假设没有其它脚本)} [输入文件]... -n, --quiet, --silent ...

  3. bzoj5105: [CodePlus2017]晨跑(LCM)

    5105: [CodePlus2017]晨跑 题目:传送门 题解: 没有很懂Code Puls 的操作...一道签到的三个数的LCM??? 代码: #include<cstdio> #in ...

  4. 英语影视台词---八、the shawshank redemption

    英语影视台词---八.the shawshank redemption 一.总结 一句话总结:肖申克的救赎 1.It's funny. On the outside, I was an honest ...

  5. JavaScript中Array方法总览

    title: JavaScript中Array方法总览 toc: true date: 2018-10-13 12:48:14 push(x) 将x添加到数组最后,可添加多个值,返回数组长度.改变原数 ...

  6. RBAC介绍

    基于角色的权限访问控制(Role-Based Access Control)作为传统访问控制(自主访问,强制访问)的有前景的代替受到广泛的关注.在RBAC中,权限与角色相关联,用户通过成为适当角色的成 ...

  7. POJ 1948 DP

    题意:给你n个木棍(n<=40)每个木棍长度<=40,问用上所有的木棍拼成的三角形的面积的最大值,并输出面积*100的值(不四舍五入) 如果没有解,输出-1. 思路: 背包判断可达性. f ...

  8. javax.validation参数校验

    在实体字段加注解: /** * 机构名称 */ @ApiParam(name = "orgName", value = "机构名称") @Size(max = ...

  9. vue 事件上加阻止冒泡 阻止默认事件

    重点 vue事件修饰符 <!-- 阻止单击事件冒泡 --> <a v-on:click.stop="doThis"></a> <!-- 提 ...

  10. POJ 3261 Milk Patterns(后缀数组+单调队列)

    题意 找出出现k次的可重叠的最长子串的长度 题解 用后缀数组. 然后求出heigth数组. 跑单调队列就行了.找出每k个数中最小的数的最大值.就是个滑动窗口啊 (不知道为什么有人写二分,其实写啥都差不 ...