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

         

Групповая настройка запросов


Средствами DBMS_SQLTUNE можно провести углубленный анализ (с построением, если возможно, профиля) сразу для групп запросов - например, поступающих из заданного приложения, или выбранных из рабочей области SQL в SGA СУБД. Ниже приводится пример второго.

Построим набор запросов, поступавших от пользователя SCOTT:

EXECUTE DBMS_SQLTUNE.CREATE_SQLSET ( 'my_workload' )

DECLARE cur DBMS_SQLTUNE.SQLSET_CURSOR;

BEGIN OPEN cur FOR SELECT VALUE ( P ) FROM TABLE ( DBMS_SQLTUNE.SELECT_CURSOR_CACHE ( basic_filter => 'parsing_schema_name = ''SCOTT''' , attribute_list => 'ALL' ) ) P ;

DBMS_SQLTUNE.LOAD_SQLSET ( sqlset_name => 'my_workload'

, populate_cursor => cur ); END; /

Табличная функция SELECT_CURSOR_CACHE возвращает вложенную таблицу объектов типа DBMS_SQLTUNE.SQLSET_ROW, каждый из которых содержит сведения о запросах, отобранных из рабочей области SQL в SGA. Загрузка "набора запросов" выполняется процедурой LOAD_SQLSET через ссылку на курсор, сформированый после преобразования вложенной таблицы в список объектов функцией TABLE. Фильтр для отбора строк в набор запросов из области SQL строится как условное выражение по полям таблицы V$SQLAREA и может быть гораздо более сложным. Тип SQLSET_CURSOR есть просто тип нестрогой ссылки на курсор, то же, что SYS_REFCURSOR, однако зачем-то определен самостоятельно в пакете DBMS_SQLTUNE и здесь употреблен по инерции.

Построим задание для углубленного анализа созданого набора запросов:

VARIABLE ttask VARCHAR2 ( 100 )

BEGIN :ttask := DBMS_SQLTUNE.CREATE_TUNING_TASK ( sqlset_name => 'my_workload' , task_name => 'my_sqlset_task'

); END; /

Выполним анализ:

EXECUTE DBMS_SQLTUNE.EXECUTE_TUNING_TASK ( :ttask )

Средствами пакета можно формировать наборы запросов для анализа и иначе, например по данным репозитария рабочей нагрузки (Automatic Workload Repository).



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