【发布时间】:2016-05-18 02:31:50
【问题描述】:
我有物化视图(它使用连接、WITH、分区;查询返回大约 4200 万 行),上面有 2 个简单索引。仅使用完全刷新。
第一次刷新工作正常(大约需要 100 分钟),但第二次刷新工作几天后未能完成。
我还删除了索引并重新运行测试。它工作正常。 以下是所有结果(会话统计中的时间和重做条目):
1) 没有索引,首先运行 时间:72分钟 redo: 4200万(接近行号)
2) 没有索引,第二次运行 时间:106分钟 重做:8400 万(4200 万删除全部,4200 万插入新)
3) 有 2 个索引,第一次运行 时间:99分钟 重做:1.26 亿(行 4200 万,每个索引 4200 万)
4) 有 2 个索引,第二次运行 时间:48小时后失败 重做:4.53 亿失败时(我不知道为什么这么大)
Oracle 版本:11g Enterprise Edition Release 11.2.0.3.0
该问题在不同的实例和服务器上重现。我没有可以正常工作的服务器。我认为这是某种错误,但找不到类似的东西
【问题讨论】:
-
有问题吗? (更重要的是,如果有问题,鉴于您提供的有关您使用的表、索引和查询的信息缺乏,我们有什么办法可以回答吗?)
-
我无法复制 SQL 查询,但它本身执行了大约 30 分钟。所以我们需要 30 分钟来选择数据,大约需要 40-60 分钟来插入它。问题是“为什么重建索引比 bulding 慢 50 倍,并且需要异常巨大的重做大小?”索引是一个简单的 varchar2 列。
-
@Vladislav 感谢您的提示,即在没有索引的情况下刷新速度要快得多,而查询这些物化视图仍然比单独运行复杂查询要快得多!
标签: oracle performance indexing materialized-views