正 文

Oracle9i的增强型内存使用率查看表


www.7dspace.com  更新日期:2005-11-6 3:33:28  七度空间


各个进程所要使用的内存大小

在Oracle9i里查看内存使用的真实值就是查看各个进程的内存使用率。Oracle9i现在有一个共享的内存区域,叫做pga_aggregate_target。在使用Oracle的多线程服务器时, pga_aggregate_target参数的工作方法和Oracle的大内存池相类似,只有一个显著的不同点。有了一个共享内存区域,Oracle的各个进程,在进行排序和散裂合并时,就可以不受限制地使用多达内存池总量5%的内存。这相对于Oracle8i来说是个重大的改进,它原来要求每个PGA区域的大小必须限制在sort_area_size初始化参数所设定的值里。

Oracle9i还提供了一个叫做v$pgastat的新字典查看表。v$pgastat查看表能显示数据库内每个内存区域内的内存使用率的总量。这些信息可以告诉你内存使用率的峰值,还能允许你根据对系统的相对压力来调整内存需求。以下是一个简单的对v$pgastat的查询:

column name format a40
column value format 999,999,999
select name,value
from
v$pgastat
order by
value desc;

Listing B包含了这个脚本的输出结果。

从这个列表里你可以看到pga_aggregate_target的值以及这个实例所使用的所有内存区域的峰值。现在我们再来看看最佳、单周期和多周期的内存运行情况。

当Oracle的进程需要进行操作时,例如排序或者散裂合并,它就到pga_aggregate_target区域里的共享内存区里,尝试取得足够多的相互毗邻的内存帧来执行操作。如果这个进程能够立即取得这些内存帧,它就被标记为最优内存访问。如果需要在单周期内通过pga_aggregate_target取得所需的内存,那么内存分配就被标记为单周期。如果所有的内存都在使用中,那么Oracle也许就不得不通过pga_aggregate_target在多周期内取得内存,这叫做多周期。

记住:内存的速度是非常非常快的,绝大多数排序或者散裂合并都是在几微秒内完成的。Oracle允许单个进程最多使用pga_aggregate_target 5%的内存,并行操作最多可以被允许消耗PGA内存池30%的内存。

多周期运行显示了内存的不足,所以你总应该分配足够的内存以保证至少有95%连接上了的任务能够最佳地获得内存。

你可以查询这里列出的v$sysstat查看表来取得workarea运行的信息:

col c1 heading 'Workarea|Profile' format a35
col c2 heading 'Count' format 999,999,999
col c3 heading 'Percentage' format 99
select name c1,cnt c2,decode(total, 0, 0, round(cnt*100/total)) c3
from
(
select name,value cnt,(sum(value) over ()) total
from
v$sysstat
where
name like 'workarea exec%'
);

Listing C是输出结果。

至少有95%的任务应该有最佳workarea运行情况。在以上的输出中,你可以看到所有的workarea运行情况,它们能运行在最佳、单周期和多周期模式下。

这个列表提供了和pga_aggregate_target区域大小相关的重要信息。它还能指示出内存区域的过量分配。如果最佳workarea运行的百分比持续保持在98到100%,你就可以从pga_aggregate_target里心安理得地“盗取”内存帧,并把它们分配到Oracle SGA(例如db_cache_size)的其他区域里,那里可能更需要内存资源。

4页,页码:[1] [2] [3] [4] 

上一篇:用Oracle用户自定义合计函数来提高代码重用性
下一篇:初学AI渐变网格心得—叶片制作
作者:  来源:开发者在线 ( 责任编辑:7dspace )
收藏此页】【打印】【关闭
站 内 搜 索
 

热 点 导 读
特 别 推 荐