Тестирование производительности сервера#

Производительность системы зависит от используемого оборудования.

Тестирование проводится с помощью утилиты pgbench, которая входит в комплект поставки СУБД Postgres

Настройка теста pgBench#

Подключитесь терминалом к серверу СУБД под административным пользователем

Переключитесь на пользователя «postgres»

su postgres

Подключитесь локально утилитой psql к СУБД Postgres

psql

Создайте новую БД, в качестве владельца укажите созданного пользователя

CREATE DATABASE "pgbenchDb" WITH OWNER = postgres ENCODING = 'UTF8' LC_COLLATE = 'ru_RU.UTF-8' LC_CTYPE = 'ru_RU.UTF-8' CONNECTION LIMIT = -1;

Завершите сессию psql

\q

Инициализируйте бд для проведения теста

pgbench -i -s 50 pgbenchDb

Выполните тестирование быстродействия

pgbench -c 100 -j 100 -t 10000 pgbenchDb

Через несколько минут утилита выдаст результат.

Пример результата теста

pgbench (16.1 (Debian 16.1-1.pgdg110+1))
starting vacuum...end.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 50
query mode: simple
number of clients: 100
number of threads: 100
maximum number of tries: 1
number of transactions per client: 10000
number of transactions actually processed: 1000000/1000000
number of failed transactions: 0 (0.000%)
latency average = 1.935 ms
initial connection time = 56.060 ms
tps = 51677.092175 (without initial connection time)

Интерпретация результатов#

  • latency average – среднее время отклика транзакции (мс).

  • tps – транзакций в секунду (главный показатель производительности).

  • number of failed transactions – процент неуспешных транзакций (должен быть близок к 0).

  • initial connection time – время на установку соединений.

Основные ключи pgbench#

  • -i – инициализация базы данных (создаёт таблицы и заполняет их тестовыми данными).

  • -s N – масштаб теста (увеличивает объём данных пропорционально N).

  • -c N – число клиентов (соединений), которые будут одновременно выполнять транзакции.

  • -j N – число потоков, обслуживающих клиентов. Обычно рекомендуется равным количеству CPU/ядрам.

  • -t N – число транзакций на клиента. Общее число транзакций = c × t.

  • -T N – длительность теста в секундах. Вместо количества транзакций тест ограничивается временем.

  • -S – режим только SELECT (нагрузка только на чтение).

  • -N – режим без обновлений балансов (исключает UPDATE из теста).

  • -P N – вывод статистики каждые N секунд.

  • -M {simple|extended|prepared} – режим выполнения SQL:

    • simple – обычные запросы (по умолчанию),

    • extended – расширенный протокол,

    • prepared – подготовленные выражения (ближе к реальным приложениям).

  • --progress-timestamp – вывод прогресса с отметкой времени.

  • --protocol {simple|extended} – протокол обмена с сервером.

  • --rate N – ограничение нагрузки в N транзакций в секунду (TPS).

  • --aggregate-interval N – усреднение результатов каждые N секунд (удобно для долгих тестов).

  • --random-seed {time|random|fixed} – управление генерацией случайных чисел (для воспроизводимости).

  • --max-tries N – максимальное число повторных попыток транзакции в случае ошибки.