WEB开发网
开发学院数据库Oracle Oracle 10G数据库自动内存管理分析 阅读

Oracle 10G数据库自动内存管理分析

 2007-05-12 12:27:06 来源:WEB开发网   
核心提示: 第二天早上,OLTP 作业恢复在线,Oracle 10G数据库自动内存管理分析(3),这个循环又完全重复!解决这种恶性循环的一种替代方法是永久设置每个池的最大需求,不过,接下来,执行语句:alter system set sga_target = 500M scope=both;这种方法不

第二天早上,OLTP 作业恢复在线,这个循环又完全重复!解决这种恶性循环的一种替代方法是永久设置每个池的最大需求。不过,这么做的话,您分配的总的 SGA 可能超出可用的内存 — 从而在为每个池分配的内存数不足时,将增加交换和分页的风险。人工重新分配的方法(虽然不实际)目前看起来很不错。

另一种替代方法是将值设为可接受的最小值。不过,当需求增长且内存不能完全满足时,性能将受到影响。

注意在所有这些示例中,分配给 SGA 的总内存保持不变,而池之间的内存分配根据即时的需求进行修改。如果 RDBMS 将自动探测来自用户的需求并相应地重新分布内存分配,那不是很好吗?

Oracle 数据库 10g 中的自动共享内存管理特性正好能够实现这一目的。您可以决定 SGA 的总大小,然后设置一个名称为 SGA_TARGET 的参数,这个参数决定 SGA 的总大小。SGA 内部的各个池将根据工作负载动态地进行配置。实现自动内存分配仅仅需要 SGA_TARGET 参数的一个非零值。

设置自动共享内存管理

让我们看看该特性是如何工作的。首先,确定 SGA 的总大小。您可以通过确定现在分配了多少内存来估计这个值。

  SQL> select sum(value)/1024/1024 from v$sga;
  
  SUM(VALUE)/1024/1024
  --------------------
  500

此时 SGA 的当前总大小近似为 500MB,并且这个值将变为 SGA_TARGET 的值。接下来,执行语句:

  alter system set sga_target = 500M scope=both;

这种方法不需要为各个池设置不同值;因而,您将需要在参数文件中使它们的值为零或全部删除它们。

  shared_pool_size = 0
  large_pool_size = 0
  java_pool_size = 0
  db_cache_size = 0

上一页  1 2 3 4 5  下一页

Tags:Oracle 数据库 自动

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接