Перейти к основному содержанию
`Ctrl`+`K`

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

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

Тестирование проводится с помощью утилиты 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 TEMPLATE template0;

Завершите сессию 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` – максимальное число повторных попыток транзакции в случае ошибки.