暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

原创 silence 2023-04-23
635

从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, 添加索引后不开启标量子查询转换时会快。


最后修改时间:2023-04-23 16:44:36
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论