物化视图日志的事务性能影响

时间:2013-07-30 15:56:48

标签: oracle logging materialized-views

我一直在研究使用物化视图进行数据汇总和报告,主要集中在交易(使用Oracle数据库)的公司。当前的报告系统依赖于一系列视图,这些视图模糊了应用程序的许多复杂数据逻辑。这些视图在调用系统时会给系统带来沉重的负担。

我们感兴趣的是使用“快速刷新”进行增量更新,以便在用于报告之前执行一些复杂的查询逻辑;但是,组织内部存在一个问题,即物化视图日志(这是快速刷新所需)会对我们当前在数据库中的事务性能产生影响。这种表现对我们的组织非常重要,因此非常担心会有任何变化。

以下是我们需要实现的物化视图日志类型的示例:

create materialized view log on transaction
  with rowid, sequence(transaction_id,account_id,order_id,currency_id,price,transaction_date,payment_processor_id)
  including new values;

我们不会在创建视图时使用“on commit”子句进行更新,而是使用“on demand”子句,因为我们知道这会对性能产生影响。

实现此类日志会影响数据库事务性能吗?我想它必须略微影响性能,因为在提交中包含了一个额外的写入过程(对日志),但我在Oracle文档中找不到对此的任何引用。关于这个主题的任何文献或建议将不胜感激。

感谢您的帮助!

1 个答案:

答案 0 :(得分:8)

是的,会有影响。物化日志需要同步维护,因此事务需要在物化视图日志中为基表中修改的每一行插入一个新行。影响有多大程度上取决于系统。如果您的系统受I / O限制并且您已对其进行了优化,以便将更改物理地写入基表是等待时间的很大一部分,那么影响将远大于系统受CPU限制且大部分时间等待时间用于读取数据或执行计算。

如果您真的关心OLTP系统的性能,那么将报告卸载到不同服务器上的其他数据库是有意义的。您可以使用Streams(或GoldGate,如果您能够负担额外的许可)将数据复制到报告服务器,这对源的影响小于物化视图,因为重做信息可以异步读取(并且可以在报告服务器而不是将该工作负载放在生产服务器上。然后,您可以在报告服务器上定义物化视图,它们不会对OLTP服务器产生任何影响。或者,您可以创建逻辑备用数据库作为报告服务器,并在那里创建物化视图。无论哪种方式,将报告工作负载从生产服务器移出并异步读取重做数据都将保护生产服务器的性能。