数据库视图的输出缓慢和提升的原因是什么,它需要 6 秒突然需要 1.5 秒?
What is reason of slowness and boost of output of a DB view which was taking 6 sec suddenly taking 1.5 sec?
我有一个具有以下条件的 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 天以来,returns 50 条记录花费了 6 秒,现在突然需要 1.5 秒来获取相同的记录(视图 sql 中未进行任何更改)。
检查了 oracle 历史,没有发现任何清除缓存命令或任何类型的锁。
您认为性能突然提高的概率是多少?
(这正在各种笔记本电脑上进行测试,我们发现所有笔记本电脑都有相同的行为(缓慢和突然的速度)。wildfly 连接池存在疑问;但其他表工作正常。
我完全不知道 oracle 是否完成了某些索引(在历史记录中未找到)或提供了资源等等。如果有人也可以从 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'));
也许您现在在 AWR 上存储了相同 SQL 的两个不同计划。
值得一试。但就像我说的,有很多选择。我要告诉您的是提高性能的最常见方法之一。
我有一个具有以下条件的 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 天以来,returns 50 条记录花费了 6 秒,现在突然需要 1.5 秒来获取相同的记录(视图 sql 中未进行任何更改)。
检查了 oracle 历史,没有发现任何清除缓存命令或任何类型的锁。
您认为性能突然提高的概率是多少?
(这正在各种笔记本电脑上进行测试,我们发现所有笔记本电脑都有相同的行为(缓慢和突然的速度)。wildfly 连接池存在疑问;但其他表工作正常。
我完全不知道 oracle 是否完成了某些索引(在历史记录中未找到)或提供了资源等等。如果有人也可以从 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'));
也许您现在在 AWR 上存储了相同 SQL 的两个不同计划。
值得一试。但就像我说的,有很多选择。我要告诉您的是提高性能的最常见方法之一。