Обзор обработки запросов

Для эффективной настройки SQL необходимо понимать, что такое план запроса. Понимание планов запросов требует знания полного процесса выполнения запроса в системе управления базами данных. Как эволюция и оптимизация семейства PostgreSQL, YMatrix наследует классические механизмы обработки запросов из PostgreSQL — в первую очередь от Greenplum Database.

Greenplum Database разделяет узлы на Master-узлы и Segment-узлы, расширяя архитектуру PostgreSQL для поддержки распределённой системы баз данных со следующим рабочим процессом обработки запросов:

  • Master получает SQL-запрос и генерирует план выполнения.
  • Master распространяет план выполнения на Segment-узлы.
  • Segment-узлы параллельно выполняют план на своих локальных наборах данных.
  • Master собирает результаты и возвращает их клиенту.

Существует два метода распределения планов запросов:

  • Распределённые параллельные планы запросов
  • Целевые планы запросов

Распределённый параллельный план запроса означает, что большинство операций базы данных — таких как сканирование таблиц, соединения, агрегации и сортировки — выполняются параллельно на всех экземплярах Segment. Каждая операция работает независимо на данных одного Segment, не обращаясь к данным, хранящимся на других Segment.

Целевой план запроса применяется, когда запрос обращается к данным только на одном Segment. Примеры включают операции INSERT, UPDATE, DELETE или SELECT для одной строки, либо запросы, отфильтрованные по столбцу ключа распределения таблицы. В таких случаях план запроса не отправляется всем Segment, а направляется только на Segment-узел(ы), содержащие соответствующие строки.

Обратите внимание, что целевые планы запросов в распределённой базе данных отличаются от планов в одиночной базе данных. В распределённой системе каждый сервер обычно содержит несколько экземпляров Segment, в отличие от одиночной базы данных, где имеется только один Segment. Следовательно, даже если при создании таблицы не был определён ключ распределения, данные всё равно могут быть распределены между несколькими Segment на одном и том же сервере. В таких случаях даже целевой план, направленный на один сервер, может требовать оператора Motion для сбора результатов из нескольких Segment на этом сервере.