引用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. Android在程序中浏览网页

    本文是自己学习所做笔记,欢迎转载.但请注明出处:http://blog.csdn.net/jesson20121020 有时须要在程序中浏览一些网页.当然了能够通过调用系统的浏览器来打开浏览.可是大多 ...

  2. CSS文本简单设置

    文本的设置直接影响到用户对界面的感受,好的文本设置能够让用户对界面有一种赏心悦目的感受,在这地方我们来简单的说说说对文本设置的时候,有哪些格式. 文本设置的时候我们应该注意什么: 平时我们文本设置的时 ...

  3. 通过setInterval函数在地图上每隔1s打一次点

    <?php echo <<<_END <!doctype html> <html> <head> <meta charset=&quo ...

  4. sc.textFile("file:///home/spark/data.txt") Input path does not exist解决方法——submit 加参数 --master local 即可解决

    use this val data = sc.textFile("/home/spark/data.txt") this should work and set master as ...

  5. DNS Tunnel判定方法

    DNS Tunnel判定方法: 1.查询DNS请求的域名是否存在备案: 2.查询DNS请求的域名情报信息(以及域名的alex排名): 3.查看相同主域名下子域名编码格式及长度:(存在Base32和Ba ...

  6. TYVJ1415 差分约束

    思路: i–>i+1连一条边权为0的边 i–>i-1连一条边权为-1的边 start-1 ->end 连一条边权为w的边 求0->n的最长路即可 //By SiriusRen ...

  7. 《鸟哥的Linux私房菜》笔记——01. 计算机概论

    计算机的五大部分:输入单元.输出单元.CPU(控制单元(Control Unit).算数逻辑单元(ALU)).内存. CPU 的架构 精简指令集(Reduced Instruction Set Com ...

  8. hdu 1051 - 贪心,水题

    题目链接 一堆小木棍,每个有两个属性值(l,w),对小木棍分组,每一组内的小木棍存在这样一个序列满足s1<=s2<=s3.....<=sn,[s1<=s2当且仅当s1.l< ...

  9. HDU 1548 A strange lift【BFS】

    题意:给出一个电梯,给出它的层数f,给出起点s,终点g,以及在每一层能够上或者下w[i]层,问至少需要按多少次按钮到达终点. 和POJ catch that cow一样,直接用了那一题的代码,发现一直 ...

  10. jq 鼠标点击跳转页面后 改变点击菜单的样式代码

    点击菜单跳转页面,然而跳转后的页面字体并没有加粗用如下代码 <div class="bg01 menu"> <img class="img01" ...