何时提交更改?

Pat*_*Pat 5 sql oracle commit

使用通过Perl DBI访问的Oracle 10g,我有一个表,该表具有每秒更新几千万行的行,每秒更新几次,同时从另一个进程中更频繁地读取该行。

不久,更新频率将增加一个数量级(可能是两个)。有人建议,每执行N次更新,而不是每次更新,都将有助于提高性能。

我有几个问题:

  • 是更快还是更慢还是取决于(计划尽快进行基准测试,以便对新负载进行合理的模拟)
  • 为什么它会帮助/阻碍性能。
  • 如果“取决于...”,那又是什么?
  • 如果有帮助,N的最佳值是多少?
  • 为什么当我需要本地DBA时,我不能提供一个有用的直接答案?
    (实际上我知道答案):-)

编辑:

@codeslave:谢谢,顺便说一句,丢失未提交的更改不是问题,在确定一切正常之前,我不会删除用于更新的原始数据,顺便说一句,清洁女工确实拔下了服务器的电源,TWICE :-)

一些谷歌搜索显示它可能由于与回滚段相关的问题而有所帮助,但是我仍然不知道每隔几十个N的经验法则吗?几百个?一千?

@diciu:很好的信息,我一定会调查一下。

dic*_*ciu 4

提交导致 Oracle 将内容写入磁盘 - 即写入重做日志文件,以便在发生电源故障等情况下可以恢复所提交的事务所做的任何操作。写入文件比写入内存慢,因此如果对连续的许多操作而不是对一组合并的更新执行提交,提交将会更慢。

在 Oracle 10g 中,有一个异步提交,它的速度更快,但可靠性较低:https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6158695.html

PS 我确信,在我在某个应用程序中看到的场景中,将合并更新的数量从 5K 更改为 50K 会使速度快一个数量级(快 10 倍)。