暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 从实体化视图的基表中删除一行后提交需要很长时间才能完成

askTom 2017-09-15
240

问题描述

嗨,汤姆,

我们的架构中有以下表格。

版本 (版本bojid编号,
itemobjid编号,
版本详细信息varchar2(100));

视图 (viewobjid编号,
viewdetail varchar2(100));

VERSIONINVIEW(versionobjid编号,-引用版本。versionobjid
viewobjid编号); -参考视图。viewobjid

我们有一个使用这些表的ODBC应用程序。

版本和VERSIONINVIEW表都有数百万条记录。所以,这两个表之间的任何连接操作都是非常昂贵的。在这两个表之间连接的简单选择需要几秒钟 (通常为2-12) 才能完成 (由于它们的行数)。因此,我们创建了以下实体化视图,以提高应用程序性能并使查询更快。

在使用rowid的版本上创建物化视图日志;
使用rowid在VERSIONINVIEW上创建物化视图日志;

创建物化视图版本 _ 大众构建提交时快速刷新为
选择v.rowid为v_rowid,viv.rowid为viv_rowid,v.versionobjid,hv.itemobjid,viv.viewobjid从版本v,VERSIONINVIEW viv其中v.versionobjid = viv.versionobjid;

这帮助我们非常有效地运行所有SELECT查询。
但问题是 ....

每当我们从版本表中删除一行并通过ODBC应用程序提交事务时,提交实际上就会挂起。它确实完成了,但是需要很多时间。知道此设置出了什么问题吗?

我们已经通过了其他线程,并且已经尝试了以下操作。但是,他们没有帮助。选择非常快,但是在DML之后提交需要相当长的时间。
1.将 _ mv_refresh_use_stats设置为FALSE
2.在架构上收集统计信息
3.锁定MV日志的统计信息

注意: 如果我们删除实体化视图,则删除不会在任何时间内发生,但是当然会击中SELECT性能。

请帮忙。
提前谢谢。

~ 马利克。

专家解答

最好的调查方式是跟踪

-dbms_monitor.session_trace_enable (等待 =>true,绑定 =>true);
-从版本中删除...
-提交;
-dbms_monitor.session_trace_disable;

然后看一下tkprof格式的跟踪文件-它将揭示发生速度下降的地方。

您 * 是否 * 在表上定义了主键?或者给我们每个对象的 * full * DDL,我们将尝试在此处重新创建。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论