Slide 16
Slide 16 text
再度、全表スキャン期待のSQL実行->BIND_AWARE=Yとなり、新規全表スキャンのカーソル作成
3. 再度、dept_id := 50で実行すると動作が変わります。新規カーソルが追加され実行計画が効率的な全表スキャンに変わりま
す。バインド依存カーソルを含む文を実行する場合、オプティマイザは、内部アルゴリズムを使用して、カーソルをバインド対応として
マークするかどうかを判断します。これは、カーソルが生成するデータ・アクセス・パターンが、バインド値によって大幅に異なるかどうかに
よって判断されます。最初のカーソルはSHARABLE=N、新しく生成されたカーソルはBIND_AWARE=Y, SHARABLE=Yとなり、バインド
対応の動作となります。 SHARABLE=Nのカーソルは使われずエージアウト対象となります。
バインド対応によって実行されたカーソルの選択率を保持しており、既存の選択率にある程度(±10%ほど)幅を効かせた選択率
に新規バインド変数での選択率が入るかを参照し、新規カーソル作成の要否の判断に使います
Adaptive Cursor Sharing(ACS):適応カーソル共有の動作
Copyright © 2025, Oracle and/or its affiliates
16
SELECT SQL_TEXT, CHILD_NUMBER AS CHILD#, EXECUTIONS AS EXEC, BUFFER_GETS AS BUFF_GETS,
IS_BIND_SENSITIVE AS BIND_SENS, IS_BIND_AWARE AS BIND_AWARE, IS_SHAREABLE AS SHARABLE FROM V$SQL WHERE
SQL_TEXT LIKE '%mployee%' AND SQL_TEXT NOT LIKE '%SQL_TEXT%';
SQL_TEXT CHILD# EXEC BUFF_GETS BIND_SENS BIND_AWARE SHARABLE
---------------------- ------ ----- ---------- --------- ---------- --------
SELECT COUNT(*), MAX(e 0 2 2359 Y N N
mployee_id) FROM hr.em
ployees WHERE departme
nt_id = :dept_id
SELECT COUNT(*), MAX(e. 1 1 800 Y Y Y
mployee_id) FROM hr.em
ployees WHERE departme
nt_id = :dept_id
select CHILD_NUMBER,PREDICATE,RANGE_ID,LOW,HIGH from v$sql_cs_selectivity where sql_id = '6pssvz434zspy';
CHILD_NUMBER PREDICATE. RANGE_ID LOW HIGH
------------ --------------- ---------- ---------- ----------
1 =DEPT_ID 0 0.899452 1.099330