Настройка производительности запросов реляционных баз данных

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

В этом разделе не рассматриваются проблемы с производительностью, которые связаны с сетью, браузером или представлением отчетов.

Анализ журнала запросов для Oracle Analytics (требуется 3 уровень журнала)

Подробнее о том, как найти этот журнал и проанализировать его содержимое см. в разделе "Сбор и анализ журналов запросов".

  1. Сравните время, которое тратится на запрос в Oracle Analytics, со временем, затраченным на запрос в базе данных, то есть время ответа и продолжительность физического запроса. Обычно время, затраченное в Oracle Analytics, не превышает нескольких секунд.
  2. Если время ответа превышает несколько секунд, проанализируйте конкретные действия в Oracle Analytics, чтобы найти причину (требуется 5 уровень журнала).

Анализ физического запроса SQL

  1. Убедитесь, что все таблицы, включенные в запрос, необходимы. Найдите таблицы, которые соединены, но не включены во фразу SELECT и к которым не применяются фильтры (настоящие, а не условия соединения).
  2. Определите, сколько физических запросов и подзапросов генерируется. А именно, сколько раз запрос читает таблицу фактов? В идеальном мире запрос читает одну таблицу фактов всего один раз. Если таблиц фактов больше одной, выясните причину и узнайте, можно ли удалить некоторые из них.
  3. Проверьте наличие исключенных столбцов, неаддитивных правил агрегирования (REPORT_AGGREGATE, count(distinct)...), этапов выбора, подзапросов в отчете, операторов набора (UNION), итогов, промежуточных итогов, нескольких представлений и т. д.
  4. Проверьте наличие любых внешних соединений. Узнайте, откуда они берутся и можно ли устранить некоторые из них, изменив макет.

Анализ плана выполнения

Если оптимизации SQL недостаточно, проанализируйте план выполнения, чтобы найти основную причину проблем с производительностью. Обратитесь за помощью к администратору базы данных (DBA). На данном этапе существует четыре основных способа повысить производительность:
  1. Сократите объем операций ввода-вывода, улучшив пути доступа к данным (индексы).
  2. Сократите количество операций ввода-вывода, уменьшив объем чтения данных. Например, можно проверить применяемые фильтры или структуру модели данных (см. следующий раздел).
  3. Увеличьте параллельную обработку (число потоков, используемых для чтения больших таблиц).
  4. Повысьте скорость операций ввода-вывода (с помощью улучшения инфраструктуры, встроенной в память базы данных и т. д.).

Проверьте и улучшите модель данных для сокращения объема чтения данных

  1. Создавайте сводные таблицы.
  2. Используйте фрагментацию.

    Например, если пользователи в основном выбирают данные за текущий год, квартал или месяц, можно разделить фактическую таблицу на две – текущую и архивную. Для базы данных Oracle также можно использовать создание разделов.

  3. Используйте денормализацию, чтобы сократить число соединений.
  4. Разбейте таблицы, чтобы сократить число столбцов.

    Объем чтения данных зависит не только от количества строк в каждой таблице. Объем таблицы также зависит от количества и размера столбцов. Например, можно разделить большую таблицу с 500 столбцами на две таблицы: в одной будет 50 столбцов, которые используются чаще всего, а в другой – оставшиеся 450, которые редко используются.

Многие проблемы с производительностью в Oracle Analytics возникают из-за плохого макета, так как это приводит к созданию неоптимальных запросов SQL. Изменив макет, можно улучшить запросы SQL, которые создает Oracle Analytics. Это может существенно повлиять не только на производительность отчетов, но и на объем ресурсов, которые использует база данных.