oracle db writer如何决定是否进行多块/顺序写入

时间:2010-03-09 12:27:15

标签: performance oracle

我们有一个与我们的生产系统相匹配的测试系统。 6个月前,我们对新硬件进行了一些测试,发现了系统的性能限制。

然而,现在我们正在重新进行测试以增加更多硬件,我们发现系统不像以前那样执行。

之所以这样,是因为在一个特定的卷上,我们现在正在进行随机I / O,这些I / O曾经是顺序的。进一步说,事实证明,oracle的这个卷上的活动是100%写入,实际上是8k块,之前是高达128k。

所以有些东西导致oracle db writer停止批处理它的写入。

我们已经广泛检查了我们的配置,并且看不出我们的测试和生产系统之间的任何差异。我们还与甲骨文开了一个电话,但在这个阶段,即将发布的信息很慢。

如此;最终这是两个相关的问题:

  1. 你能依靠oracle多块写入吗?为您的系统设计/调整是否安全?
  2. 为什么oracle会改变它的行为?
  3. 我们现阶段不一定会责怪甲骨文 - 它可能会对环境中的某些事情作出反应 - 但是又是什么?

    OS / arch是solaris / sparc。

    哦;我忘了提一下,插入表没有索引,只有几个外键 - 它被设计成一个尽可能快插入的桶。它也在关键字段上进行了划分。

    感谢您的任何提示!

1 个答案:

答案 0 :(得分:1)

对工作量的更多描述将允许一些假设。

如果要更新随机块,那么DBWR进程除了进行单块写入之外别无选择。特别是索引可能会遍布整个地方。如果你有一个字符值索引并且需要在没有空间的地方插入新的“M”记录,它将获得索引的新块并拆分当前块。你将在原始块中有一些'M'记录,而在新块中有一些(同时将是最后一个范围中的最后一个[used]块)。

我怀疑在批量插入表时,您最有可能获得多块写入,因为将分配和写入新块。可能,最初你有(比方说)1GB的范围分配并写入该空间。现在你可能已经达到了极限并且正在创建新的扩展区(比如50 Mb),它可能从分散的文件位置(例如已经丢弃的其他表)中获得。