Тестирование производительности сервера
Contents
Тестирование производительности сервера#
Производительность системы зависит от используемого оборудования.
Тестирование проводится с помощью утилиты 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
– максимальное число повторных попыток транзакции в случае ошибки.