Медленная работа PostgreSQL в Docker
Для стандартизации процесса разработки и тестирования мы решили поместить все сторонние тулзы и библиотеки в контейнеры. В том числе сделали контейнер и для PostgreSQL. Запускаем его при помощи docker compose используя вот такой файл:
version: '3.8'
services:
postgresql:
image: prj-postgresql:latest
container_name: prj-postgresql
restart: unless-stopped
stdin_open: true
tty: true
command: postgres -c config_file=/etc/postgresql/postgresql.conf
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=****
ports:
- "5432:5432"
volumes:
- type: bind
source: $HOME/docker-volumes/postgres
target: /var/lib/postgresql/data
- type: bind
source: ./postgresql.conf
target: /etc/postgresql/postgresql.conf
Имидж prj-postgres был создан при помощи докер-файла для PostgreSQL 15.5-alpine3.19. Для создания базы данных и восстановления ее из бекапа использовался внешний pgAdmin4. После начала работы с образом мы увидели, что скорость работы базы совершенно неудовлетворительная. Тест при помощи pg_bench для 50 юзеров и двух потоков на продолжительности в 10 минут показал 60 транзакций в секунду, в то время как постгрес вне контейнера на таком же тесте показал 8000 транзакций секунду. Далее мы попробовали подсоединить базу от докерного постгреса к обычному и прогнать тест. В итоге получили значение даже меньшее - 51 транзакция в секунду.
Мы предполагаем, что проблема где-то в создании базы данных. Может, кто-нибудь подскажет, в чем заключается наша ошибка? Мои подозрения связаны с использованием внешнего пгАдмина, но это странно.
UPD При создании базы внутри контейнера скорость увеличилась до 3200 транзакций в секунду. Это терпимо, но неприемлемо из-за удаления базы при остановке контейнера.