Перейти к основному содержимому

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

Примечание

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

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

База данных должна быть развернута как отдельное решение вне ТестОпс. Производительность базы данных, находящейся в поде с PVC (Persistent Volume Claim) или в контейнере, ухудшается при высокой нагрузке, вызванной автотестами. Такое развертывание приемлемо для демонстрационных целей или при проверке концепции (PoC), но для производственной среды с результатами автотестов база данных должна быть развернута как отдельный кластер.

Требования к аппаратному обеспечению для базы данных

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

Проблемы с производительностью ТестОпс, работающего на HDD, не могут быть решены службой поддержки.

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

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

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

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

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

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

random page cost

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

Возможные значения параметра:

  • При использовании SSD установите 1.5.
    • Для очень быстрых SSD, таких как AWS gp2/gp3 с высокой IOPS, установите 1.2.
    • Не используйте с SSD значение по умолчанию 4.0.
  • При использовании HDD установите значение по умолчанию 4.0.
    • Всеми средствами избегайте использования HDD в качестве хранилища базы данных.

work_mem

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

Важно

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

Формула для расчета work_mem:

work_mem = db_available_ram x 0.2 / num_of_testops_service_instances x connection_pool_size_per_instance,

где

db_available_ram — количество оперативной памяти, доступной базе данных,

num_of_testops_service_instances — количество инстансов сервиса testops,

connection_pool_size_per_instance — размер пула соединений для инстанса, по умолчанию равен 10.

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

При исходных данных:

  • 64 ГБ оперативной памяти для базы данных;
  • 10 инстансов сервиса testops;
  • размер пула соединений, равный 10,

значение work_mem = 64000 * 0.2 / 100 = 128 МБ.

effective io concurrency

Значение для параметра effective_io_concurrency:

  • 64 при использовании SSD;
  • 1 при использовании 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.

    В примере ниже 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;
    # предоставьте все привилегии на схему public
    GRANT ALL PRIVILEGES ON SCHEMA public TO testops;
    \q

Альтернативная схема базы данных

Примечание

Функция доступна, начиная с версии ТестОпс 4.23.x и выше.

Внимание

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

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

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

Установка альтернативной схемы базы данных

  1. Перед развертыванием ТестОпс добавьте схему базы данных в соответствии с вашими правилами.
    • В качестве примера мы используем схему default.
    • Владельцем должен быть пользователь, который используется в конфигурации подключения к базе данных TestOps.
    • Пользователь базы данных должен иметь все разрешения для базы данных.
    • Пользователь базы данных должен иметь все привилегии для созданной схемы (GRANT ALL ON SCHEMA default TO testops;).
  2. Перед развертыванием ТестОпс добавьте в его конфигурацию параметр для сервиса testopsALLURE_DB_SCHEMA=default.

Необходимо обновить файл values.yaml:

  env:
open:
ALLURE_DB_SCHEMA: default
<...>

Разделение пулов соединений

Примечание

Информация актуальна только для развертываний в Kubernetes.

По умолчанию ТестОпс использует один пул соединений для всех типов запросов к базе данных. Его размер определяется параметром datasources.mainDatasource.appMaxDBConnection.

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

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

    Чтобы включить пул загрузки:

    1. Установите параметру datasources.uploaderDatasource.enabled значение true.
    2. Установите параметр datasources.uploaderDatasource.appMaxDBConnection на максимальное количество соединений для загрузки.
  • Аналитический пул, если он включен, будет использоваться для некоторых запросов к агрегированным данным только для чтения. Обычно для аналитики используется отдельная база данных с настроенной репликацией между двумя базами данных.

    Чтобы включить аналитический пул:

    1. Установите параметру datasources.analyticsDatasource.enabled значение true.
    2. Установите параметр datasources.analyticsDatasource.appMaxDBConnection на максимальное количество аналитических соединений.
    3. Укажите учетные данные PostgreSQL в параметре datasources.analyticsDatasource.* аналогично основным настройкам базы данных.