За пределами EXPLAIN: как увидеть выполнение запроса вживую в распределённой СУБД

roaldm153 31 минуту назад Объяснить с За пределами EXPLAIN: как увидеть выполнение запроса вживую в распределённой СУБД 7 мин 850 Блог компании Yandex Cloud & Yandex Infrastructure Блог компании Яндекс Open source *...
<5 — 2026'da uzaya kaç SpaceX Starship fırlatması ulaşacak?
В сфере искусственного интеллекта произошло заметное событие. roaldm153 31 минуту назад Объяснить с За пределами EXPLAIN: как увидеть выполнение запроса вживую в распределённой СУБД 7 мин 850 Блог компании Yandex Cloud & Yandex Infrastructure Блог компании Яндекс Open source * PostgreSQL * Базы данных * Представьте, что ваш запрос в Greenplum внезапно завис. Есть план выполнения, но что именно сейчас происходит, непонятно. В итоге вы перезапускаете запрос наугад: инструментов для живого наблюдения попросту нет.
Я Алексей Рожок, разработчик ClickHouse в Yandex Cloud. Летом 2026 года я стажировался в Greenplum/Cloudberry и реализовывал проект, который помогает увидеть весь путь запроса. В статье покажу, как достучаться до процессов на всех хостах кластера и почему сбор метрик пришлось вынести с координатора в отдельный сервис YAGPCC.
Технические детали
Чего не показывает EXPLAIN SQL — язык декларативный: вы пишете, что хотите получить, а как именно это сделать, решает СУБД. В PostgreSQL этот выбор можно подсмотреть через EXPLAIN: вот план, вот узлы, вот оценки. Но пока тяжёлый запрос крутится часами, главный вопрос — «На каком шаге мы сейчас и почему так долго?
» — остаётся без ответа. EXPLAIN ANALYZE отдаёт статистику только постфактум, а оценки планировщика часто сильно расходятся с реальностью. Для ванильного PostgreSQL уже есть решения, которые показывают статистику запроса, пока он выполняется.
Но в мире распределённых MPP-СУБД запрос, разбитый на части, может идти параллельно на сотнях узлов кластера. Готовых решений для такого случая нет, поэтому пришлось написать своё. Расширение pg_query_state для Apache Cloudberry строит дерево плана по ходу выполнения запроса и периодически обновляет статистику в каждом узле.
Отраслевые последствия
По сути, мы получаем честный live-observability: видно, чем запрос занят прямо сейчас. Ниже расскажу, как достучаться до процессов запроса на всех сегментах кластера и почему собирать их статистику пришлось отдельным сервисом. Как Cloudberry выполняет запросыОбъяснить архитектуру Cloudberry за пару минут сложно, но я попытаюсь.
Кластер состоит из координатора и сегментов. Координатор принимает запрос, строит план, рассылает его по сегментам и собирает итоговый результат. Сегмент — независимый экземпляр СУБД на основе PostgreSQL в архитектуре shared-nothing.
Он владеет собственным шардом данных на локальном диске, не имеет доступа к данным других сегментов и получает от координатора план запроса для своей части. Физически сегменты размещаются на сегмент-хостах, обычно по одному на ядро CPU или диск. Для примера создадим таблицу test: create table test ( id serial primary key, val numeric, txt text, created timestamp default now() ); Выполним простой запрос: select * from test a where a.
Этот прогресс даёт важные сигналы о будущем отрасли, и технологический мир внимательно наблюдает.





