Тестирование производительности¶
В данном разделе приведена информация о тестировании производительности Picodata.
Для замера производительности используется утилита Pgbench, которая подходит как для PostgreSQL, так и Picodata. Основой теста выступает TPC-B, используемый в Pgbench по умолчанию.
Системные требования¶
Убедитесь, что в вашей системе установлены следующие компоненты:
- Python 3.12 или новее
- Poetry (система управления зависимостями Python)
- Pgbench (инструмент тестирования СУБД)
При необходимости установите отсутствующие компоненты с помощью пакетного менеджера ОС.
Использование стандартного теста TPC-B¶
Предварительные действия¶
Для установки и запуска стандартного теста TPC-B требуется работающий кластер Picodata.
Читайте далее:
Также, необходимо иметь в кластере пользователя postgres, обладающего правами на работу с таблицами. Пример создания и настройки пользователя:
CREATE USER postgres WITH PASSWORD 'Passw0rd';
GRANT CREATE TABLE TO postgres;
GRANT READ TABLE TO postgres;
GRANT WRITE TABLE TO postgres;
Читайте далее:
Установка, инициализация и запуск теста¶
Файлы теста находятся в директории benchmark/tpcb в git-репозитории Picodata.
-
Откройте окно/вкладку терминала в корневой директории исходного кода Picodata и установите зависимости теста:
poetry install -
Инициализируйте тест:
poetry run python benchmark/tpcb/init.py \ "postgres://postgres:Passw0rd@127.0.0.1:4327?sslmode=disable" \ --scale 10 -
Запустите тест:
pgbench \ "postgres://postgres:Passw0rd@127.0.0.1:4327?sslmode=disable" \ --scale 10 \ --time 30 \ --client 200 \ --protocol prepared \ --jobs 1 --progress 1 --no-vacuum
Изменение параметров теста¶
При необходимости задайте собственные параметры для приведённой выше команды pgbench:
- данные пользователя. Укажите имя и пароль пользователя, под которым вы подключаетесь к инстансу Picodata
- адрес подключения. В примере выше используется инстанс, принимающий подключения по протоколу PostgreSQL по адресу
127.0.0.1:4327. Убедитесь, что в вашем случае указано актуальное значение этого параметра (см. instance.pg.listen) - коэффициент масштабирования (
--scale 10). Используйте значение, указанное при инициализации теста. При использовании более высокого значенияscale, в кластере может возникнуть ошибка выделения памяти. Для обхода этой проблемы следует увеличить значение параметра instance.memtx.memory или instance.vinyl.memory (в зависимости от используемого движка) - длительность теста (
--time 30). Для снижения погрешностей иногда есть смысла увеличить время - количество одновременных клиентов (
--client 200). В зависимости от сценария, оптимальное значение может меняться в большую или меньшую сторону - использовать подготовленные запросы (prepared statements,
--protocol prepared). Этот режим позволяет добиться максимальной производительности теста
Примечание
Описание всех параметров можно найти в официальной документации Pgbench
Использование собственных тестов¶
Утилита Pgbench позволяет тестировать произвольные SQL-запросы, переданные в параметре --file.
См. также:
Пример запуска теста с явным указанием скрипта:
pgbench \
"postgres://postgres:Passw0rd@127.0.0.1:4327?sslmode=disable" \
--file script.sql \
--scale 10 \
--time 30 \
--client 200 \
--protocol prepared \
--jobs 1 --progress 1 --no-vacuum
Пример скрипта по умолчанию для TPC-B:
\set aid random(1, 100000 * :scale)
\set bid random(1, 1 * :scale)
\set tid random(1, 10 * :scale)
\set delta random(-5000, 5000)
BEGIN;
UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
Примечание
При использовании собственного скрипта может
потребоваться изменить содержимое файла init.py или предусмотреть
собственный способ инициализации теста. Файлы поставляемого с
Picodata теста производительности находятся в директории
benchmark/tpcb в git-репозитории Picodata.