1. Glossario/

SPM Baseline

SQL Plan Management Baseline

La SPM Baseline è la funzionalità di Oracle SQL Plan Management che permette di ancorare un piano di esecuzione specifico a una query, rendendolo l’unico piano accettabile per il Cost-Based Optimizer (CBO). Anche se il CBO scopre un piano alternativo con costo stimato inferiore, non lo userà finché non viene esplicitamente accettato come baseline.

Come funziona #

Ogni piano viene identificato da un SQL_HANDLE (legato al testo della query) e un PLAN_NAME (legato al piano specifico). Oracle mantiene una SQL Plan History: i piani nuovi entrano in history ma non diventano automaticamente baseline. Solo i piani marcati come ACCEPTED vengono usati a runtime.

-- Carica una baseline dal cursor cache per una query specifica
DECLARE
  l_plans PLS_INTEGER;
BEGIN
  l_plans := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE(
    sql_id => 'abc123xyz',
    plan_hash_value => 987654321
  );
END;
/

-- Verifica le baseline attive
SELECT sql_handle, plan_name, accepted, enabled, fixed
FROM   dba_sql_plan_baselines
WHERE  sql_text LIKE '%nome_tabella%';

Il flag FIXED = YES blocca ulteriormente il piano: il CBO non può nemmeno considerare alternative, indipendentemente da nuove statistiche o hint.

Quando si usa #

Lo scenario più comune è l’upgrade di database (es. da 11g R2 a 19c): i piani validati in staging vengono catturati e caricati come baseline prima del go-live in produzione, così il CBO del nuovo motore non può introdurre regressioni. È utile anche dopo un aggiornamento massivo di statistiche o una modifica strutturale (aggiunta di indice, partitioning) che potrebbe destabilizzare query critiche.

Il limite principale è la manutenzione: le baseline vanno riviste periodicamente. Un piano congelato su una tabella che cresce di un ordine di grandezza può diventare subottimale nel tempo.