Подготовка к нагрузочному тестированию#
Раздел используется перед запуском нагрузочного тестирования на инфраструктуре заказчика. До начала прогона администратор заказчика должен подтвердить, что контур наблюдаем, доступен для диагностики, а выделенные ресурсы соответствуют согласованному сайзингу.
Если обязательные проверки не выполнены, результаты нагрузочного тестирования нельзя считать воспроизводимыми: при деградации будет невозможно отделить ограничения приложения от проблем инфраструктуры, мониторинга, СУБД или генератора нагрузки.
Обязательные проверки#
Требование |
Что должно быть подтверждено |
Документация |
|---|---|---|
Внутренняя Grafana доступна и получает все штатные метрики. |
Администратор может открыть Grafana, выбрать нужный временной диапазон, увидеть данные по pod’ам, JVM, сессиям, БД, NFS и системным компонентам. |
|
Доступны метрики активных сессий. |
На дашборде |
|
Доступны метрики PostgreSQL, включая показатели записи. |
В мониторинге видны состояние СУБД, активные подключения. |
|
Есть доступ к СУБД через DBeaver или другой SQL-клиент. |
Учетная запись позволяет подключиться к целевой БД, выполнить диагностические запросы ниже и, по согласованию, сбросить статистику перед прогоном. |
|
Работает Pyroscope. |
В Grafana доступен раздел |
|
Есть права на выполнение JEXL из Global. |
Тестовая учетная запись или сервисный пользователь может выполнять необходимые JEXL-скрипты через интерфейс или REST API |
|
Работает статистика активных запросов и накопительная статистика SQL. |
Доступны |
Установка PostgreSQL: расширения, Основные SQL-запросы для анализа |
Ресурсы кластера, pod’ов и СУБД соответствуют сайзингу. |
CPU, RAM, диски, сетевые каналы, количество pod’ов, лимиты и requests не ниже значений, рассчитанных и согласованных для сценария теста. |
Требования к нарезанию машин в кластере, Настройка групп ресурсов, Пороги метрик |
NFS/S3-хранилище бизнес-объектов доступно и поставлено на мониторинг. |
Global Server может читать и записывать в основное и дополнительные хранилища; в мониторинге видны доступность и заполнение NFS, а для S3 подтверждены доступность endpoint и права на bucket. |
Добавление NFS-томов в Global Server, Настройка файлового хранилища по протоколу S3, Kubernetes: метрики кластера |
Работает GlobalScheduler. |
Планировщик запущен, выполняет тестовое задание, приватный ключ в контуре и публичный ключ в настройках Global согласованы. |
|
Работает QueueWalker, если он участвует в сценарии теста. |
Обходчик очередей включен, имеет токен/секрет, корректный |
Настройка книги ресурсов queuewalker, Конфигурация GlobalConfiguration |
Сервер JMeter не является узким местом теста. |
Генератор нагрузки имеет запас CPU/RAM/сети/диска, не использует swap, не размещен на узлах приложения или СУБД и во время пилотного прогона не достигает собственных лимитов. |
Дополнительные проверки#
Требование |
Что должно быть подтверждено |
Документация |
|---|---|---|
Настроены внешние метрики СУБД в Zabbix, Prometheus или VictoriaMetrics. |
Помимо внутренней Grafana есть внешний контур мониторинга для долгосрочного хранения и анализа состояния СУБД за весь период теста. |
|
Управление кластером выполняется через |
Установка, обновление комплекта приложения, переключение версий и служебные операции выполняются штатной утилитой, а не ручным изменением ресурсов без фиксации в конфигурации. |
Основные SQL-запросы для анализа#
Выполняйте запросы на тестовом контуре и только по согласованию с ответственным администратором БД. Запросы сброса статистики очищают накопленные счетчики, поэтому обычно их выполняют непосредственно перед началом прогона, чтобы получить чистый интервал измерений.
Проверка расширений#
select extname, extversion
from pg_extension
where extname in ('pg_stat_statements', 'pgpro_stats', 'pg_stat_kcache')
order by extname;
Сброс общей статистики PostgreSQL#
select pg_stat_reset();
PostgreSQL: pg_stat_statements#
select pg_stat_reset();
select a.wait_event, count(*)
from pg_stat_activity a
where a.state = 'active'
group by a.wait_event;
select a.query, count(*)
from pg_stat_activity a
where a.state = 'active'
group by a.query;
select pg_stat_statements_reset();
select t.total_exec_time, t.query, t.*
from pg_stat_statements t
order by t.total_exec_time desc;
Postgres Pro: pgpro_stats#
В поставках Postgres Pro вместо pg_stat_statements может использоваться расширение pgpro_stats.
В этом случае основное представление называется pgpro_stats_statements, а сброс выполняется функцией
pgpro_stats_statements_reset().
Описание расширения приведено в документации Postgres Pro:
pgpro_stats.
По умолчанию сброс статистики может выполнять суперпользователь; для сервисной учетной записи нужно выдать право
отдельно.
select pgpro_stats_statements_reset();
select t.total_exec_time, t.query, t.*
from pgpro_stats_statements t
order by t.total_exec_time desc;
Проверка сервера JMeter#
Перед основным прогоном выполните короткий пилотный запуск с тем же профилем нагрузки и меньшей длительностью. Во время пилотного запуска проверьте сам сервер JMeter:
CPU не должен стабильно превышать 70-80%;
RAM должна иметь запас, swap должен быть выключен или не использоваться;
сетевой канал не должен упираться в лимит пропускной способности или packet loss;
диск должен выдерживать запись логов и результатов, если включено подробное логирование;
генератор нагрузки должен быть вынесен за пределы узлов приложения, СУБД и мониторинга.
Если сервер JMeter достигает собственных лимитов, результаты теста отражают ограничения генератора нагрузки, а не производительность тестируемого контура.