Методология аудита Greenplum / Arenadata DB

Greenplum и его российский дистрибутив Arenadata DB (ADB) — это массово-параллельные СУБД (MPP), спроектированные для обработки петабайтных аналитических нагрузок. В отличие от классических реляционных баз данных, Greenplum распределяет данные и вычисления между десятками и сотнями сегментных процессов одновременно.
Оставить заявку Подробнее про аудит

Методология аудита Greenplum / Arenadata DB

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

В DB Serv мы проводим аудиты кластеров Greenplum и Arenadata DB как отдельную услугу и как первый обязательный этап перед любой миграцией. В этой статье мы описываем нашу методологию: что мы смотрим, что ищем и как результаты аудита превращаются в конкретный план работ.

Зачем нужен аудит

Типичная ситуация, с которой к нам приходят: кластер работает, но медленно. Или падает при нагрузке. Или занимает слишком много места. Или команда планирует миграцию на новую версию и не знает с чего начать.

Аудит отвечает на три вопроса:

Что сейчас не так — зафиксировать текущее состояние и выявить отклонения от лучших практик

Какие риски существуют — оценить вероятность и последствия каждой проблемы

Что делать и в каком порядке — сформировать приоритизированный план работ

Без аудита любые изменения в кластере — это действия вслепую. С аудитом — это управляемый процесс с понятными приоритетами.

Структура аудита

