Comprobar el estado de bind peeking y adaptive cursor sharing
OracleRendimientoComando
-- 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>';Qué hace
El optimizador elige un plan inspeccionando el valor bind en el primer hard parse. Adaptive cursor sharing puede crear distintos child cursors/planes por valor bind en columnas con histogramas; estas consultas muestran si el cursor es bind-sensitive/aware, qué valor se inspeccionó y por qué se crearon los children.
Cuándo usarlo
Para quejas del tipo "el mismo SQL a veces es rápido y a veces lento", con distribución de datos sesgada, y cuando el número de child cursors se dispara (high version count).
Precaución
No requiere licencia; solo lectura. V$SQL_BIND_CAPTURE es muestreado (aprox. cada 15 minutos por defecto) y solo contiene binds de WHERE/HAVING; no es el valor de cada ejecución. ACS hace que un cursor sea bind-aware solo tras unas cuantas ejecuciones malas. Para SQL críticos, cargar varios planes en un SQL plan baseline es más determinista que depender de ACS.
Relacionado
- Tomar un snapshot de AWR y generar un informe AWR entre dos snapshots
- Informe AWR diff (compare period) entre dos periodos
- Top wait events y top SQL desde ASH para los últimos minutos
- Ejecutar un análisis ADDM y obtener su informe
- Obtener un informe de SQL Monitor (SQL largo en ejecución o finalizado)
- Habilitar/deshabilitar el trace 10046 para una sesión y resumirlo con TKPROF