2008-08-28 120 views
2

使用oracle 10g,通过perl DBI访问,我有一张表,每秒钟更新数千万行,同时从另一个进程中更频繁地读取数据。何时提交更改?

很快,更新频率将增加一个数量级(也许是两个)。 有人建议每提交一次N更新,而不是每次更新都会有助于提升性能。

我有几个问题:

  • 将是更快或更慢或这取决于(尽快规划基准既方式可以得到新的负载体面的仿真)
  • 为什么将它帮助/阻碍表现。
  • 如果“它取决于...”,关于什么?
  • 如果这有助于N的最佳价值?
  • 为什么我的本地DBA在我需要时有一个有用的直接答案?
    (其实我知道这个问题的答案之一):-)

编辑:

@codeslave:谢谢,BTW失去 未提交的更改是没有问题的,我 不要删除原始数据用于更新使用 直到我确信一切 是好的,顺便说一句清洁女工做 拔服务器,TWICE :-)

一些谷歌搜索显示,它可能会帮助 因为的问题有关回滚 段,但我仍然不知道一个 经验法则为N每几十? 数百?千?

@diciu:伟大的信息,我一定会 看看。

回答

3

提交会导致Oracle将内容写入磁盘 - 即在重做日志文件中,以便在发生电源故障等情况下,无论提交的事务做了什么都可以恢复。 在文件中写入比在内存中写入要慢,所以如果对一行中的许多操作执行而不是对一组合并更新执行,则提交速度会更慢。

在Oracle 10g中有一个异步提交,使得它更快但不太可靠:https://web.archive.org/web/1/http://articles.techrepublic%2ecom%2ecom/5100-10878_11-6158695.html

PS我肯定知道的是,在一个场景中我已经看到了一定的应用,改变凝聚的更新数量从5K到50K使其速度提高了一个数量级(快10倍)。

0

更快/更慢?

它可能会快一点。但是,在运行运行到死锁的风险更大,损失未提交的修改应该有灾难性发生(清洁女工拔服务器),FUD,消防,硫磺等

为什么它会帮助吗?

显然更少的提交操作,这反过来又意味着更少的磁盘写入等

DBA的和直接的答案?

如果它很容易,你不会需要一个。

1

降低提交的频率肯定会加快速度,但因为你是读取和写入到该表中经常有对锁的潜力。只有您可以确定同时更新相同数据的可能性。如果发生这种情况的可能性很低,则每隔50行提交一次并监测情况。试错恐怕:-)

0

如果你“不删除用于更新,直到原始数据[你]深信一切都很好”,那么你为什么不删除所有这些增量在提交之间和回滚如果有问题?这听起来像你有效地在交易之上建立了一个交易系统。

0

@CodeSlave您您的问题是由@stevechol回答,如果我删除所有增量承诺会有锁。我想如果没有更好的事情出现,我会按照他的建议选择一个随机数字,监控负载并相应地进行调整。应用@diciu twaks。

PS:事务之上的事务只是偶然的,我通过FTP获取用于更新的文件,而不是立即删除它们,我设置了一个cron作业以在一周后删除它们(如果没有人使用应用程序抱怨),这意味着如果出现问题,我有一个星期赶上错误。

1

以及减少提交频率,你也应该考虑进行批量更新,而不是个别的。

+0

你能详细说明为什么会有帮助吗? – Pat 2008-09-16 11:19:00