Мы разбиваем аудит на десять областей. Каждая область проверяется по своему чеклисту, а результаты оцениваются по трём уровням приоритета: критический, высокий, средний.
  • Версия СУБД и план жизненного цикла
    Первое что мы смотрим — на какой версии работает кластер и есть ли план её обновления.

    Greenplum 6.x основан на PostgreSQL 9.4, поддержка которого завершена. Это означает отсутствие патчей безопасности, устаревший оптимизатор запросов и невозможность использовать современные расширения. Greenplum 7.x (Arenadata DB 7.x) переходит на PostgreSQL 12, что даёт принципиально новый планировщик, улучшенную работу с партиционированием и долгосрочную поддержку вендора.

    Что проверяем:

    • Версия ядра: PostgreSQL и Greenplum/ADB, дата выхода из поддержки
    • План миграции: Наличие утверждённого плана обновления версии

    Риск: Уязвимости безопасности, деградация производительности, невозможность получить поддержку вендора при инцидентах.
    1
  • Топология кластера и количество сегментов
    Один из самых частых источников проблем в реальных кластерах — избыточное количество сегментов на хост.

    Каждый сегментный процесс потребляет память, файловые дескрипторы и CPU. При выполнении запроса мастер координирует все сегменты одновременно — чем их больше, тем выше накладные расходы на межсегментное взаимодействие. На практике мы видели кластеры с 30+ сегментами на хост, где тяжёлые запросы вызывали OOM и каскадное падение сегментов.

    Рекомендуемая формула: 1 сегмент на каждые 4 vCPU. Для хоста с 64 vCPU оптимально 16 сегментов.

    Что проверяем:

    • Сегментов на хост: Количество primary и mirror, соотношение к числу CPU
    • Топология зеркалирования: Group mirror vs spread mirror

    Риск: Исчерпание памяти при пиковой нагрузке, высокие накладные расходы на координацию, нестабильность кластера.
    2
  • Операционная система, управление памятью и пулер соединений
    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 на сегментных хостах, деградация всех запросов при свопировании, зависание кластера при шторме соединений.
    3
  • Резервное копирование
    Удивительно часто мы обнаруживаем кластеры с терабайтами данных без актуального резервного копирования. Причины разные: gpbackup установлен, но не настроен; есть cron-задачи, но они выполняют maintenance, а не полноценный backup; последний успешный бэкап был несколько месяцев назад.

    Для Greenplum используется нативный инструмент gpbackup/gprestore. Важно не просто наличие бэкапа, но и регулярная проверка возможности восстановления.

    Что проверяем:

    • Регулярность: Наличие и расписание gpbackup в crontab
    • Актуальность: Дата последнего успешного бэкапа
    • RTO/RPO: Целевое время и точка восстановления
    • Тест восстановления: Наличие процедуры проверки gprestore

    Риск: При отказе кластера или ошибке миграции без актуального бэкапа восстановление данных невозможно.
    4
  • Конфигурация Greenplum
    Параметры конфигурации Greenplum требуют тонкой настройки под конкретное железо и нагрузку. Мы проверяем ключевые параметры памяти, планировщика и отказоустойчивости.

    Память: shared_buffers (стартово 1 GB на сегмент), effective_cache_size (стартово 20–40 GB), statement_mem и max_statement_mem (память на запрос и потолок).

    Планировщик: random_page_cost (для SSD снижается до 1.1, но только после тестирования планов), параметры ORCA-оптимизатора.

    Отказоустойчивость FTS: gp_fts_probe_timeout и gp_fts_probe_retries — параметры системы мониторинга состояний сегментов. При высокой нагрузке на CPU сегменты могут не успевать отвечать на опросы FTS в стандартный тайм-аут, что приводит к ложным срабатываниям и каскадному падению. Мы рекомендуем увеличить timeout до 60 секунд и retries до 5.

    Что проверяем:
    • shared_buffers: Значение на сегмент, соответствие RAM
    • gp_vmem_protect_limit: Расчётное vs фактическое
    • statement_mem: Значение, соответствие resource groups
    • FTS параметры: gp_fts_probe_timeout и gp_fts_probe_retries
    • archive_mode: Статус WALarchiving (осознанно off или настроен)
    5
  • Безопасность и права доступа
    В этой области мы регулярно обнаруживаем системные проблемы, которые никак не проявляются в ежедневной работе — до первого инцидента.

    SUPERUSER. Типичная картина: SUPERUSER выдан не только gpadmin, но и сервисным аккаунтам (загрузчик данных, мониторинг) и персональным пользователям. Компрометация любого из них даёт полный контроль над кластером.

    pg_hba.conf. Метод аутентификации trust означает что любой процесс из указанной подсети подключается без пароля. Мы переводим аутентификацию на scram-sha-256.

    Объектные права. Широкие права INSERT/UPDATE/DELETE/TRUNCATE у аналитических пользователей — источник случайных и намеренных повреждений данных.

    PXF-секреты. Credentials к внешним источникам (HDFS, S3, JDBC) часто хранятся в открытом виде в конфигурационных файлах.

    Что проверяем:
    • SUPERUSER: Список ролей с привилегией суперпользователя
    • pg_hba.conf: Методы аутентификации, наличие trust
    • Объектные права: Матрица прав по ролям и схемам
    • PXF server profiles: Наличие секретов в открытом виде

    Риск: Компрометация сервисного аккаунта = полный доступ к кластеру. Подключение без пароля из любого процесса в подсети.
    6
  • Распределение данных и перекос (skew)
    Это один из наиболее специфичных для Greenplum аспектов аудита, который при этом оказывает прямое влияние на производительность.

    Greenplum распределяет строки таблицы между сегментами по ключу распределения (DISTRIBUTED BY). Если ключ выбран неудачно — данные концентрируются на нескольких сегментах, а остальные простаивают.
    Запрос выполняется со скоростью самого загруженного сегмента.

    Коэффициент перекоса (skew coefficient) выше 1.5 требует внимания. Мы видели таблицы с коэффициентом 700–900, где 50–65% всех данных находилось на 1–2 сегментах из 192.

    Отдельная проблема — таблицы с DISTRIBUTED RANDOMLY. Это допустимо для небольших справочников, но для крупных фактовых таблиц лишает Greenplum возможности выполнять collocated join без перемешивания данных по сети.

    Что проверяем:
    • Топ таблиц по skew: Коэффициент перекоса, размер, частота использования
    • DISTRIBUTED RANDOMLY: Список крупных таблиц без явного ключа
    • Соответствие ключей: Ключи распределения vs бизнес-логика запросов

    Риск: Запросы к перекошенным таблицам выполняются в разы медленнее вне зависимости от количества сегментов.
    7
  • Размер таблиц, секционирование и lifecycle
    В аналитических хранилищах таблицы растут быстро и без контроля. Мы анализируем топ таблиц по размеру в каждой базе и оцениваем наличие политик управления данными.

    Характерные находки:
    • Временные таблицы (mart_tmp, stg) в production базе объёмом десятки гигабайт без автоматической очистки
    • Dev-база сопоставимого с production размера — признак отсутствия lifecycle-политики
    • Системная база gpperfmon без retention policy — растёт неограниченно и в конечном счёте заполняет диск
    • Крупные таблицы без секционирования по дате — затрудняют архивирование и удаление устаревших данных

    Что проверяем:
    • Топ таблиц: Топ-20 по размеру в каждой базе
    • Секционирование: Наличие партиций по дате для исторических таблиц
    • Retention policy: Для gpperfmon, devdb, mart_tmp и временных схем
    8
  • Расширения и инструменты наблюдаемости
    pg_stat_statements — первое что мы проверяем. Без него невозможен анализ топ запросов по потреблению ресурсов. В большинстве аудируемых кластеров это расширение не установлено, хотя доступно.

    Мониторинг. Типичная картина — мониторинг собран из разнородных скриптов и cron-задач без единой observability-модели. Мы рекомендуем стек Prometheus + Grafana + greenplum_exporter + node_exporter как минимальную основу для production кластера.

    diskquota — расширение для ограничения дискового пространства по схемам и ролям. Особенно актуально при совместном использовании кластера prod и dev командами.

    Что проверяем:
    • pg_stat_statements: Установлено / не установлено в dwhprod и devdb
    • pxf / pxf_fdw: Регистрация в БД с external tables
    • Мониторинг: Наличие единого стека, покрытие метрик
    • diskquota: Наличие квот по схемам и ролям
    9
  • Ресурсные группы и изоляция нагрузки
    В Greenplum ресурсные группы (resource groups) позволяют изолировать различные типы нагрузки: ETL-процессы, BI-запросы, разработческие запросы, ad-hoc аналитику.

    Типичная картина в аудируемых кластерах: вся нагрузка идёт через default_group и admin_group. Это означает что тяжёлый ETL может полностью заблокировать интерактивные запросы аналитиков, а разработческий запрос без ограничений может занять всю память кластера.

    Что проверяем:
    • Текущие группы: Параметры CPU, памяти, concurrency
    • Назначение ролей: Какие роли в каких группах
    • Изоляция нагрузки: Разделение prod/dev/ETL/BI/ad-hoc
    10

