Greenplum критически зависит от правильной настройки ОС на сегментных хостах и от того, как клиентские приложения подключаются к кластеру. Все эти вещи напрямую связаны между собой через потребление памяти.
HugePages. Без HugePages ядро тратит значительные ресурсы на управление таблицами страниц для сотен сегментных процессов. Включение HugePages снижает накладные расходы и предотвращает фрагментацию памяти.
Swap. Использование swap на сегментном хосте — это почти всегда инцидент. Один медленный сегмент из-за свопирования замедляет весь распределённый запрос. Мы устанавливаем vm.swappiness=10 и следим чтобы swap не использовался в штатном режиме.
gp_vmem_protect_limit. Это главный параметр защиты от OOM в Greenplum. Формула: (RAM × 0.9) / количество сегментов на хост. Для хоста с 377 GB RAM и 16 сегментами — примерно 21 GB на сегмент.
pgBouncer — пулер соединений. В Greenplum каждое клиентское соединение с мастером порождает дерево процессов на всех сегментах одновременно. При 24 активных соединениях и 192 сегментах в кластере это более 4600 процессов — каждый потребляет память на каждом хосте.
pgBouncer в режиме Transaction Pooling решает эту проблему радикально: сотни клиентских подключений (DBeaver, Cognos, ETL-скрипты) мультиплексируются в небольшой пул реальных соединений с мастером.
Это снижает потребление памяти, устраняет «шторм соединений» при одновременном старте множества клиентов и защищает кластер от зависания при исчерпании лимита max_connections.
Мы рассматриваем отсутствие pgBouncer в production кластере Greenplum как архитектурный риск, а не просто упущенную оптимизацию.Что проверяем: - HugePages: Состояние, количество выделенных страниц
- Swap: Текущее использование, vm.swappiness, vm.overcommit_memory
- gp_vmem_protect_limit: Текущее значение, соответствие формуле расчёта
- pgBouncer: Наличие, режим работы, количество реальных соединений с мастером
Риск: OOM на сегментных хостах, деградация всех запросов при свопировании, зависание кластера при шторме соединений.