从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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
文章被以下合辑收录
评论
相关阅读
SQL解析失败跟踪案例分享(Oracle19c)
Rune_DB
296次阅读
2025-03-19 20:30:59
Oracle 统计信息锁定解决办法
JiekeXu
228次阅读
2025-03-11 14:26:05
ORA-01555错误深度解析:从长事务到Undo优化的全面解决方案
伟鹏
225次阅读
2025-03-20 16:18:51
oracle定时任务常用攻略
virvle
119次阅读
2025-03-25 16:05:19
oracle 19c RAC增加控制文件镜像副本
敖子🍖
41次阅读
2025-03-04 12:27:10
oracle 补丁包
凉冰
25次阅读
2025-03-19 15:20:17
oracle 19c max_string_size参数
dm5250
22次阅读
2025-03-18 15:15:39
记一次oracle 19c RAC集群重启单节点DB启动异常(二)
Digital Observer
21次阅读
2025-03-12 09:36:28
升级到oracle 19.8后vm_concat函数不可用怎么解决
Digital Observer
20次阅读
2025-03-17 09:41:51