ИНЖЕНЕРНЫЕ МЕТОДЫP0L3

PostgreSQL и Greenplum: инженерная база для EDWH

OLTP-подходы, MPP-распределение, планы запросов и ограничения проверки на учебной базе.

Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

Почему это разные инженерные контексты#

PostgreSQL и Greenplum имеют близкую SQL-основу, но распределённая архитектура Greenplum меняет стоимость операций: физическое размещение таблицы по сегментам и межсегментная передача данных могут существенно влиять на выполнение запроса.

Правило: нельзя переносить выводы о производительности из небольшой PostgreSQL-таблицы или SQLite-прототипа на промышленный MPP-кластер без новых измерений.

PostgreSQL: базовые аспекты#

  • План выполнения: EXPLAIN показывает план, EXPLAIN ANALYZE исполняет запрос и возвращает фактические характеристики.
  • Статистика: оценки кардинальности влияют на выбор алгоритма соединения и стоимость плана.
  • Индексы и доступ: нужны для конкретных фильтров, соединений и упорядочивания; избыток индексов тоже имеет стоимость.
  • Партиционирование: может помогать ограничивать объём данных при правильных условиях отбора.
  • MVCC и транзакции: требуют понимания снимков, длительных операций и обслуживания таблиц.

Greenplum: MPP-специфика#

Основные темы изучения:

  1. Сегменты и распределение строк по узлам.
  2. Hash-distribution, random distribution, replicated distribution (доступность зависит от версии).
  3. Skew - неравномерная нагрузка или объём данных по сегментам.
  4. Локальные соединения и операции, требующие перемещения данных.
  5. Партиционирование отдельно от физического распределения по сегментам.
  6. План выполнения и зависимость от статистики.

Тип распределения нужно выбирать с учётом гранулярности и ожидаемых соединений. Например, распределение по почти постоянному признаку может создать выраженный skew; распределение по одному уникальному полю не всегда будет лучшим для всех аналитических соединений.

Финансовый пример#

Есть большой журнал проводок. Требуется рассчитывать обороты по счёту и валюте. Стоит оценить:

  • частоту соединения со справочниками счетов, документов, подразделений;
  • селективность дат и наличие партиционирования;
  • размеры отдельных сегментов, неравномерность ключей;
  • объём перемещений данных при агрегациях и соединениях;
  • сохранение точности денежных величин независимо от параллельного выполнения.

План оптимизации должен опираться на измеренные объёмы и реальные планы запросов, а не только на общие рекомендации.

Граница первой версии лаборатории#

Financial EDWH Lab сейчас работает на SQLite, не на PostgreSQL или Greenplum. Это решение сделано для запуска тестов без отдельного сервера БД. Темы MPP, EXPLAIN и распределения в данном разделе - справочные; лаборатория не подтверждает практическую оптимизацию Greenplum.

При переходе к PostgreSQL отдельным этапом нужны миграция схемы, тесты денежных типов, интеграционные тесты и сравнение планов.

Источники и документация

  1. PostgreSQL - Using EXPLAIN ↗
  2. Greenplum 6 - Creating and Managing Tables ↗
  3. Greenplum 6 - Monitoring Data Skew ↗

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