Status von Bind Peeking und Adaptive Cursor Sharing prüfen
OraclePerformanceBefehl
-- 1) Child cursors: bind-sensitive / bind-aware / shareable?
SELECT sql_id, child_number, executions, plan_hash_value,
is_bind_sensitive, is_bind_aware, is_shareable,
ROUND(buffer_gets/NULLIF(executions,0)) AS gets_per_exec
FROM v$sql
WHERE sql_id = '<sql_id>'
ORDER BY child_number;
-- 2) ACS histogram and selectivity ranges:
SELECT child_number, bucket_id, count
FROM v$sql_cs_histogram
WHERE sql_id = '<sql_id>'
ORDER BY child_number, bucket_id;
SELECT child_number, predicate, range_id, low, high
FROM v$sql_cs_selectivity
WHERE sql_id = '<sql_id>';
-- 3) Peeked / captured bind values:
SELECT child_number, name, position, datatype_string, value_string,
TO_CHAR(last_captured,'YYYY-MM-DD HH24:MI:SS') AS captured
FROM v$sql_bind_capture
WHERE sql_id = '<sql_id>'
ORDER BY child_number, position;
SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('<sql_id>', NULL, 'TYPICAL +PEEKED_BINDS'));
-- 4) Why was a new child created?
SELECT child_number, bind_mismatch, bind_equiv_failure,
optimizer_mismatch, load_optimizer_stats
FROM v$sql_shared_cursor
WHERE sql_id = '<sql_id>';Was es tut
Der Optimizer wählt beim ersten Hard Parse einen Plan, indem er auf den Bind-Wert schaut (Peeking). Adaptive Cursor Sharing kann bei Spalten mit Histogrammen je Bind-Wert unterschiedliche Child Cursors/Pläne erzeugen; diese Abfragen zeigen, ob der Cursor bind-sensitive/-aware ist, welcher Wert gepeekt wurde und warum Children entstanden sind.
Wann einsetzen
Bei Beschwerden wie "dieselbe SQL ist mal schnell, mal langsam", bei schiefer Datenverteilung und wenn die Zahl der Child Cursors explodiert (hoher Version Count).
Vorsicht
Keine Lizenz erforderlich; nur lesend. V$SQL_BIND_CAPTURE wird stichprobenartig erfasst (standardmäßig etwa alle 15 Minuten) und enthält nur WHERE-/HAVING-Binds; es ist nicht der Wert jeder Ausführung. ACS macht einen Cursor erst nach einigen schlechten Ausführungen bind-aware. Für kritische SQL ist das Laden mehrerer Pläne in eine SQL Plan Baseline deterministischer als sich auf ACS zu verlassen.
Verwandte Einträge
- AWR-Snapshot erstellen und AWR-Report zwischen zwei Snapshots erzeugen
- AWR-Diff-Report (Compare Period) zwischen zwei Zeiträumen
- Top Wait Events und Top-SQL der letzten Minuten aus ASH
- ADDM-Analyse ausführen und Report abrufen
- SQL-Monitor-Report abrufen (laufende oder abgeschlossene lange SQL)
- 10046-Trace für eine Session aktivieren/deaktivieren und mit TKPROF zusammenfassen