Ручной и автоматический сбор статистики оптимизатора в базе данных Oracle

Автоматический или ручной сбор статистики оптимизатора использовать в базе данных OracleВ базе данных Oracle оптимизатор запросов играет важнейшую роль в выполнении операторов SQL наиболее эффективным образом. Один и тот же оператор SQL можно выполнить несколькими способами, и задача оптимизатора запросов состоит в выборе наиболее быстрого и эффективного пути выполнения каждого запроса к базе данных.

Чтобы разработать наилучший план выполнения любого оператора SQL, оптимизатор сначала оценивает возможные пути доступа, порядки соединения (join orders) и т.п., и выбирает несколько подходящих планов выполнения. Затем он вычисляет стоимость альтернативных планов на основе использования ими системы ввода-вывода, центрального процессора и памяти. На этом шаге оптимизатор использует статистику, которая среди прочего включает информацию о распределении данных и характеристики хранения таблиц и индексов. И, наконец, оптимизатор сравнивает стоимости альтернативных планов и выбирает план с минимальной стоимостью.


На заметку! В Oracle рекомендуют позволить базе данных автоматически собирать статистику оптимизатора.


 

Автоматически собираемая статистика оптимизатора

Выпуск Oracle Database 10g представил средство сбора статистики оптимизатора. Теперь вас не должен беспокоить вопрос о частоте сбора статистики или объектах, включаемых в процесс сбора, поскольку Oracle теперь обо всем позаботиться за вас.


На заметку! Бывают ситуации, когда ручной сбор статистики оптимизатора оправдан, и мы обсудим это в ниже в разделе “Ручной сбор статистики оптимизатора”.


В Oracle Database 11g очень легко включить автоматический сбор статистики — Oracle автоматически запускает его при создании новой базы данных Oracle Database 11g или обновлении до версии Oracle Database 11g. Для автоматического сбора статистики оптимизатора используется пакет DBMS_STATS.


Совет. Удостоверьтесь, что параметр инициализации STATISTICS_LEVEL установлен в TYPICAL или ALL, чтобы обеспечить включение средства автоматического сбора статистики.


 

Планировщик и GATHER_STATS_JOB

Когда вы создаете новую базу данных или обновляете до версии Oracle Database 11g, Oracle автоматически создает задание базы данных по имени GATHER_STATS_JOB, а планировщик Oracle Scheduler автоматически планирует задание для запуска во время окна обслуживания. Вот как проверить, работает ли задание автоматического сбора статистики: 

SQL> SELECT job_name
FROM dba_scheduler_jobs
WHERE job_name LIKE 'GATHER_STATS%';
JOB_NAME
----------------
GATHER_STATS_JOB
SQL>

Oracle планирует задание GATHER_STATS_JOB для автоматического выполнения с использованием инструмента Oracle Scheduler. Начиная с Oracle Database 10g, планировщик Scheduler заменил старые средства планирования заданий, использовавшие пакет DBMS_JOB .

Планировщик Oracle Scheduler по умолчанию имеет два окна операций:

  • еженедельное ночное окно между 10 вечера и 6 утра, с понедельника по пятницу;
  • окно на выходные дни между полуднем субботы и полуднем понедельника.

Вместе эти два окна известны как окно обслуживания (maintenance window). Oracle автоматически планирует задание GATHER_STATS_JOB для запуска во время открытия окна обслуживания. Отключается автоматический сбор статистики следующим образом: 

SQL> BEGIN
2 dbms_scheduler.disable('gather_stats_job');
3 END;
4 /
PL/SQL procedure successfully completed.
SQL>

Задание GATHER_STATS_JOB вызывает процедуру DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC для сбора статистики оптимизатора. Задание собирает статистику только для объектов, которые попадают в один из перечисленных ниже классов.

  • Объекты с отсутствующей статистикой. Любой объект без статистики является кандидатом на сбор статистики.
  • Объекты с устаревшей статистикой. Oracle считает статистику объекта устаревшей, если 10 или более процентов строк объекта были модифицированы с момента последнего сбора статистики для этого объекта.

По умолчанию Oracle отслеживает модификации (изменения с помощью операторов DML) в объектах базы данных, пока параметр инициализации STATISTICS_LEVEL установлен в TYPICAL или ALL (TYPICAL — значение по умолчанию).

Процедура GATHER_DATABASE_STATS_JOB_PROC устанавливает приоритеты между объектами базы данных на основе активности DML по каждому объекту. Эта процедура первыми анализирует объекты, которые претерпели максимум изменений DML, так что даже если задание по сбору статистики не будет завершено целиком, прежде чем закроется окно обслуживания, она гарантированно соберет наиболее востребованную статистику.

Обратите внимание, что по умолчанию планировщик прервет задание GATHER_STATS_JOB, если оно еще будет выполняться на момент закрытия окна обслуживания. Объекты, для которых статистика не будет собрана до закрытия окна поддержки, будут автоматически обработаны при следующем запуске задания. Однако атрибут STOP_ON_WINDOW_CLOSE задания GATHER_STATS_JOB можно установить в FALSE. Я планирую написать статью, посвященную Oracle Scheduler, и там будет объяснятся, как это сделать.

статистика оптимизатора Oracle: собираем вручную или автоматом?

 

Использование Database Control для управления расписанием GATHER_STATS_JOB

Вы всегда можете изменить окно обслуживания по умолчанию с помощью SQL*Plus. С помощью OEM Database Control можно также модифицировать текущее расписание запуска GATHER_STAT_JOB.

Ниже перечислены шаги, которые потребуется для этого сделать.

  1. На домашней страницы Database Control щелкните на вкладке Administration (Администрирование).
  2. Перейдите в раздел Scheduler Group (Группа планировщика) и щелкните на ссылке Windows (Окна).
  3. Щелкните на кнопке Edit (Редактировать). После этого можно отредактировать времена окон обслуживания.

 

Ручной сбор статистики оптимизатора

С помощью пакета DBMS_STATS можно выполнять ручной сбор статистики оптимизатора на уровне таблицы, схемы или базы данных, а также собирать статистику системы. Начиная с версии Oracle Database 10g, рекомендованный способ сбора статистики, однако, заключается в том, чтобы позволить базе данных делать это автоматически. Тем не менее, в некоторых ситуациях, вроде описанных ниже, для сбора статистики необходимо использовать традиционный пакет DBMS_STATS вместо того, чтобы полагаться на автоматический сбор Oracle.

  • Использование внешних таблиц.
  • Сбор системной статистики.
  • Сбор статистики о фиксированных объектах, таких как динамические таблицы производительности.
  • Немедленно после запуска пакетного задания загрузки, поскольку оно делает имеющуюся статистику неактуальной.

Вас заинтересует / Intresting for you:

Создание БД Oracle 12c с макси...
Создание БД Oracle 12c с макси... 3360 просмотров Андрей Васенин Mon, 20 Aug 2018, 13:43:20
Настройка памяти базы данных O...
Настройка памяти базы данных O... 12529 просмотров Stas Belkov Sat, 07 Jul 2018, 15:44:14
Мониторинг Oracle через метрик...
Мониторинг Oracle через метрик... 3892 просмотров sepia Tue, 21 Nov 2017, 13:18:05
Oracle ADDM - автоматическая д...
Oracle ADDM - автоматическая д... 5706 просмотров Алексей Вятский Tue, 21 Nov 2017, 13:18:05
Войдите чтобы комментировать

Обсудить эту статью

INFO: Вы отправляете сообщение как 'Гость'