1 of 46

Введение в базы данных

Лекция 8

2 of 46

План лекции

Оптимизация запросов:

  • Стадии оптимизации запросов
  • Преобразование (перезапись) запросов
  • Детали исполнения запросов
  • Правила составления запросов
  • Оценка хранения и распределения данных

3 of 46

Оптимизация выполнения запросов

Написать запрос так, чтобы выполнить наименьшее число простых операций (чтений блоков и страниц).

4 of 46

Средства оптимизации

В РСУБД оптимизацию можно проводить:

  • Преобразуя выражения реляционной алгебры
  • Используя знания о механизмах выполнения простых операций
  • Проводя оценку путей доступа к данным

5 of 46

Оптимизация средствами СУБД

Большинство техник оптимизации запросов автоматизированы.

6 of 46

Планировщик запроса

Сравнивает до сотен различных стратегий выполнения запроса.

  • Преобразование выражение в реляционной алгебре
  • Выбор структуры запроса
  • Выбор методов исполнения
  • Оценка размера и распределения

7 of 46

Чем пользуется планировщик

  • Статистика хранения и выполнения запросов (pg_stat_*)
  • Динамика изменения статистики

8 of 46

Стадии оптимизации запроса

9 of 46

Стадии оптимизации запроса

  1. Перезапись запроса
  2. Выбор метода исполнения
  3. Выбор структуры запроса
  4. Оценка размера и распределения

10 of 46

Перезапись запроса

Преобразование запроса во внутреннюю форму (реляционную алгебру).

Избегая синтаксического сахара и других различных вариантов написания одного и того же запроса, понять, что и как нужно выбрать.

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

11 of 46

Выбор метода исполнения

  • Преобразование запроса
  • Порядок выполнения операций
  • Порядок соединений

12 of 46

Выбор структуры исполнения

Как исполняется каждая операция.

Оценка трудоемкости (EXPLAIN) и свойств операции (как меняются свойства выборки после операции).

13 of 46

Оценка плана

  • Модель стоимости
    • Стоимость операции
    • Размер операндов
    • Размер результата
  • Оценка размера и распределения
    • Статистика по данным
    • Статистика предыдущих запросов

14 of 46

Перезапись запроса

15 of 46

Минимизация запроса

Повторное применение фильтрации заменяется одинарным:

Повторное применение проекции заменяется внешней:

Фильтрация осуществляется до проекции:

16 of 46

Дистрибутивность операций

Фильтрация:

17 of 46

Дистрибутивность операций

Проекция:

18 of 46

Обработка условий

Примеры:

19 of 46

Преобразование предикатов

Конъюнктивная нормальная форма:

Слева на право, до первой лжи

Дизъюнктивная нормальная форма:

Слева на право, до первой истины

20 of 46

Семантическая оптимизация

Применение знания об ограничениях:

Не эквивалентные запросы, но тот же результат

21 of 46

Выбор метода исполнения

22 of 46

Цепь (или сеть) операций

  • Аргументы операции
    • Базовые таблицы
    • Результаты других операций
  • Результат операций
    • Аргумент другой операции
    • Окончательный результат

23 of 46

Типы операций

  • Контейнеры
    • Загружают аргументы
    • Сохраняют результаты
  • Преобразователи
    • Просматривают аргументы в процессе работы

24 of 46

Курсоры

Выдают записи последовательно.

  • open() – открыть курсор
  • fetch() – следующая строка
  • reset() – начать с начала
  • close() – закрыть курсор

25 of 46

Фильтрация

  • Преобразователь
    • Выкидывает ненужные строки
  • Трудоемкость
    • O(n), где n – размер входа
  • Свойства
    • Может уменьшать количество строк

26 of 46

Проекция

  • Преобразователь
    • Выкидывает ненужные атрибуты
    • Сравнивает соседние элементы
  • Трудоемкость
    • O(n), где n – размер входа
  • Свойства
    • Вход должен быть упорядочен
    • Сохраняет порядок

27 of 46

Сортировка

  • Контейнер
    • Сортировка в памяти
    • Внешняя сортировка
  • Трудоемкость
    • O(nlogn), где n – размер входа
  • Свойства
    • Выход упорядочен
    • Время исполнения зависит от объема

