Carregar um bom plano do cursor cache como SQL plan baseline
OracleDesempenhoComando
-- 1) Compare the SQL's plans and their performance:
SELECT sql_id, child_number, plan_hash_value, executions,
ROUND(elapsed_time/1e3/NULLIF(executions,0),1) AS ms_per_exec,
sql_plan_baseline
FROM v$sql
WHERE sql_id = '<sql_id>';
-- 2) Load the chosen plan as a baseline:
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
sql_id => '<sql_id>',
plan_hash_value => <plan_hash_value>,
fixed => 'NO',
enabled => 'YES');
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) loaded');
END;
/
-- 3) Verify the baseline:
SELECT sql_handle, plan_name, origin, enabled, accepted, fixed, reproduced,
TO_CHAR(last_executed,'YYYY-MM-DD HH24:MI') AS last_exec
FROM dba_sql_plan_baselines
WHERE signature = (SELECT exact_matching_signature FROM v$sql
WHERE sql_id = '<sql_id>' AND ROWNUM = 1);
-- On subsequent executions v$sql.sql_plan_baseline should be populated.O que faz
Usa o SQL Plan Management para tornar o plano escolhido um baseline ACCEPTED; o otimizador passa a usar apenas planos aceitos do baseline e guarda os planos recém-encontrados até que sejam evoluídos.
Quando usar
Para voltar a um plano reconhecidamente bom durante uma regressão de plano e para proteger planos de SQL críticos antes de um upgrade ou de uma mudança de estatísticas.
Atenção
Sem licença extra no Enterprise Edition (no SE2 é limitado a um plano de baseline por SQL). Exige ADMINISTER SQL MANAGEMENT OBJECT. Um baseline se aplica exatamente ao mesmo texto SQL (assinatura); não ajuda SQL que usa literais. Se um índice usado pelo plano for removido, o plano não pode ser reproduzido (REPRODUCED=NO) e o otimizador volta à escolha baseada em custo. OPTIMIZER_USE_SQL_PLAN_BASELINES deve ser TRUE (padrão).
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