Базы данных Oracle - статьи



              

Пополнение основной линии планов путем оценки планов


По результату выполненых действий в основной линии планов для нашего запроса оказалось два плана: с учетом индекса (признак 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




Содержание  Назад  Вперед