Fixar, desabilitar ou remover um plano de SQL plan baseline
OracleDesempenhoComando
-- Show the plan content:
SELECT *
FROM TABLE(DBMS_XPLAN.DISPLAY_SQL_PLAN_BASELINE(
sql_handle => '<sql_handle>',
plan_name => '<plan_name>',
format => 'TYPICAL'));
SET SERVEROUTPUT ON
DECLARE
n PLS_INTEGER;
BEGIN
-- FIXED: this plan is preferred, new plans are not evolved automatically
n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => '<sql_handle>', plan_name => '<plan_name>',
attribute_name => 'fixed', attribute_value => 'YES');
-- Take the bad plan out of use (without dropping it):
n := DBMS_SPM.ALTER_SQL_PLAN_BASELINE(
sql_handle => '<sql_handle>', plan_name => '<bad_plan_name>',
attribute_name => 'enabled', attribute_value => 'NO');
END;
/
-- Drop one plan or the SQL's entire baseline:
DECLARE
n PLS_INTEGER;
BEGIN
n := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => '<sql_handle>', plan_name => '<plan_name>');
-- without plan_name, all plans of the SQL are dropped:
-- n := DBMS_SPM.DROP_SQL_PLAN_BASELINE(sql_handle => '<sql_handle>');
DBMS_OUTPUT.PUT_LINE(n || ' plan(s) dropped');
END;
/O que faz
Gerencia os atributos dos planos do baseline: um plano FIXED tem preferência sobre os demais planos aceitos e interrompe a evolução automática de novos planos; ENABLED=NO desabilita um plano sem apagá-lo; DROP o remove definitivamente.
Quando usar
Para fixar firmemente um plano de um SQL crítico, desabilitar um plano ruim aceito por engano ou limpar baselines que não são mais necessários.
Atenção
Exige Enterprise Edition. Planos FIXED podem se degradar com o crescimento dos dados e impedir o otimizador de usar um plano melhor; revise-os periodicamente. Um SQL cujos planos estão todos ENABLED=NO é otimizado livremente. DROP é irreversível; faça antes backup em uma staging table com DBMS_SPM.PACK_STGTAB_BASELINE.
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