Oracle 将工作区大小策略设置为手动与自动

Oracle 将工作区大小策略设置为手动与自动,oracle,oracle10g,Oracle,Oracle10g,我正在开发一个数据仓库系统,该系统大约在一年前升级到Oracle 10g(现在是10.2.0.5) 数据库设置为workarea\u size\u policy=auto和pga\u aggregate\u target=1G。大多数ETL过程都是用PL/SQL编写的,该代码通常设置workarea\u size\u policy=manual,并在构建仓库的特定部分时为特定会话设置SORT\u AREA\u size和HASH\u AREA\u size 为SORT\u AREA\u SIZE

我正在开发一个数据仓库系统,该系统大约在一年前升级到Oracle 10g(现在是10.2.0.5)

数据库设置为
workarea\u size\u policy=auto
pga\u aggregate\u target=1G
。大多数ETL过程都是用PL/SQL编写的,该代码通常设置
workarea\u size\u policy=manual
,并在构建仓库的特定部分时为特定会话设置
SORT\u AREA\u size
HASH\u AREA\u size

SORT\u AREA\u SIZE
HASH\u AREA\u SIZE
选择的值对于构建的不同部分是不同的。这些大小可能基于将在每个区域处理的预期数据量

我遇到的问题是,这段代码开始导致大量ORA-600错误发生。这让我怀疑我们是否应该完全覆盖自动设置

设置手动设置的代码是多年前由一位不在这里的开发人员编写的。它可能最初是为Oracle 8编写的,并对Oracle 9进行了修改,将工作区大小策略设置为手动。没有人真正知道散列面积大小和排序面积大小的值是如何找到的。据我所知,它们可能完全不合适

在冗长的序言之后,我有几个问题

  • 我如何知道何时(如果有)应该使用workarea\u size\u policy=manual覆盖手动设置
  • 如何为哈希\面积\大小、排序\面积\大小等找到合适的值
  • 我如何对特定设置实际提供的任何好处进行基准测试

  • 我知道这是一个相当广泛的问题,但希望您能提供帮助。

    我建议您注释掉手动设置,并仅使用自动(动态)设置进行测试运行,如
    PGA\u AGGREGATE\u TARGET
    。 自Oracle 8以来,排序和散列内存区域的管理有了很大改进

    很难预先确定您的过程的内存需求,因此最好是使用具有代表性的数据量对它们进行测试,看看它是如何运行的。
    然后,您可以创建一个报告,涵盖执行过程的时间框架。报告中有一个名为“PGA内存咨询”的部分。这将告诉您是否需要根据当前数据量为
    PGA\u AGGREGATE\u TARGET
    分配更多内存

    见:

    在这种情况下,您可以清楚地看到,不需要超过当前分配的103MB,实际上可以保持在52MB,而不会影响应用程序


    根据我们讨论的卷,如果无法分配更多内存,某些排序或哈希操作可能会溢出到
    临时表空间中,因此请确保您有一个大小适当的表空间,并可能分布在尽可能多的磁盘/卷上(另请参阅配置)。

    @kamai感谢您的回答。我在想我永远也不会得到一个!我想我知道手动设置现在在很大程度上被禁止了(特别是因为我们从Oracle支持部门得到了建议),但是很难改变大量的生产代码。基本上,尝试量化此功能的任何好处(除了更少的ORA-00600错误)将查看PGA内存顾问。@MikeyByCrikey不客气。如果答案是有用的,请你把它标记为有用的好吗?很抱歉耽搁了这么长时间。最后将答案标记为正确(仅在回答两个月后)。我想我知道我不应该再使用
    HASH\u AREA\u SIZE
    SORT\u AREA\u SIZE
    了,但是很难用任何真正的理由来改变现有的代码。