当多个进程插入同一个Oracle表时,读取每一行一次?

时间:2015-01-15 00:55:23

标签: database oracle concurrency locking

我有一张表,多个进程在一天中非常快速地插入数据。假设至少有一个进程在任何给定时刻执行插入。

我需要在白天读取此表,同时插入正在发生。我需要读取每一行,但我只需要读取每一行。

我的问题是:

  • 单个流程是否可以通过这种方式从表中读取而不影响插入性能?

  • 是否有多个进程同时从表中读取数据?

1 个答案:

答案 0 :(得分:3)

Oracle实现了多版本的读取一致性,因此读者不会阻止编写者(读者也不会阻止其他读者)。您可以在不影响插入性能的情况下,使用尽可能多的进程读取数据。

当然,实际上,您的硬件和应用程序可能会对此理论施加某种限制。例如,如果您的系统受CPU限制,并且您引入了如此多的读者,以牺牲作者为代价将大部分CPU提供给读者,那么您可能会遇到一些性能问题。如果您在插入行之后读取的行已经足够长,那么它们已经从缓冲区缓存(以及文件系统缓存(如果正在播放)中老化),读者将向系统添加I / O如果您的系统受I / O限制,可能会影响性能。