28 of 46

Просмотр таблиц

  • Преобразователь и контейнер
    • Полный проход по таблице
    • Внешняя сортировка
  • Трудоемкость
    • O(n), где n – размер входа
  • Методы исполнения
    • Полный просмотр
    • Индексы

29 of 46

Объединение

  • Преобразователь
    • Слияние входов
  • Трудоемкость
    • O(n), где n – размер входа
  • Свойства
    • Упорядоченные входы
    • Упорядоченный результат

30 of 46

Пересечение

  • Преобразователь
    • Слияние входов
  • Трудоемкость
    • O(n), где n – размер входа
  • Свойства
    • Упорядоченные входы
    • Упорядоченный результат

31 of 46

Вложенный перебор

  • Преобразователь
    • Перебор левого входа
    • Перебор правого входа
  • Трудоемкость
    • O(l·r), где l, r – размеры входов
  • Свойства
    • Сохраняет упорядоченность

32 of 46

Поиск по индексу

  • Преобразователь
    • Перебор левого входа
    • Доступ к правому входу по индексу
  • Трудоемкость
    • O(max(l·logr,n)), где l, r – размеры входов, n – выхода
  • Свойства
    • Сохраняет упорядоченность

33 of 46

Поиск по хэшу

  • Преобразователь
    • Захэшировать правый вход
    • Перебор левого входа
    • Доступ по хэшу к правому ходу
  • Трудоемкость
    • O(max(l+r,n)), где l, r – размеры входов, n – выхода

34 of 46

Итог двух этапов: реальные стратегии

Зная:

  • n (количество записей в таблице) из метаданных
  • стоимость переписанных операций

можно оценить сложность запроса целиком + предположить занимаемую память.

EXPLAIN

35 of 46

Выбор структуры исполнения

36 of 46

Планирование операций

  • Унарные:
    • Фильтрация – первый приоритет
    • Проекция – второй приоритет
  • Над множествами не влияют (можно распараллелить)
  • Соединения:
    • Порядок важен
    • Желательно сокращение результата

37 of 46

Порядок соединений

Динамическое программирование на подмножествах.

Можно найти лучший вариант соединения отношений не вычисляя одно и то же несколько раз.

38 of 46

Оценка хранения и распределения данных

39 of 46

Размер и распределение

  • Оценка размера
    • Какого размера результат
    • Поместится ли он в памяти
  • Оценка распределения
    • Позволяет оценить размер результатов соединения

40 of 46

Типы распределений

  • Распределение отношения
    • Строки
    • Страницы
  • Распределение атрибутов
    • Значения
    • Размер
    • Диапазон
    • Распределение
  • Распределение индексов
    • Листы, узлы, высота дерева
    • Уникальные значения, корзины

41 of 46

Упрощающие предположения

  • Равномерность распределения: равное количество кортежей с равными значениями
  • Независимость атрибутов: распределения атрибутов независимы
  • Равномерность запросов: запросы ко всем значениям равновероятны
  • Равномерность заполнения: страницы содержат равное число кортежей
  • Случайность расположения: кортежи распределены по страницам случайным

42 of 46

Оцениваемые значения

  • Мат. ожидание числа чтений страниц
    • Запрос с одним атрибутом
    • Все запросы с одним атрибутом
    • Запрос с несколькими атрибутами
  • Мат. ожидание количества различных значений в результате фильтрации

43 of 46

Оценка операций

Входные данные:

  • Базовые отношения: статистика
  • Результаты операций: распределение аргументов + свойства операции

44 of 46

Как СУБД выбирает стратегию

  • Доступная память
  • Размеры соединяемых отношений
  • Доступные индексы
  • Нужно ли сортировать
  • Распределение данных
  • Параллельность выполнения подзапросов

45 of 46

Как пользователь советует СУБД

Подсказки:

SELECT /*+ full(t) */ t.name FROM tbl1 t WHERE ...�SELECT /*+ index(t ind_date) */ t.name FROM tbl1 t WHERE ...

46 of 46