我有以下情况的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 Server中的20或30个Java集成使用此视图来获取员工的数据。
从创建的最后7天开始,它花了6秒钟返回了50条记录,而现在突然花费1.5来获取相同的记录(在视图sql中未进行任何更改)。
检查了oracle历史记录,并且未找到任何“清除缓存命令”或任何类型的锁。
您认为性能突然提高的概率是多少?
(这已经在各种笔记本电脑上进行了测试,我们在所有速度(慢速和突然的速度)下都发现了相同的行为。对于Wildfly连接池存有疑问;但是其他表工作正常。
如果完成一些索引(在历史记录中找不到)或提供了资源,我根本不了解oracle。如果有人也可以从甲骨文的角度提供帮助)
我用来检查历史记录的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位生产
这就像在干草堆中寻找针头一样。这里有很多选项,但是如果您问我,我将尝试查看您数据库中的自动收集统计信息过程上次执行的时间。
该视图中涉及的表可能具有新的统计信息,并且CBO现在具有更好的执行计划,也许更好的基数估计导致了新计划。
使用AWR检查过去7天的视图执行计划
SELECT * FROM table(DBMS_XPLAN.DISPLAY_AWR('your_sql_id'));
也许您现在为同一SQL获得了两个存储在AWR中的不同计划。
值得一试。但是就像我说的那样,有很多选择。我告诉您的是提高性能的最常见的方法之一。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句