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

         

Пофилирование SQL-предложений - SQL Profiling


Основной этап проверки во время SQL-профилирования – это проверка оптимизатором запросов собственных оценок стоимости, избирательности и кардинального числа (cardinality). Существует множество факторов, которые могут вызывать большие ошибки в оценках и сподвигнуть оптимизатор на генерацию неоптимального (sub-optimal) плана. Вот некоторые из них:

  1. использование внутренней заданной по умолчанию избирательности предиката при отсутствие статистических данных (например, таблица не проанализирована),
  2. когда используется сложный предикат, так что оптимизатор запросов не может понять, какие данные будут фильтроваться с помощью этого предиката,
  3. наличие корреляции данных между столбцами таблицы, что означает что предположение о корреляции оптимизатором не верно,
  4. асимметрия (skewed) или разреженность (sparse) отношений объединения между таблицами, что является очень трудным для поимки в виде статистики,
  5. существование корреляции данных между столбцами двух или более таблиц (например, отношения объединение между продуктом, местоположением и продажами в таблице, где число продаж (#sales) зимних ботинок очень велико в New-York, но очень мало (возможно равная нулю) в Arizona).
  6. Для генерации хорошего плана оптимизатором запросов важно сделать так, чтобы оценки не содержали больших ошибок. Следовательно, для Automatic Tuning Optimizer очень важно проверить точность собственных оценок и удалить или, в крайнем случае, значительно уменьшить ошибки в них.

    Другой причиной генерации неоптимального плана служат неправильные параметры настройки оптимизатора. Например, если пользователь собирается выбрать только несколько строк за раз и если размер результата очень велик, то с целью уменьшения времени важно провести оптимизацию: сначала для нескольких строк, а уже потом для всех. Поэтому для такого SQL-предложения важно установить режим оптимизатора first_rows, а не all_rows.

    В течение SQL Profiling выполняются этапы проверки Automatic Tuning Optimizer для проверки правильности своих собственных оценок. Проверка правильности состоит из анализа выборки данных путем применения к ней соответствующих предикатов. Новая оценка производится по результатам выборки данных. Эта новая оценка будет точнее, потому как размер выборки может быть в случае необходимости откорректирован для гарантированно высокого уровня точности. Новая оценка сравнивается с обычной, и, если различия будут достаточно велики, то продуцируется фактор коррекции, чтобы привести в соответствие обычную статистику с новой. Другой метод правильности проверки оценки состоит в выполнении фрагмента SQL-предложения (то есть, частичное выполнение). Метод частичного выполнения эффективнее, чем метод выборки, когда соответствующие предикаты обеспечивают эффективный доступ. Automatic Tuning Optimizer выбирает соответствующий оценочный метод проверки правильности.

    Automatic Tuning Optimizer для выставления правильных настроек также использует прошлую статистику выполнения SQL-предложения. Например, если текущая статистика говорит о том, что SQL-предложение в большинстве случаев выполняется частично, тогда настройку переключают в режим first_rows. Это будет выбираемая настройка для настраиваемого SQL-предложения.

    Automatic Tuning Optimizer формирует SQL Profile, если он сгенерировал вспомогательную информацию в течение анализа статистики (то есть, факторы настройки статистики) или в течение SQL Profiling (то есть, корректирующие факторы, настраивающие установки оптимизатора). Когда SQL Profile сформирован, он генерирует рекомендацию для пользователя по созданию SQL-профиля.

    Поскольку используемые для оценочной статистик методы выборки данных или частичного выполнения могут быть дорогими или отнимающими много времени процессами, то SQL Profiling не выполняется в режиме Limited (ограничено). Вам следует использовать режим Comprehensive (комплексный), чтобы позволить Automatic Tuning Optimizer сгенерировать SQL Profile.



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