Требования и рекомендации для базы данных
Раздел описывает рекомендации для ТестОпс версии 5.x.
База данных в производственной среде
База данных должна быть развернута как отдельное решение вне ТестОпс. Производительность базы данных, находящейся в поде с PVC (Persistent Volume Claim) или в контейнере, ухудшается при высокой нагрузке, вызванной автотестами. Такое развертывание приемлемо для демонстрационных целей или при проверке концепции (PoC), но для производственной среды с результатами автотестов база данных должна быть развернута как отдельный кластер.
Требования к аппаратному обеспечению для базы данных
База данных должна использовать SSD для хранения данных. Предпочтительно использовать SSD уровня enterprise. ТестОпс создает значительную нагрузку на базу данных при обработке результатов тестов и выполнении запросов данных, и HDD не способны справиться с такой нагрузкой. При использовании HDD производительность системы будет снижаться с течением времени (через 6-8 месяцев использования). В дальнейшем ответы базы данных на статистические запросы будут потреблять все доступные соединения из-за долгого времени отклика, что негативно скажется на общей производительности системы и пользовательском опыте.
Проблемы с производительностью ТестОпс, работающего на HDD, не могут быть решены службой поддерж ки.
Требования к версии PostgreSQL
ТестОпс поддерживает базу данных 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
.
- Для очень быстрых SSD, таких как AWS gp2/gp3 с высокой IOPS, установите
- При использовании 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.
Создание базы данных
ТестОпс использует одну базу данных для управления пользователями и хранения всех данных по тестам.
-
Авторизуйтесь как администратор базы данных.
# переключитесь на пользователя postgres на сервере базы данных
sudo su postgres
# подключитесь к серверу базы данных
psqlВы можете использовать любой другой способ подключения, который вам удобен.
-
Создайте базу данных.
ВажноРекомендуется изменить как минимум пароль для пользователя 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
, это поведение можно изменить.
Схема базы данных должна быть определена до развертывания и должна оставаться неизменной во время использования системы.
Установка альтернативной схемы базы данных
- Перед развертыванием ТестОпс добавьте схему базы данных в соответствии с вашими правилами.
- В качестве примера мы используем схему
default
. - Владельцем должен быть пользователь, который используется в конфигурации подключения к базе данных TestOps.
- Пользователь базы данных должен иметь все разрешения для базы данных.
- Пользователь базы данных должен иметь все привилегии для созданной схемы (
GRANT ALL ON SCHEMA default TO testops;
).
- В качестве примера мы используем схему
- Перед развертыванием ТестОпс добавьте в его конфигурацию параметр для сервиса testops —
ALLURE_DB_SCHEMA=default
.
- Kubernetes
- Docker Compose
- DEB/RPM
Необходимо обновить файл values.yaml:
env:
open:
ALLURE_DB_SCHEMA: default
<...>
Необходимо обновить файл docker-compose.yml:
services:
testops:
<...>
environment:
<...>
ALLURE_DB_SCHEMA: default
<...>
Необходимо обновить файл testops.conf по адресу /opt/testops/conf/testops.conf, добавив строку:
ALLURE_DB_SCHEMA=default
Разделение пулов соединений
Информация актуальна только для развертываний в Kubernetes.
По умолчанию ТестОпс использует один пул соединений для всех типов запросов к базе данных. Его размер определяется параметром datasources.mainDatasource.appMaxDBConnection
.
В среде с высокой нагрузкой может понадобиться не только увеличить общее количество соединений, но и убедиться, что более длительные операции не занимают ресурсы у более быстрых и важных. Это можно сделать, включив отдельные пулы загрузки и аналитические пулы. Аналитический пул также можно настроить для использования альтернативного источника данных.
-
Пул загрузки, если он включен, будет использоваться при загрузке новых результатов тестов в ТестОпс.
Чтобы включить пул загрузки:
- Установите параметру
datasources.uploaderDatasource.enabled
значениеtrue
. - Установите параметр
datasources.uploaderDatasource.appMaxDBConnection
на максимальное количество соединений для загрузки.
- Установите параметру
-
Аналитический пул, если он включен, будет использоваться для некоторых запросов к агрегированным данным только для чтения. Обычно для аналитики используется отдельная база данных с настроенной репликацией между двумя базами данных.
Чтобы включить аналитический пул:
- Установите параметру
datasources.analyticsDatasource.enabled
значениеtrue
. - Установите параметр
datasources.analyticsDatasource.appMaxDBConnection
на максимальное количество аналитических соединений. - Укажите учетные данные PostgreSQL в параметре
datasources.analyticsDatasource.*
аналогично основным настройкам базы данных.
- Установите параметру