Verificar o status de bind peeking e de adaptive cursor sharing
OracleDesempenhoComando
-- 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>';O que faz
O otimizador escolhe um plano espiando o valor de bind no primeiro hard parse. O adaptive cursor sharing pode criar child cursors/planos diferentes por valor de bind em colunas com histogramas; estas consultas mostram se o cursor é bind-sensitive/aware, qual valor foi espiado e por que os filhos foram criados.
Quando usar
Para reclamações de "o mesmo SQL às vezes é rápido, às vezes lento", com distribuição de dados assimétrica e quando a contagem de child cursors explode (high version count).
Atenção
Não exige licença; somente leitura. V$SQL_BIND_CAPTURE é amostrado (cerca de a cada 15 minutos por padrão) e guarda apenas binds de WHERE/HAVING; não é o valor de toda execução. O ACS torna um cursor bind-aware só depois de algumas execuções ruins. Para SQL críticos, carregar vários planos em um SQL plan baseline é mais determinístico do que depender do ACS.
Relacionados
- Tirar um snapshot do AWR e gerar um relatório AWR entre dois snapshots
- Relatório AWR diff (compare period) entre dois períodos
- Principais wait events e principais SQL do ASH nos últimos minutos
- Executar uma análise ADDM e obter seu relatório
- Obter um relatório do SQL Monitor (SQL longo em execução ou concluído)
- Habilitar/desabilitar o trace 10046 de uma sessão e resumir com TKPROF