Адаптивное планирование запросов

Мы работаем над новыми алгоритмами, дополняющими существующий планировщик запросов.

Машинное обучение

Планировщик  оценивает каждый возможный план запроса и выбирает наименее затратный, но этот процесс происходит с большим количеством грубых допущений, поэтому предполагаемая стоимость могут не соответствовать реальным затратам ресурсов. Первый способ оптимизировать данный процесс заключается в совершенствовании самого процесса оценки стоимости путем внедрения, например,  многомерной статистики. Другой способ – использовать запрос на обратную связь в процессе выполнения задачи: можно будет увидеть различия в оценке стоимости, а именно – насколько оценка, данная системой, отличается от реальных затрат. Мы можем использовать методы машинного обучения для улучшения оценки стоимости на основе этой обратной связи и, таким образом, СУБД будет учиться на собственных ошибках.

Мы уже реализовали эту задачу для простой системы и в дальнейшем планируем работу в следующих направлениях:

  • Расширить модель работы для возможности обрабатывать большее количество частных случаев.
  • Обеспечить необходимую инфраструктуру для возможностей масштабировать машинное обучение.

Планирование на этапе выполнения запроса

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

  1. Онлайн-изменение значений фильтра. Во время последовательного сканирования больших таблиц очень важно в первую очередь сделать самые нересурсозатратные, но детальные проверки. В то же время, выбранная детализация и стоимость фильтров может быть некорректной, таким образом, порядок применения фильтров, основанных на этой оценке, может быть не самым лучшим. Однако  порядок фильтров может быть изменен в ходе выполнения запроса по итогам выполнения предыдущего запроса.
  2. Некоторые запросы могут быть разделены на последовательность шагов, когда последующие шаги могут быть перепланированы по итогам уже выполненных предыдущих этапов осуществления запроса. Например, предположим, что шаг 1 – это сканирование таблицы А, а шаг 2 – объединение таблиц А и В. В зависимости от количества строк и распределения данных в таблице, которые мы узнали в процессе выполнения шага 1, система может поменять выбранный алгоритм объединения таблиц во втором шаге.