一个db视图的输出缓慢和增强的原因是什么?这个视图用了6秒,突然用了1.5秒?

cyej8jka  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(266)

我有以下条件的oracle视图:

CREATE OR REPLACE FORCE EDITIONABLE VIEW .....
.
.
select *  from 
(select t1.*,(select t.enddate from (select enddate,empid,
  ROW_NUMBER() OVER (PARTITION BY empid ORDER BY enddate desc) as seqnum
  from employee t2
  where t2.empid=t1.empid) t
   where seqnum=1)  As enddate_1 from (select * from
(select WED.*,ROW_NUMBER() OVER (PARTITION BY empid ORDER BY startdate desc) as seqnum from 
(select t1.*,COUNT(*) OVER (PARTITION BY empid) WDECOUNT from employee t1) WED
where WDECOUNT=1 or WED.startdate <= sysdate)) t1 WHERE seqnum=1);

这个视图被wildfly服务器中的20或30个java集成用来获取雇员的数据。
从创建的最后7天开始,返回50条记录需要6秒,而现在获取相同记录需要1.5秒(视图sql中没有任何更改)。
检查了oracle历史记录,没有发现任何清除缓存命令或任何类型的锁。
你认为业绩突然提高的可能性有多大?
(这是在各种笔记本电脑上进行的测试,我们发现所有这些电脑都有相同的行为(缓慢和突然的速度)。wildfly连接池存在疑问;但是其他的table都很好用。
我完全不知道oracle是否做了一些索引(历史上找不到)或者提供了资源等等。如果有人能从甲骨文的Angular 提供帮助)
我用于检查历史记录的oracle查询:

SELECT v.FIRST_LOAD_TIME, CPU_TIME, ELAPSED_TIME, PARSING_SCHEMA_NAME, MODULE, V.* FROM V$SQL V 
where PARSING_SCHEMA_NAME = 'MAHTERJEEDATA' order by v.FIRST_LOAD_TIME desc;

oracle database 12c版本12.1.0.1.0-64位生产

vom3gejh

vom3gejh1#

这就像大海捞针。这里有很多选项,但是如果您问我,我会尝试查看上次数据库中的自动收集统计信息过程是何时执行的。
可能,视图中涉及的表有了新的统计信息,而且cbo现在有了更好的执行计划,可能更好的基数估计导致了新的计划。
使用awr检查过去7天视图的执行计划

SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR('your_sql_id'));

现在,对于同一个sql,您可能会在awr上存储两个不同的计划。
值得一试。但就像我说的,有很多选择。我要告诉你的是提高性能最常见的方法之一。

相关问题