Performance Oracle 11g物化视图挂起

Performance Oracle 11g物化视图挂起,performance,oracle,view,freeze,materialized,Performance,Oracle,View,Freeze,Materialized,我正在尝试使用预构建视图在Oracle中创建物化视图 create materialized view bfb_rpt_sch01.mvw_base_sales as select * from bfb_rpt_sch01.vw_base_sales; 此命令将不会执行并挂起。我想这可能与视图编写不正确有关。因此,我对视图执行了以下查询 select count(*) from bfb_rpt_sch01.vw_base_sales 此查询执行大约需要6分钟,返回270万。这告诉

我正在尝试使用预构建视图在Oracle中创建物化视图

  create materialized view bfb_rpt_sch01.mvw_base_sales
  as select * from bfb_rpt_sch01.vw_base_sales;
此命令将不会执行并挂起。我想这可能与视图编写不正确有关。因此,我对视图执行了以下查询

  select count(*) from bfb_rpt_sch01.vw_base_sales

此查询执行大约需要6分钟,返回270万。这告诉我视图不是问题所在,但我可能错了。

我设法解决了我的问题。我的(创建物化视图AS)使用的解释与我的(创建表AS)不同。如果我的代码包含以下代码行,它将作为(createtableas)完全正常运行,但在使用(creatematerializedview as)失败之前,它将继续挂起48小时以上

我用下面的代码修改了代码,现在可以正常工作了

WHERE NOT EXISTS (SELECT NULL FROM B WHERE a.column_name = b.column_name) --works

我不知道为什么会这样,也许是虫子?我对ORACLE的了解还不够,无法打电话。

定义“挂起”。您确定
CREATE
语句所花费的时间并不是您希望完全实现结果所花费的时间吗?复制数据、生成
UNDO
REDO
等操作可能不会很快。在很多情况下,
COUNT(*)
是很容易优化的,因为Oracle只需对主键进行索引扫描,而且Oracle不必执行应用于投影的计算函数之类的操作。目前,我们的计数时间为35分钟。是否有其他方法可以验证它是否正在生成物化视图?此外,该视图实际上是6个子查询,它们被合并在一起。我不相信在计算行数时使用了索引,但我可能错了。创建此视图的最初原因是,我可以针对MVW创建索引,以帮助加快查询速度。您看到数据库上的会话计时了吗?等待是什么样子的?它主要是I/O绑定的吗?270万行以MB/GB表示多少数据?如果
从view\u name
中选择*并将所有270万行提取到本地计算机,需要多长时间?
CREATE
语句与
SELECT
语句的查询计划是什么?这是你将定期进行全面更新的内容吗?或者您是否会逐渐刷新(在这种情况下,更长的初始加载时间可能是完全可以接受的)?因此我感觉我的解释计划在视图中只使用了一个子查询,但我还是在下面发布了一些统计信息。我不太确定在这里看什么。会话逻辑读取250777一致获取224273不工作-一致读取获取223965物理读取222506一致获取直接222273物理读取直接222273 db块获取26504 db块获取直接26082物理读取IO请求13982物理读取IO请求总数13982读取IO数发出13965有效IO时间13082444物理写入IO请求816物理写入总IO请求816Also,整个导出文件为252725KB。这花了大约13分钟完成。explain计划显示,对于几乎所有的连接,它通常使用完整表扫描。我不确定这对您来说是否足够,如果我遗漏了什么,请告诉我。在mview创建过程中,查询优化器的一部分被关闭(不知道为什么,但您可以在Oracle支持站点中找到相关信息)。同样的技巧曾经帮助过我,确保在
notin(select…
中选择的列被标记为
notnull
有时也有帮助。
WHERE NOT EXISTS (SELECT NULL FROM B WHERE a.column_name = b.column_name) --works