0

将 Oracle 数据库从 10g 升级到 19c 后,我遇到了性能问题,即在使用 update/insert 语句时在大型数据库上查询双表和视图。在Oracle 数据库10g 中比较视图的性能时,我不得不等待一个多小时。

--use Views
update table1
set break_show ='Y'
where developer in (select developer_dis from view1 where rn1 <=10 or rn2 <=10);

--use Table
update table1
set break_show ='Y'
where developer in (select developer_dis from table2 where rn1 <=10 or rn2 <=10);

我不得不设置 EXECUTE IMMEDIATE 'alter session set optimizer_features_enable="10.2.0.4"';,这被糟糕的性能解决了。

我应该怎么做才能找出双表和视图运行缓慢的真正原因。

任何帮助,将不胜感激。

4

1 回答 1

2

我没有看到对双表的任何参考?

但是随着任何重大升级,优化器都会经历很多变化。对于大多数查询,这应该会产生相同或更好的性能,但总会有回归的风险。您可以使用

select * from dbms_xplan.display_cursor('[sqlid]')

为每个查询(从 V$SQL 获取 SQL_ID)查看不同的计划,然后从那里决定行动方案。您现在使用 19c 将拥有的好处之一是 SQL 计划管理,因此您可以强制优化器继续使用您的 10g 计划,同时仍会随着时间的推移捕获可能更好的计划。

于 2021-03-31T01:50:57.523 回答