Yandex Cloud
Поиск
Связаться с экспертомПопробовать бесплатно
  • Кейсы
  • Документация
  • Блог
  • Все сервисы
  • Статус работы сервисов
  • Marketplace
    • Доступны в регионе
    • Инфраструктура и сеть
    • Платформа данных
    • Искусственный интеллект
    • Безопасность
    • Инструменты DevOps
    • Бессерверные вычисления
    • Управление ресурсами
  • Все решения
    • По отраслям
    • По типу задач
    • Экономика платформы
    • Безопасность
    • Техническая поддержка
    • Каталог партнёров
    • Обучение и сертификация
    • Облако для стартапов
    • Облако для крупного бизнеса
    • Центр технологий для общества
    • Партнёрская программа
    • Поддержка IT-бизнеса
    • Облако для фрилансеров
    • Обучение и сертификация
    • Блог
    • Документация
    • Мероприятия и вебинары
    • Контакты, чаты и сообщества
    • Идеи
    • Калькулятор цен
    • Тарифы
    • Акции и free tier
  • Кейсы
  • Документация
  • Блог
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»
Yandex Managed Service for Sharded PostgreSQL
RU
  • Начало работы
  • Управление доступом
  • Правила тарификации
  • Справочник Terraform
  • Метрики Monitoring
  • Аудитные логи Audit Trails
  • Публичные материалы
  • История изменений
    • Общие вопросы
    • Распределенные запросы
    • Подключение
    • Безопасность
    • Производительность
    • Миграция
    • Ограничения
    • Устранение неполадок
    • Все вопросы на одной странице
  1. Вопросы и ответы
  2. Распределенные запросы

Распределенные запросы в Managed Service for Sharded PostgreSQL

Статья создана
Yandex Cloud
Обновлена 29 мая 2026 г.
  • Как Sharded PostgreSQL обрабатывает SQL-запросы?

  • Как выполнять транзакции с несколькими шардами?

  • Как принудительно указать, на каком шарде выполнить запрос?

  • Какие стратегии фиксации транзакций поддерживаются?

  • Как работают справочные таблицы (reference tables)?

  • Как создать справочные таблицы (reference tables)?

  • Поддерживает ли Sharded PostgreSQL распределенные последовательности (distributed sequences)?

  • Можно ли шардировать связанные таблицы по одному ключу?

  • Как выполняются запросы без явного ключа шардирования?

Как Sharded PostgreSQL обрабатывает SQL-запросы?Как Sharded PostgreSQL обрабатывает SQL-запросы?

Sharded PostgreSQL обрабатывает SQL-запросы в зависимости от их типа и контекста:

  • Обычные запросы — Sharded PostgreSQL обрабатывает запрос, определяет таблицу, колонку и значение, к которому происходит обращение. Эти данные сопоставляются с заранее заданными правилами шардирования (например, по ключу или диапазону). На основе этих правил система определяет целевой шард, на который нужно отправить запрос.

  • Запросы с настройками роутинга — на маршрутизацию такого запроса могут влиять виртуальные параметры, которые указываются в виде комментариев в SQL-запросе или в конфигурации роутера.

  • Транзакции — при получении команды BEGIN TRANSACTION Sharded PostgreSQL не выполняет запросы немедленно. Вместо этого он сохраняет все последующие запросы в памяти (например, команды SET). Вся транзакция отправляется на конкретный шард целиком только при поступлении запроса, для которого можно однозначно определить целевой шард. Это позволяет выполнить всю транзакцию на одном шарде.

Как выполнять транзакции с несколькими шардами?Как выполнять транзакции с несколькими шардами?

Для атомарных кросс-шардовых транзакций используйте двухэтапную фиксацию (2PC):

  1. В начале сессии — SET __spqr__commit_strategy TO '2pc'.
  2. В отдельной операции COMMIT — добавьте виртуальный параметр /* __spqr__commit_strategy: 2pc */.
  3. Убедитесь, что на шардах установлена настройка max_prepared_transactions > 0.

Важно

Без 2PC изменения могут быть применены частично.

Операции COPY поддерживаются с виртуальным параметром /* __spqr__allow_multishard: true */.

Виртуальные параметры можно задавать комментариями в SQL или через SET.

Как принудительно указать, на каком шарде выполнить запрос?Как принудительно указать, на каком шарде выполнить запрос?

Чтобы указать шард для выполнения запроса, используйте виртуальные параметры:

  • /* __spqr__execute_on: <имя_шарда> */ — указывает конкретный шард для выполнения запроса.

    Чтобы узнать имя шарда, выполните SQL-запрос SHOW shards;.

  • /* __spqr__auto_distribution: ... */ — выбирает правило шардирования для маршрутизации.

  • /* __spqr__scatter_query: true */ — включает отправку запроса на все шарды.

Виртуальные параметры можно задавать комментариями в SQL или через SET.

Подробнее о настройках выполнения запроса в документации SPQR.

Какие стратегии фиксации транзакций поддерживаются?Какие стратегии фиксации транзакций поддерживаются?

Sharded PostgreSQL поддерживает однофазную и двухэтапную фиксацию.

Способ фиксации в распределенной транзакции задается виртуальным параметром __spqr__commit_strategy. Возможные значения:

  • 1pc — одноэтапная фиксация (best-effort фиксация).

  • 2pc — двухэтапная фиксация.

    Для двухэтапной фиксации используйте виртуальный параметр /* __spqr__engine_v2: true */ и установите параметр PostgreSQL max_prepared_transactions на всех шардах.

Виртуальные параметры можно задавать комментариями в SQL или через SET.

Как работают справочные таблицы (reference tables)?Как работают справочные таблицы (reference tables)?

Данные в таких таблицах реплицируются на все шарды. Запросы к ним автоматически рассылаются на все узлы с помощью двухэтапной фиксации.

Как создать справочные таблицы (reference tables)?Как создать справочные таблицы (reference tables)?

Таблицы, идентичные на всех шардах, создаются через координатор:

CREATE REFERENCE TABLE table_name (...);

Данные автоматически реплицируются на все шарды. Запросы к ним выполняются без указания шардирования.

Подробнее о создании справочных таблиц в документации SPQR.

Поддерживает ли Sharded PostgreSQL распределенные последовательности (distributed sequences)?Поддерживает ли Sharded PostgreSQL распределенные последовательности (distributed sequences)?

Да, через команду CREATE REFERENCE TABLE ... AUTO INCREMENT. Sharded PostgreSQL гарантирует уникальность автоинкремента на уровне кластера.

Можно ли шардировать связанные таблицы по одному ключу?Можно ли шардировать связанные таблицы по одному ключу?

Да. Sharded PostgreSQL позволяет хранить связанные данные из разных таблиц на одном шарде, что упрощает JOIN-операции в пределах шарда.

Как выполняются запросы без явного ключа шардирования?Как выполняются запросы без явного ключа шардирования?

По умолчанию запросы без ключа шардирования (мультишардовые запросы) запрещены. Их можно разрешить с помощью виртуального параметра /* __spqr__scatter_query: true */. Результаты с каждого шарда склеиваются, но без гарантии консистентности.

Виртуальные параметры можно задавать комментариями в SQL или через SET.

Была ли статья полезна?

Предыдущая
Общие вопросы
Следующая
Подключение
Создавайте контент и получайте гранты!Готовы написать своё руководство? Участвуйте в контент-программе и получайте гранты на работу с облачными сервисами!
Подробнее о программе
Проект Яндекса
© 2026 ТОО «Облачные Сервисы Казахстан»