ITPub博客

首页 > 数据库 > Oracle > 升级到19c遇到的问题(一):标量子查询嵌套导致的性能问题

升级到19c遇到的问题(一):标量子查询嵌套导致的性能问题

原创 Oracle 作者:kakaxi9521 时间:2023-04-23 16:44:46 0 删除 编辑

从Oracle11.2.0.4 升级到Oracle19.17.0.0 后有标量子查询的sql 执行变慢。

经过排查是标量子查询转换导致的执行计划改变所致。

影响执行计划改变的参数_optimizer_unnest_scalar_sq,可以通过/*+OPT_PARAM('_optimizer_unnest_scalar_sq' 'false')*/ 的hint 来修正,

或者在标量子查询的select 部分使用/*+no_unnest*/,都能解决问题。 如果有很多类似SQL, 建议在系统级关闭:

alter system set "_optimizer_unnest_scalar_sq"=false;   

此参数在11g版本中是不存在的, 可以进行关闭不会有影响。


实验:

建表:

create table test_o as select * from dba_objects;
create table test_u as select * from dba_users;


1. 无索引对比

查询sql:

SELECT
u.username,
(SELECT MAX(created) FROM test_o o WHERE o.owner = u.username) as max_created
FROM test_u u;

执行计划,执行时间0.21s


添加hint , 执行时间0.51s,确实比开启标量子查询时要慢。


2. 建立索引后对比

无hint执行时间0.18s


添加hint 执行时间0.14s, 添加索引后不开启标量子查询转换时会快。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/21374452/viewspace-2948135/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: ORA-14047 报错
请登录后发表评论 登录
全部评论

注册时间:2009-04-13

  • 博文量
    136
  • 访问量
    178889