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

         

Управление SQL Tuning Set


Типичный сценарий использования пакета DBMS_SQLTUNE для SQL Tuning Set (или просто sqlset) включает в себя создание нового SQL Tuning Set, загружая его набором высоко нагруженных SQL-предложений, выбирая и просматривая его содержимое для ручного анализа и дальнейшего модернизирования и выбора, затем запуск SQL Tuning Advisor для автоматической настройки всех предложений в SQL Tuning Set, и, наконец, исключение SQL Tuning Set после выполнения рекомендаций SQL Tuning Advisor.

В следующем примере процедура create_sqlset создает SQL Tuning Set с именем my_sql_tuning_set, который может быть использован для загрузки ввода-вывода интенсивных SQL-предложений, собранных в течение определенного периода времени. create_sqlset( sqlset_name => 'my_sql_tuning_set', description => 'I/O intensive workload');

Эта процедура создает в базе данных пустой SQL Tuning Set. Обратите внимание на то, что для выполнения процедуры SQL Tuning Set пользователь должен иметь привилегию ADMINISTER SQL TUNING SET или ADMINISTER ANY SQL TUNING SET.

После создания SQL Tuning Set процедура load_sqlset может быть использована для заполнения его выбранными SQL-предложениями. Стандартный источник заполнения SQL Tuning Set - это Automatic Workload Repository (AWR), кэш курсоров или другой SQL Tuning Set, который был создан или загружен ранее. Для каждого из этих источников есть предопределенные табличные функции, которые могут быть использованы для извлечения и фильтрования исходного содержимого перед загрузкой в новый SQL Tuning Set.

Например, следующие вызовы процедуры используются для загрузки my_sql_tuning_set базовой строки AWR, называемой “peak baseline”, выбирая только те SQL-предложения, которые были выполнены не менее 10 раз, и которые имеют отношение (disk-reads/buffer-gets) более 50% в течение базового периода [времени]. SQL-предложения упорядочиваются по отношению (disk-reads/buffer-gets) и выбираются только 30 лучших SQL-предложений. -- open a ref cursor to select from the specified baseline open baseline_ref_cursor for select value(p) from table (dbms_sqltune.select_baseline( ‘peak baseline', ‘executions >= 10 and disk_reads/buffer_gets >= 0.5', null, disk_reads/buffer_gets, null, null, null, 30)) p; -- load statements and their stats from the baseline into the STS dbms_sqltune.load_sqlset( sqlset_name => 'my_sql_tuning_set', populate_cursor => baseline_cur);


Теперь, когда SQL Tuning Set был создан и заполнен, АБД может просмотреть SQL-предложение в SQL Tuning Set, используя процедуру select_sqlset, как показано ниже: SELECT * from TABLE(select_sqlset( 'my_sql_tuning_set', '(disk_reads/buffer_gets) >= 0.75'));

В этом примере были отображены только SQL-предложения с отношением (disk-reads/buffer-gets) >75%. Подробности SQL Tuning Set, который был создан и загружен, могут быть просмотрены, используя представления АБД DBA_SQLSET, DBA_SQLSET_STATEMENTS и DBA_SQLSET_BINDS.

SQL-предложения могут также быть модифицированы и удалены из SQL Tuning Set, основанного на условиях поиска. Например, следующая процедура delete_sqlset удалит из my_sql_tuning_set все SQL-предложения, которые были выполнены меньше, чем 50 раз. delete_sqlset(sqlset_name => 'my_sql_tuning_set', basic_filter => 'executions < 50');

Наконец, когда SQL Tuning Set более не требуется (например, после настройки всех инструкций он содержит и осуществляет необходимые рекомендации) он может быть удален процедурой drop_sqlset, как показано далее: drop_sqlset(sqlset_name => 'my_sql_tuning_set');


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