1

我必须同时将数据加载到表中并对其运行查询。由于数据性质,我可以用完整性换取性能。我怎样才能最大限度地减少交易的开销?

不幸的是,不能使用 MySQL 之类的替代方案(由于非技术原因)。

4

5 回答 5

1

您希望事务隔离读取未提交。我不推荐它,但这就是你要求的:)

这将允许您破坏事务隔离并读取未提交的插入数据。

请阅读这篇 Ask Tom 文章:http ://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html 。

更新:我实际上弄错了,Oracle 并不真正支持读取未提交的隔离级别,他们只是提到它:)。

于 2008-11-03T21:06:13.257 回答
1

也许我遗漏了一些东西,但是由于在 Oracle 中,读者不会阻止作者,而作者不会阻止读者,那么您要解决的问题到底是什么?

从正在读取数据的会话的角度来看,正在执行插入的会话并没有真正增加任何开销(更新可能会增加一些开销,因为读者必须查看 UNDO 表空间中的数据才能重建一个数据的读取一致性视图)。从插入数据的会话的角度来看,正在读取的会话并没有真正增加任何开销。当然,您的系统作为一个整体可能存在瓶颈,导致各种会话争用资源(即,如果您的插入使用了 100% 的可用 I/O 带宽,这将减慢必须执行的查询物理 I/O),但那不是

于 2008-11-03T21:14:59.353 回答
1

除了适用于所有数据库的一般优化实践(例如消除全表扫描、删除未使用或低效的索引等)之外,您还可以做一些事情。

  1. No Archive Log模式下运行。这牺牲了速度的可恢复性。
  2. 对于插入使用/*+ APPEND */提示。这会将数据放入不会创建 UNDO 的高水位线上方的表中。缺点是没有使用现有的可用空间。
  3. 在硬件方面,RAID 0大量较小的磁盘将为您提供最佳的插入性能,但根据您的使用情况RAID 10,其更好的读取性能可能会提供更好的适合性。

这就是说,我认为您不会从任何这些更改中获得太多收益。

于 2008-11-04T15:16:00.217 回答
1

您如何尝试禁用表中的所有约束,然后插入所有数据,然后再次启用它们?

即改变会话集约束=延迟;

但是,如果您在表创建期间没有将表中的约束设置为可延迟,则可能会出现一个小问题。

于 2011-06-29T15:23:33.030 回答
0

你在看什么样的性能量?刀片是成批的还是许多小的?

在尝试思考获得良好性能的巧妙方法之前,您是否创建了任何简单的原型,可以让您更好地了解开箱即用的性能?很容易证明你不需要做任何特别的事情来实现目标。

于 2008-11-12T18:07:20.167 回答