Oracle
数据倾斜导致的问题
-
有绑定变量
参考整理---<<
恩墨年货
-SQL
与性能优化
>>
场景二:
在上一节实验可以知道,没有
绑定变量
时,数据倾斜问题在特定场景下可以用直方图解决,那么在有绑定变量情况下,数据倾斜问题单凭直方图可以解决吗?
显然是不能的,
Oracle
绑定变量
技术解决了SQL
语句硬解析过多的问题,降低了资源的争用。但是绑定变量在引入
cursor sharing
,增加了软解析的同时,
由于SQL
文本相同,经常生成相同的执行计划,在数据分布不均匀,数据倾斜严重时,有时会出现性能问题。
在oracle 9i
版本,引入了
绑定变量窥探Bind Peeking
技术,在首次硬解析时,会去探测绑定变量的真实值,从而生成更准确的执行计划,但是从第二次软解析开始,一直会沿用之前的执行计划,而一个执行计划并不会适用所有的绑定值,在过滤列数据分布严重倾斜时,可能会生成低效的执行计划。
为了弥补绑定变量窥探Bind Peeking
技术的缺陷,
11g
引入了
自适应游标共享技术(Adaptive Cursor Sharing)
,通过自适应游标共享,可以仅针对使用绑定变量的语句智能地共享游标。
一:绑定变量窥探Bind Peeking
对执行计划的影响
一:绑定变量窥探Bind Peeking
对执行计划的影响
1
查看
Bind Peeking
和
Adaptive Cursor Sharing
参数
select
name
,
value
from
(
select
nam.ksppinm
name
,
val.KSPPSTVL
value
,
--nam.ksppdesc description,
val.ksppstdf isdefault
from
sys.x$ksppi nam
,
sys.x$ksppcv val
where
nam.inst_id
=
val.inst_id
and
nam.indx
=
val.indx
)
where
name
in
(
'_optimizer_adaptive_cursor_sharing'
,
'_optimizer_extended_cursor_sharing_rel'
,
'_optimizer_extended_cursor_sharing'
,
'_optim_peek_user_binds'
);
2
创建测试数据
SQL> select banner_full from v$version;
BANNER_FULL
--------------------------------------------------------------------------------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - P