По результату выполненых действий в основной линии планов для нашего запроса оказалось два плана: с учетом индекса (признак ACCEPTED = 'NO') и без учета (признак ACCEPTED = 'YES'):
SQL> CONNECT / AS SYSDBA SQL> @baseline :sqlhandle
PLAN_NAME SQL_TEXT ENABLED ACCEPTED ------------------------------ --------------- ---------- ---------- SYS_SQL_PLAN_38c100c08916fd8c SELECT job FROM YES NO
emp WHERE enam e = 'MILLER'
SYS_SQL_PLAN_38c100c0d8a279cc SELECT job FROM YES YES
emp WHERE enam e = 'MILLER'
Можно выдать оптимизатору задание проверить с планы признаками ACCEPTED = 'NO' (то есть учтеные в SMB, но не причисленые к приемлемым) на эффективность и включить их в основную линию (пометить как «приемлемые»), если они окажутся не хуже ранее там имевшихся:
BEGIN SELECT DISTINCT sql_handle INTO :sqlhandle FROM dba_sql_plan_baselines WHERE DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE ( :sqltext ) = signature; END; / EXECUTE :report := - DBMS_SPM.EVOLVE_SQL_PLAN_BASELINE ( sql_handle => :sqlhandle )
Первую проверку изменений в SMB выполним по признаку ACCEPTED в справочной таблице:
SQL> @baseline :sqlhandle
PLAN_NAME SQL_TEXT ENABLED ACCEPTED ------------------------------ --------------- ---------- ---------- SYS_SQL_PLAN_38c100c08916fd8c SELECT job FROM YES YES
emp WHERE enam e = 'MILLER'
SYS_SQL_PLAN_38c100c0d8a279cc SELECT job FROM YES YES emp WHERE enam e = 'MILLER'
Вторую проверку выполним по содержимому переменной REPORT, составленному функцией EVOLVE_SQL_PLAN_BASELINE:
SQL> SET LONG 10000 SQL> SELECT :report "Baseline evolution results:" FROM dual;
Baseline evolution results: --------------------------------------------------------------------- --------------------------------------------------------------------- Evolve SQL Plan Baseline Report ---------------------------------------------------------------------
Inputs: ------- SQL_HANDLE = SYS_SQL_dd7adbcd38c100c0
PLAN_NAME = TIME_LIMIT = DBMS_SPM.AUTO_LIMIT VERIFY = YES COMMIT = YES