科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道自动调整 Oracle9i Database :Oracle SGA

自动调整 Oracle9i Database :Oracle SGA

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

  随着数据库管理员在自调整工作方面变得更加成熟,许多 Oracle 规格可能变为自调整。在 Oracle Database 10 g 中,我们将看到比以前更多的自调整功能。      例如。

作者:中国IT实验室 来源:中国IT实验室 2007年10月7日

关键字: ORACLE

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共2页)


  为 pga_aggregate_target 开发特征码
  Oracle 数据库中的 PGA 区域非常重要,因为它控制排序操作以及 SQL 散列联接的速度。在以下的某一种情况出现时,您可能希望动态更改 pga_aggregate_target 参数:
  
  只要 v$sysstat 统计量 "estimated PGA memory for one-pass” 的值超过 pga_aggregate_target , 您就希望增加 pga_aggregate_target 。
  
  只要 v$sysstat 统计量 “workarea executions ? multipass” 的值大于百分之一,数据库就可能得益于额外增加的 RAM 内存。
  
  有可能出现过量分配 PGA 内存的情况,而只要 v$sysstat 行 “workarea executions?optimal” 的值持续显示百分之百时,您可能会考虑减少 pga_aggregate_target 的值。
  
  v$pgastat 视图提供对 PGA 使用情况以及自动内存管理程序的实例级汇总统计信息。为快速获得概要信息,有个简单的查询提供了关于所有 Oracle Database 10 g 连接的总体 PGA 使用情况的极佳统计信息:
  
  check_pga.sql
  
  
  -- *************************************************************
  
  -- Display detailed PGA statistics
  
  --
  
  -- *************************************************************
  
  column name format a30
  
  column value format 999,999,999
  
  select
  
  name,
  
  value
  
  from
  
  v$pgastat
  
  ;
  
  该查询的输出可能类似于以下信息:
  
  NAME VALUE
  ------------------------------------------------------ ----------
  aggregate PGA auto target 736,052,224
  
  global memory bound 21,200
  
  total expected memory 141,144
  
  total PGA inuse 22,234,736
  
  total PGA allocated 55,327,872
  
  maximum PGA allocated 23,970,624
  
  total PGA used for auto workareas 262,144
  
  maximum PGA used for auto workareas 7,333,032
  
  total PGA used for manual workareas 0
  
  maximum PGA used for manual workareas 0
  
  estimated PGA memory for optimal 141,395
  
  maximum PGA memory for optimal 500,123,520
  
  estimated PGA memory for one-pass 534,144
  
  maximum PGA memory for one-pass 52,123,520
  
  在上面来自于 v$pgastat 的显示内容中,我们看到以下重要的统计信息:
  
  Total PGA used for auto workareas ― 该统计量监视所有以自动内存模式运行的连接的 RAM 使用情况。记住, Oracle 没有允许所有内部进程使用自动内存特性。例如, Java 和 PL/SQL 将会分配 RAM 内存,而这将不会计算在总的 PGA 统计量中。因此,您应该从分配的总 PGA 中减去该值,以便了解由连接所使用的内存量和由 Java 和 PL/SQL 所使用的 RAM 内存量。
  Estimated PGA memory for optimal/one-pass ― 该统计量估计出以最优化模式执行所有任务连接 RAM 请求时需要多少内存。记住,当 Oracle Database 10 g 遇到内存短缺情况时, DBA 将调用多步操作,试图找到最近释放的 RAM 内存。在 Oracle Database 10 g 中,该统计量对于监视 RAM 使用情况非常重要,大部分 Oracle DBA 会将 pga_aggregate_target 增加到此值。
  在 Oracle Database 10 g 中可以使用称为新顾问实用程序的 v$pga_target_advice 。该实用程序显示从当前值的 10% 到 200% 的不同大小的 pga_aggregate_target 的最优化、一步和多步 PGA 执行的临界差别。
  
  列表显示使用这一新的实用程序的示例查询,以下是输出的示例。在这里我们看到,已经为当前的处理超量分配了 pga_aggregate_target ,可以安全地从这一区域提取 RAM 并将它分配到其他地方:
  
  Estimated Estimated
  
  Target(M) Cache Hit % Over-Alloc.
  ---------- ----------- -----------
  113     73       0
  
  225     81       0
  
  450     92       0
  
  675     100       0
  
  900     100       0
  
  1080     100       0
  
  1260     100       0 <= current size
  
  1440     100       0
  
  1620     100       0
  
  1800     100       0
  
  2700     100       0
  
  3600     100       0
  
  5400     100       0
  
  7200     100       0
  
  可以看到,您能够方便地创建自动方法来检测 PGA 内存短缺情况(使用 Statspack )并编写作业来动态更改 pga_aggregate_target ,以确保为排序和散列联接进行最优化的 RAM 使用。
  
  为数据缓冲区开发特征码
  DBA 将会注意到,在实际情况中,数据缓冲区命中率 (DBHR) 的变化会随着测量间隔的频率增加而增加。例如, Statspack 可能在以小时为单位的间隔时报告 DBHR 为百分之九十二,但在采样率以两分钟为间隔时,将显示很大的变化,如图3所示。
  
 

  
