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

         

Загрузка плана в базу управления запросами


Вот случай, достойный памяти и занесения в литературу!

Плиний Младший, Панегирик императору Траяну

Сейчас для интересующего нас запроса СУБД завела рабочую память в общей области курсоров в shared pool. Загрузим оттуда план (первый по счету) в основную линию в базе управления запросами SMB, сославшись на идентификатор курсора SQL ID:

CONNECT / AS SYSDBA EXECUTE :sqltext := q'[SELECT job FROM emp WHERE ename = 'MILLER']' EXECUTE – SELECT sql_id INTO :sqlid FROM v$sqlarea WHERE sql_text = :sqltext EXECUTE :retcode := DBMS_SPM.LOAD_PLANS_FROM_CURSOR_CACHE ( :sqlid )

Проверка:

SQL> SELECT :retcode "Plans selected:" FROM dual;

Plans selected: --------------- 1

Для простоты последующих обращений к таблице DBA_SQL_PLAN_BASELINES за сведениями о SMB запомним в файле еще один рабочий запрос. Он параметризован ключом прикладного запроса, который узнаем по тексту запроса и поместим в переменную SQLHANDLE:

COLUMN sql_text FORMAT A15 WRAP COLUMN enabled FORMAT A10 COLUMN accepted FORMAT A10 SELECT plan_name, sql_text, enabled, accepted FROM dba_sql_plan_baselines WHERE sql_handle = &1 . SAVE baseline REPLACE SET VERIFY OFF

BEGIN SELECT DISTINCT sql_handle INTO :sqlhandle

FROM dba_sql_plan_baselines WHERE DBMS_SQLTUNE.SQLTEXT_TO_SIGNATURE ( :sqltext ) = signature; END; /

Проверка:

SQL> PRINT sqlhandle

SQLHANDLE -------------------------------- SYS_SQL_dd7adbcd38c100c0

SQL> @baseline :sqlhandle

PLAN_NAME SQL_TEXT ENABLED ACCEPTED ------------------------------ --------------- ---------- ---------- SYS_SQL_PLAN_38c100c0d8a279cc SELECT job FROM YES YES

emp WHERE enam e = 'MILLER'

Несмотря на то, что в нашем случае запрос попал в SMB по ссылке на SQL ID, в самой базе он идентифицируется ключом SQL_HANDLE, который автоматически порождается по подписи запроса, в свою очередь вычисляемой по нормализованому тексту. Это позволяет хранить план в AWR долговременно, независимо от того, представлен ли запрос вообще в курсорной области в данный момент, и под каким именно SQL ID представлен.

Обратите внимание, что использованный способ загрузки плана в основную лонию автоматически выставил признаки ENABLED и ACCEPTED в состояние 'YES', то есть единственный пока план в SMB и в рабочем состоянии, и включен в основную линию.



Содержание раздела