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

Read each row once while multiple processes insert into the same Oracle table?

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

我需要在白天阅读这个 table,而插入内容正在进行中。我需要阅读每一行,但我只需要阅读每一行一次。

我的问题是:

Oracle 实现了多版本读取一致性,因此读取器不会阻止写入器(读取器也不会阻止其他读取器)。您可以让任意数量的进程读取数据,而不会影响插入性能。

当然,在现实中,您的硬件和应用程序可能会对这一理论施加某种限制。例如,如果您的系统是 CPU 绑定的,并且您介绍了如此多的读者,以至于 CPU 的很大一部分是以牺牲作者为代价提供给读者的,您可能会遇到一些性能问题。如果您在插入行后读取行的时间足够长,以至于它们已经从缓冲区缓存(以及文件系统缓存,如果正在运行)中老化,则读取器将向系统添加 I/O ,这可能会影响性能如果您的系统受 I/O 约束。