От аудита к плану работ: четыре горизонта

Результаты аудита мы структурируем в план работ с четырьмя горизонтами планирования. Это позволяет разделить срочные меры от стратегических улучшений и дать команде чёткий приоритизированный список.
  • Горизонт 1: День X — Неотложные действия
  • Горизонт 2: До 30 дней Стабилизация
  • Горизонт 3: До 90 дней — Производительность
  • Горизонт 4: До года — Стратегические улучшения

Что получает клиент

  • Аудиторский отчёт
    детальный документ с описанием каждой найденной проблемы, её приоритетом, последствиями и рекомендацией. Для каждой рекомендации указано конкретное действие, а не абстрактный совет
  • Сводная карта рисков
    таблица всех проблем с оценкой приоритета и горизонтом устранения. Инструмент для технического менеджера: один взгляд — понятна полная картина
  • План работ
    чеклист задач по четырём горизонтам с ответственными и критериями готовности
  • Runbook для миграции
    если аудит выявил необходимость обновления версии: детальный операционный план с расписанием, процедурой отката и чеклистом готовности

Заключение

Аудит Greenplum — это не разовая проверка галочек. Это диагностика живой системы, которая помогает понять где кластер находится сейчас, какие риски существуют и что нужно сделать чтобы он работал надёжно и эффективно долгие годы.

Опыт показывает: большинство проблем в production кластерах Greenplum возникают не из-за ошибок в коде приложения, а из-за неправильной конфигурации — избыточного количества сегментов, неверных ключей распределения, отсутствия пулера соединений или неправильной настройки памяти. Всё это выявляется и устраняется в рамках аудита.
Узнайте больше о сопровождении баз данных и услугах мониторинга:
  • Глубокий технический анализ производительности, безопасности и архитектуры. Выявляем узкие места, даём чёткие рекомендации и план оптимизации.

    Подробнее
  • Круглосуточный контроль за состоянием вашей базы данных.
    Уведомления в случае отклонений, отчёты и превентивные меры. Обеспечиваем стабильность и безопасность.
    Подробнее
  • Компании, которые эффективно управляют своими данными, получают конкурентное преимущество.
    Подробнее
Нужна поддержка или планируете изменения в инфраструктуре?

Проблемы с производительностью, переход на PostgreSQL, нестабильная БД — у нас есть опыт, чтобы это исправить. Оставьте заявку — обсудим, чем можем помочь именно вам.
Оставить заявку