引用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. 任务调度器quartz的使用

    1.quartz的获取. 可參照:Quartz任务调度模型实例 2.开发思路: 要使用定时器quartz.先弄清楚三个概念:调度器.任务.触发器.开发也是依照这三个方面来开发, 1>写一个Job ...

  2. ZOJ 3494 BCD Code (AC自己主动机 + 数位DP)

    题目链接:BCD Code 解析:n个病毒串.问给定区间上有多少个转换成BCD码后不包括病毒串的数. 很奇妙的题目. . 经典的 AC自己主动机 + 数位DP 的题目. 首先使用AC自己主动机,得到b ...

  3. Android之怎样改变焦点状态【EditText】

    以EditText为例 1.改变焦点状态 password.setOnFocusChangeListener(new OnFocusChangeListener() { @Override publi ...

  4. 黑马day14 过滤器概述&amp;生命周期&amp;运行过程

    过滤器:当訪问一个web资源的时候,过滤器就在你訪问这个web资源的前进行拦截...在放行过后...filter过滤器也能够做一些其它的事情. 编写过滤器的步骤: 1.写一个过滤器类实现filter接 ...

  5. Android Studio 修改注释模板中的${USER}变量以及修改默认的头部注释

    引言 通常我们创建类文件都会自动生成一段头部注释. 有时候这不是我们想要的效果. 它默认是Created By XXX. 而我们要的是@author XXX. 而且这里面的XXX是系统的的用户名,不一 ...

  6. m_Orchestrate learning system---五、学的越多,做的越快

    m_Orchestrate learning system---五.学的越多,做的越快 一.总结 一句话总结: 1.上传的图像文件用input('post.')方法取不到是为什么? 图片不来就这样取不 ...

  7. nyoj--124--中位数(水题)

    中位数 时间限制:3000 ms  |  内存限制:65535 KB 难度:2 描述 一组数据按从小到大的顺序依次排列,处在中间位置的一个数叫做中位数. 比如 1 5 10 11 9  其中位数就是9 ...

  8. [JZOJ 5910] [NOIP2018模拟10.18] DuLiu 解题报告 (并查集+思维)

    题目链接: https://jzoj.net/senior/#contest/show/2530/0 题目: LF是毒瘤出题人中AK IOI2019,不屑于参加NOI的唯一的人.他对人说话,总是满口垃 ...

  9. flex布局下img变形的问题

    flex-shrink  加上:flex-shrink:0:定义了缩小比例,默认为1,即如果空间不足,项目将会缩小所有项目为1时,空间不足,都会缩小,如果你不希望某个容器在任何时候都不被压缩,那设置f ...

  10. App.config:配置系统未能初始化的异常

    如上图所示:App.config文件是这样配置的,在后台代码”ISchedulerFactory scheduler = new StdSchedulerFactory();“中抛出了异常 经网上查资 ...