Oracle9i的增强型内存使用率查看表
2007-05-12 12:25:46 来源:WEB开发网当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%'
);
至少有95%的任务应该有最佳workarea运行情况。在以上的输出中,你可以看到所有的workarea运行情况,它们能运行在最佳、单周期和多周期模式下。
这个列表提供了和pga_aggregate_target区域大小相关的重要信息。它还能指示出内存区域的过量分配。如果最佳workarea运行的百分比持续保持在98到100%,你就可以从pga_aggregate_target里心安理得地“盗取”内存帧,并把它们分配到Oracle SGA(例如db_cache_size)的其他区域里,那里可能更需要内存资源。
查看各个workareas
Oracle还提供了数据字典查看表,它能显示SQL声明的运行计划里各个步骤所使用的内存大小。其价值对正确设置hash_area_size和其他内存密集参数的内存大小是不可估量的。
v$sql_workarea_active查看表显示了Oracle9i数据库里各个workarea的内存使用数量。
而且,Oracle提供了多个用来合并表格的方法,每个都需要不同数量的内存。Oracle9i SQL优化器能够分辨分类归并联合、嵌套循环合并、、散裂合并和星型合并方法。在有些情况下,散裂合并比分类归并联合运行得更快,但是散裂合并需要更多的内存资源和对hash_area_size参数更高级的设置。
以下是对v$sql_workarea_active查询表的查询:
Select
to_number(decode(SID, 65535, NULL, SID)) sid,
operation_type OPERATION,
trunc(WORK_AREA_SIZE/1024) WSIZE,
trunc(EXPECTED_SIZE/1024) ESIZE,
trunc(ACTUAL_MEM_USED/1024) MEM,
trunc(MAX_MEM_USED/1024) "MAX MEM",
number_passes PASS
from
v$sql_workarea_active
order by 1,2;
可以看到SQL运行每一步的内存使用数量。一个SQL声明执行Group By排序需要73 KB内存。你还可以看到运行散裂合并的两个SQL声明的系统ID(SID)。这些散裂合并分别使用了3到13 MB内存来建立内存中的散裂表。
一个非常重要的工具
Oracle正在成为最灵活、最复杂的数据库管理系统之一。数据库组件的内存使用查看表是管理你Oracle数据库非常重要的工具。有了它,Oracle专家能够更加容易地保证内存使用率的所有设置对所有应用程序都是最优的。
更多精彩
赞助商链接