ORA-03232老库的老问题

今天接到客户的一个问题,应用报错:ORA-03232

从报错上看,是属于表空间3的,进一步查select TS#,NAME from v$tablespace; 3号表空间为temp。
然后进一步看ORA-03232的报错信息,查对应版本的error message:

从信息上看,又是处于temp表空间又是有hash_multiblock啥的,应该是在做hash join的时候,申请使用temp表空间,而temp表空间用完再进一步扩展的时候,单次IO的请求量超过了表空间next的属性的值。

而这个单次IO的请求量是有HASH_MULTIBLOCK_IO_COUNT决定的,我们继续来看这个值的意义。
我们继续看reference:

我们看看HASH_MULTIBLOCK_IO_COUNT的值和temp的next ext是多少:

我们看到,temp的next extend为131072,而HASH_MULTIBLOCK_IO_COUNT的值为0,根据reference的说法,当HASH_MULTIBLOCK_IO_COUNT的值为0时,在每次查询时,单次连续的IO请求块数由oracle自动计算生成。

为了让每次连续的IO请求(即HASH_MULTIBLOCK_IO_COUNT)小于temp的extend值,即小于131072,而不是又oracle来自动计算,我们将HASH_MULTIBLOCK_IO_COUNT设置为最小的1。

修改该参数后,应用恢复正常。

相关文章

一条评论

  1. 该参数个人不建议设置为1,我这里没有8i的环境,无法测试,但是以目前我对hash join的理解,应该是会影响的,
    而且影响程度不小,建议设置为next extend/DB_BLOCK_SIZE的数字看看

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据