我必须同时将数据加载到表中并对其运行查询。由于数据性质,我可以用完整性换取性能。我怎样才能最大限度地减少交易的开销?
不幸的是,不能使用 MySQL 之类的替代方案(由于非技术原因)。
我必须同时将数据加载到表中并对其运行查询。由于数据性质,我可以用完整性换取性能。我怎样才能最大限度地减少交易的开销?
不幸的是,不能使用 MySQL 之类的替代方案(由于非技术原因)。
您希望事务隔离读取未提交。我不推荐它,但这就是你要求的:)
这将允许您破坏事务隔离并读取未提交的插入数据。
请阅读这篇 Ask Tom 文章:http ://www.oracle.com/technology/oramag/oracle/05-nov/o65asktom.html 。
更新:我实际上弄错了,Oracle 并不真正支持读取未提交的隔离级别,他们只是提到它:)。
也许我遗漏了一些东西,但是由于在 Oracle 中,读者不会阻止作者,而作者不会阻止读者,那么您要解决的问题到底是什么?
从正在读取数据的会话的角度来看,正在执行插入的会话并没有真正增加任何开销(更新可能会增加一些开销,因为读者必须查看 UNDO 表空间中的数据才能重建一个数据的读取一致性视图)。从插入数据的会话的角度来看,正在读取的会话并没有真正增加任何开销。当然,您的系统作为一个整体可能存在瓶颈,导致各种会话争用资源(即,如果您的插入使用了 100% 的可用 I/O 带宽,这将减慢必须执行的查询物理 I/O),但那不是
除了适用于所有数据库的一般优化实践(例如消除全表扫描、删除未使用或低效的索引等)之外,您还可以做一些事情。
No Archive Log
模式下运行。这牺牲了速度的可恢复性。/*+ APPEND */
提示。这会将数据放入不会创建 UNDO 的高水位线上方的表中。缺点是没有使用现有的可用空间。RAID 0
大量较小的磁盘将为您提供最佳的插入性能,但根据您的使用情况RAID 10
,其更好的读取性能可能会提供更好的适合性。这就是说,我认为您不会从任何这些更改中获得太多收益。
您如何尝试禁用表中的所有约束,然后插入所有数据,然后再次启用它们?
即改变会话集约束=延迟;
但是,如果您在表创建期间没有将表中的约束设置为可延迟,则可能会出现一个小问题。
你在看什么样的性能量?刀片是成批的还是许多小的?
在尝试思考获得良好性能的巧妙方法之前,您是否创建了任何简单的原型,可以让您更好地了解开箱即用的性能?很容易证明你不需要做任何特别的事情来实现目标。