1

我们需要在一天中的预定时间运行报告。该应用程序运行 24*7,因此没有“非高峰”时间。

因此,运行报告不应在系统上增加过多的负载。

该应用程序在 WebSphere v6.1 上运行,数据库是 Oracle 10g R2。

我可以使用以下方法

  1. 一组旨在报告的非规范化表格。
  2. 创建物化视图并将其用于报告。我们可以每天更新一次视图。
  3. 我们可以使用 Oracle 的 Data Guard 创建另一个模式并实时复制表。

(1) 由于我们有某些内部限制,这是不可行的。

从性能的角度来看,我需要知道 (2) 还是 (3) 哪个更好?

我从许多人那里听说物化视图最初运行良好,但随着数据量的增加,性能非常差。

任何人都有在同一数据库服务器中复制表的经验(但不同的实例或模式)。

4

2 回答 2

4

在某种程度上,物化视图是非规范化的表——非规范化是您可以在 SELECT 语句中定义的任何内容,例如连接、聚合和分析函数。在 MV 的原始定义之后,您可以将获得所需性能所需的任何索引添加到基础 MV 表中。

话虽如此,我认为您的选择是:

  1. 在同一数据库中使用由您编写的代码以某种方式维护的非规范化表- 此选项将使您能够最大程度地控制加载过程,而无需编写和维护代码。您还将消除单独实例的基础架构开销。非规范化过程和报告查询将增加活动/事务数据库的资源需求,您必须调整规模以处理此问题。使用此选项,您还可以将报告应用程序的可用性与事务系统的可用性联系起来。
  2. 在同一个数据库中使用 MV - 以上关于基础设施和资源开销的评论适用,但是您可以利用 Oracle 的 MV 功能进行调度(通过 DBMS_JOB 实现)和事务读取一致性(“旧”数据在新数据之前仍然可见) SELECT 已解决并提交)。
  3. 在同一主机上的另一个数据库/实例中使用 MV - 使用此选项可以获得一些边际分离和潜在可用性,但您仍然会影响数据库主机的整体资源。Oracle 的较新版本让您可以将实例内的资源使用控制到细粒度的级别,因此在我看来,没有充分的理由在同一主机上运行单独的数据库。
  4. 在不同主机上的另一个数据库中使用 MV - 您可以设置到事务系统的数据库链接并跨链接执行 MV 刷新。您仍将拥有影响源系统上资源的 MV 刷新/“加载”过程,但所有查询活动都将被隔离,并且您将在源系统停机期间获得一定程度的报告可用性。您必须使用此选项购买额外的 Oracle 许可证。
  5. 使用 Data Guard 实例- 缺点:额外的许可证,增加了设置和管理的复杂性。优点:对源系统的影响最小,系统的真实副本,如果您使用逻辑而不是物理复制,您可以在 Data Guard 数据库中创建额外的结构(视图、索引等)。
于 2009-07-15T12:15:32.633 回答
1

最好的选择是在另一台机器上使用另一个Data Guard实例(不是模式,它没有意义)。在这种情况下,您可以拥有一个最新的数据库,而不会干扰生产应用程序。

如果刷新不会产生大量资源使用,关于使用物化视图是好的。如果对物化视图的查询也不会浪费太多资源。

您未提及的第三个选项是使用Oracle 资源管理器,它允许您以多种可能性控制资源使用情况。

无论如何,我更喜欢第一个(Data Guard),因为您同时拥有“报告数据库”和“实时备份”。

于 2009-07-15T10:52:20.907 回答