Go простое приложение | Тестирование | Настройки postgres

По работе появлиась необходимость поправить скрипт на Go. Когда-то был начат курс, были пройдены основы Go, но на языке так писать не приходилось.

Go приложение

Думаю основы и стандартную практику по Go найти проще всего, поэтому здесь практический пример работы с БД (ссылка 1) и организации кода для работы с бд (ссылка 2)
Пара ссылок для понимания как должно быть это на Go

  1. (рус.) Go и SQL базы данных (на англ. Practical Persistence in Go: SQL Databases)
  2. (англ.) Practical Persistence in Go: Organising Database Access

Тестирование

Поскольку приложение которое мне нужно было доработать — это простенькое АПИ, но немного с некорректным использованием подключения к БД (не закрывались подключения к бд), то после доработки мне необходимо было убедиться что все что работало, работает так же как и до доработки. Для этого были написаны пара просты тестов для проверки факта получения данных от апи. И дополнительно проведены нагрузочные тесты через JMeter от Apache.
Как им пользоваться можно почитать в статье: 10 шагов для запуска тестирования производительности с Apache JMeter.

Исправление проблем

В ходе тестирования были выявлены некоторые проблемы с Базой данных, понятное дело, что проверка на производительность — это всегда совокупность "железа", настроек ПО и эффективности кода. В данном случае для малого количества коннектов появлялась ошибка: FATAL: sorry, too many clients already за это могут отвечать два параметра базы данных: max_connections и shared_buffers. Посмотреть их значения можно так:

SHOW max_connections;
-- или
SHOW ALL; --посмотреть все настройки
-- или через выборку из таблицы с настройками
SELECT *
FROM   pg_settings
WHERE  name = 'max_connections';
-- или
SELECT current_setting('max_connections');

см. How to test my ad-hoc SQL with parameters in Postgres query window

Понятное дело, что данную нагрузку необходимо балансировать, но это вопрос другой статьи и вообще речь идет о тестировании. Поэтому, чтобы тестирование было объективнее, необходимо было поставить настройки БД такими же как на сервере, на котором это приложение крутится. Поскольку мой postgres был запущен через docker, то в docker-compose.yml можно прокинуть команды:

      - "postgres"
      - "-c"
      - "max_connections=384"
      - "-c"
      - "shared_buffers=327680"

Leave a comment

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.