图3

  
  作为一般性原则,应该调整主机上的所有可用内存,并且应该为 db_cache_size 分配达到增益递减点的 RAM 资源。(参见图4)。在该点处增加缓冲区块不会显著提高缓冲区命中率。
  
 

  
图4

  
  新的 v$db_cache_advice 视图 类似于 Oracle7 中推出的一个用于跟踪缓冲区命中情况的旧实用程序 x$kcbrbh ;同样, x$kcbcbh 视图用于跟踪缓冲区遗漏情况。数据缓冲区命中率可以提供与 v$db_cache_advice 所提供内容相类似的数据,因此多数 Oracle 调整的专业人员可以使用这两种工具来监视其数据缓冲区的有效性。
  
  当 v$db_cache_advice 实用程序已经启用,并且数据库已经运行了足够长的时间来提供有代表性的结果时,可以使用 列表 5 中的脚本来执行高速缓存建议功能。使用这一脚本,您可以获得对您所有缓冲区池的高速缓存建议,包括 2k、4k、8k、16k 和 32k 数据缓冲区。
  
  该脚本的输出如下所示。注意,数值的范围从 db_cache_size 当前大小的百分之十直到当前大小的两倍。
  
  Estd Phys   Estd Phys
  Cache Size (MB)   Buffers  Read Factor     Reads
  
  ---------------- ------------ ----------- ------------
  30     3,802    18.70  192,317,943 <- 10% size
  
  60     7,604    12.83  31,949,536
  
  91     11,406    7.38   75,865,861
  
  121     15,208    4.97   51,111,658
  
  152     19,010    3.64   37,460,786
  
  182     22,812    2.50   25,668,196
  
  212     26,614    1.74   17,850,847
  
  243     30,416    1.33   13,720,149
  
  273     34,218    1.13   11,583,180
  
  304     38,020    1.00   10,282,475 Current Size
  
  334     41,822    .93    9,515,878
  
  364     45,624    .87    8,909,026
  
  395     49,426    .83    8,495,039
  
  424     53,228    .79    8,116,496
  
  456     57,030    .76    7,824,764
  
  486     60,832    .74    7,563,180
  
  517     64,634    .71    7,311,729
  
  547     68,436    .69    7,104,280
  
  577     72,238    .67    6,895,122
  
  608     76,040    .66    6,739,731 <- 2x size
  
  如图4中所标注,数据缓冲区最优化设置的位置就是附加缓冲区的临界效益开始减少的位置。当然,该优化点将在一段时间后改变,这就是为什么我们需要预先重新配置 SGA 的原因,以便于我们能够根据当前的处理需要来更改数据缓冲区的大小。
  
  对于趋势分析,DBHR 中的变化并不重要,可以沿两个方向生成平均数据缓冲区命中率:一周中每天的平均 DBHR 和一天中每小时的平均 DBHR。
  
  记住,在数据缓冲区中变化快速地发生,有时长期的分析将会提供线索,指出数据库中的处理故障问题。几乎每个 Oracle 数据库都提供链接到常规处理计划的模式,称为特征码。
  
  以下显示一个 Statspack DBHR 每小时平均值脚本的输出。报告基于六个月的数据收集,显示每天的平均命中率。如果在电子表格中绘制该数据,则该数据库的 DBHR 特征码变得显而易见。
  
  hr BHR -- ----- 00 .94 01 .96 02 .91 03 .82 04 .80 05 .90 06 .94 07 .93 08 .96 09 .95 10 .84 12 .91 13 .96 14 .95 17 .97 18 .97 19 .95 20 .95 21 .99 22 .93 23 .94
  
  该数据的绘图如图5所示,我们看到一些有趣的重复趋势。
  
 查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章