Рекомендации по настройке БД при установке ТестОпс

Последние изменения: 04.07.2024

Требования и рекомендации к базе данных

Этот раздел описывает рекомендации, применимые для версии ТестОпс 5.

База данных в производственной системе

Производительность базы данных, развернутой в поде с PVC или работающей в контейнере, значительно хуже, чем у базы данных установленной на ВМ или отдельном сервере для профиля нагрузки, создаваемой автоматизированными тестами. Такое развертывание приемлемо для демонстрационных целей или этапа PoC, но для производственной системы с загрузкой результатов автоматизированных тестов база данных должна быть развернута как отдельный кластер с требованиями, описанными далее в этой статье.

Еще раз: База данных должна быть развернута как отдельное решение вне деплоя ТестОпс. Это требование очень важно так как БД установленная в контейнере или запущенная в поде Кубернетес по производительности значительно уступает БД, которая развернута как отдельное решение на ВМ или сервере на том профиле нагрузки, который создается ТестОпс.

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

Требования к оборудованию для хранения базы данных

База данных должна использовать SSD Желательно использовать SSD энтерпрайз класса. ТестОпс создает значительную нагрузку на базу данных при обработке результатов тестов и выполнении запросов к данным, и HDD как хранилище не способен справиться с этой нагрузкой. 

В случае использования HDD производительность системы будет со временем ухудшаться (через 6-8 месяцев использования), и в какой-то момент времени ответы базы данных для статистики будут занимать все доступные соединения из-за длительного времени отклика, и общая производительность системы наряду с пользовательским опытом будет значительно страдать.

Проблемы с производительностью ТестОпс при использовании HDD и развёртывании БД в контейнере или поде Кубернетес не могут быть решены службой поддержки. Мы официально не поддерживаем такой способ установки.

Требования к версии PostgreSQL

С 1 марта 2024 года ТестОпс поддерживает только версию PostgreSQL 15 и выше.

Это означает, что мы не проводим никаких тестов в процессах разработки и тестирования с PostgreSQL отличными от указанной выше и мы не можем гарантировать, что ТестОпс сможет работать или запускаться с версиями PostgreSQL, отличными от 15.

Рекомендации по параметрам PostgreSQL

ТестОпс активно использует базы данных и хранилища объектов при обработке результатов автоматизированных тестов и генерации виджетов на панели управления проектами, поэтому существуют некоторые рекомендации, основанные на нашем опыте работы с сильно загруженными экземплярами ТестОпс в средах наших клиентов.

Параметр random_page_cost

Настройка параметра random_page_cost значительно влияет на производительность базы данных PostgreSQL и зависит от типа используемых дисков для хранения.

  • в случае использования SSD используйте значение 1.5.

  • в случае использования очень быстрых SSD, таких как AWS gp2/gp3 с высоким IOPS, используйте значение 1.2.

  • в случае использования HDD используйте значение по умолчанию 4.0.

  • в целом избегайте использования HDD в качестве хранилища базы данных.

  • не используйте значение по умолчанию 4.0 при использовании SSD.

Параметр work_mem

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

Новое значение параметра `work_mem` потребует перезапуска базы данных.

Следующая формула используется для расчета work_mem:

work_mem = db_available_ram x 0.2 / max_sessions_count

где

max_sessions_count = количество реплик сервиса тестопс * connection_pool_size_per_instance

connection_pool_size_per_instance по умолчанию равно 10.

Пример расчета work_mem

  • выделено 64 ГБ оперативной памяти для вашей базы данных

  • вас есть 10 реплик экземпляров службы отчетов с размером пула соединений равным 10

вам требуется установить

work_mem = 64000 * 0.2 / 100 = 128 МБ

параметр effective_io_concurrency

effective_io_concurrency должен быть установлен

- 64 в случае использования SSD

- 1 в случае использования HDD (значение по умолчанию). Еще раз напомним, что использование HDD крайне нежелательно

Параметр shared_buffers

Мы рекомендуем установить shared_buffers на уровне не менее 50% доступной оперативной памяти. Для лучшей производительности можно установить до 75% доступной оперативной памяти, однако убедитесь, что вы мониторите состояние оперативной памяти, и при необходимости вам потребуется скорректировать параметр в сторону меньших значений (например, обратно до 50%) в случае высокой конкуренции за ресурсы оперативной памяти.

AWS RDS

Если вы используете AWS RDS, убедитесь, что IOPS не ограничен.

Для клиентов среднего/большого размера AWS RDS должно обеспечивать минимум 3 000 IOPS, что эквивалентно 1 000 ГБ хранилища gp2.

Создание базы данных для сервиса ТестОпс

ТестОпс использует одну базу данных как для управления пользователями, так и для хранения всех данных, связанных с тестами.

1. Войдите в систему как администратор базы данных и подключитесь в БД

# переключиться на пользователя postgres на сервере базы данныхsudo su postgres
# подключиться к серверу базы данных
psql

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

2. Создание базы данных

В целях этого примера мы используем `testops` как имя пользователя базы данных и как имя базы данных.

# создать нового пользователя базы данныхCREATE USER testops with encrypted password 'PaSSw0rd';
# создать базу данных
CREATE DATABASE testops TEMPLATE template0 ENCODING 'utf8' LC_COLLATE = 'en_US.UTF-8' LC_CTYPE = 'en_US.UTF-8';
# подключиться к базе данных
\c testops
# предоставить все привилегии пользователю testops на базе данных testops
GRANT ALL PRIVILEGES ON database testops to testops;
# предоставить все привилегии на публичную схему
GRANT ALL PRIVILEGES ON SCHEMA public TO testops;
# выйти из БД
\q

Схема базы данных

Эта возможность доступна, начиная с версии ТестОпс 4.23.x и далее.

В подавляющем большинстве случаев настройки, описанные ниже, не нужны и могут привести к непредсказуемым результатам и невозможности поддержки, если выполнены неправильно. Пожалуйста, не изменяйте схему по умолчанию, если правила вашей организации не диктуют иное.

По умолчанию служба ТестОпс использует схему базы данных `public`. Если правила вашей организации не позволяют использовать схему `public` базы данных, это поведение можно переопределить.

Схема базы данных должна быть определена перед развертыванием и оставаться неизменной в течение всего времени использования системы.

### Использование альтернативной схемы базы данных

Перед развертыванием ТестОпс добавьте схему базы данных, определенную вашими политиками

Мы будем использовать `default` в качестве примера.

Владельцем должен быть пользователь, который используется в конфигурации подключения к базе данных TestOps

Пользователь базы данных должен иметь все разрешения на базу данных

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

GRANT ALL ON SCHEMA default TO testops;

2. Перед развертыванием ТестОпс добавьте следующие параметры конфигурации к стандартной конфигурации ТестОпс

Для сервиса testops

ALLURE_DB_SCHEMA=default

Развертывание в Kubernetes

Вам нужно обновить файл `values.yaml` для раздела `env.open` следующим образом:

env:
  open:
    ALLURE_DB_SCHEMA: default


Развертывание с docker compose

Вам нужно обновить файл `docker-compose.yml` следующим образом.

services:
  testops:
<...>
    environment:
      ALLURE_DB_SCHEMA: default
<...>


Развертывание пакетами Линукс

- /opt/testops/conf/testops.conf

Следующая строка должна быть добавлена:

ALLURE_DB_SCHEMA=default

Помогла ли вам статья?