Как запустить бенчмаркинг в облаке:
- Создайте базу данных Postgres и виртуальную машину с публичным IPv4 в облаке в одной зоне доступности, объедините их в общую приватную подсеть
- На виртуальную машину скачайте этот репозиторий
- Отредактируйте файл
config.pyвнесите в него данные для подключения базы данных (одной или нескольких) - Убедитесь, что необходимые зависимости установлены командой
python setup_benchmark.py- возможно предстоит установить python, pip и postgres на виртуальную машину
- вероятно потребуется установить
pip3 install pandas numpy plotly psycopg2-binary scipy
- Проверьте, что соединение с базой данных установлено командой
python test_connections.py - Удалите файл
pg_benchmark_results_*_state.jsonесли он есть, чтобы запустить бенчмаркинг с нуля (если файл существует, то запуск бенмаркинга продолжится с места предыдущей остановки) - Запустите бенчмаркинг командой
python main.py - После того, как бенчмаркинг завершится, скачайте файл с результатами бенчмаркинга командой из локального терминала командой
scp root@111.111.111.111:~/db_test/pg_benchmark_results_*.json ~/pgtestresults, гдеroot@111.111.111.111- это публичный IPv4 адрес вашей виртуальной машины - В файле
benchmark_analysis.ipynbукажите путь к файлу с результатами бенчмаркинга (файлу .json)
Вот краткое описание того, что делает каждый Python-файл в проекте:
-
config.py: Определяет конфигурацию для инструмента бенчмаркинга, включая конфигурации для различных облачных провайдеров, параметры бенчмаркинга (масштабный коэффициент, количество клиентов, количество потоков, типы рабочей нагрузки) и пользовательские SQL-рабочие нагрузки.
-
setup_benchmark.py: Утилита настройки, которая помогает пользователям настроить свою среду для запуска инструмента бенчмаркинга. Она проверяет установку pgbench, проверяет необходимые пакеты Python, создает шаблоны для переменных окружения и файлов конфигурации, а также предоставляет скрипт быстрого запуска.
-
test_connections.py: Тестирует подключения к базам данных PostgreSQL, указанным в конфигурации.
-
main.py: Служит основной точкой входа для инструмента бенчмаркинга. Он организует весь процесс бенчмаркинга, включая проверку предварительных условий, выполнение бенчмарков, расчет статистики, нормализацию результатов и генерацию отчетов.
-
benchmark_integrity.py: Скрипт для проверки и исправления целостности файлов результатов и состояния бенчмаркинга. Он проверяет, имеет ли каждый бенчмарк, отмеченный как завершенный в файле состояния, соответствующий результат в файле результатов, и может исправлять несоответствия путем обновления файла состояния.
-
execution.py: Содержит функции для выполнения бенчмарка pgbench с различными конфигурациями. Он обрабатывает такие задачи, как проверка предварительных условий, тестирование подключения, подготовка базы данных, запуск бенчмарка и сохранение результатов.
-
incremental_reporting.py: Обрабатывает инкрементальную отчетность для инструмента бенчмаркинга. Включает функции для инкрементального сохранения результатов бенчмаркинга, обновления состояния бенчмаркинга, проверки завершения бенчмарка и поиска последних файлов результатов и состояния.
-
preparation.py: Содержит основные функции для подготовки и настройки баз данных перед бенчмаркингом. Включает функции для проверки установки pgbench, тестирования подключения к базе данных и подготовки базы данных путем инициализации таблиц pgbench.
-
preparation_utils.py: Предоставляет вспомогательные функции для подготовки и настройки баз данных перед запуском бенчмарков. Включает функции для тестирования сетевой задержки, создания файлов пользовательской рабочей нагрузки, очистки файлов пользовательской рабочей нагрузки, вакуумирования базы данных и удаления таблиц pgbench.
-
test_benchmark_config.py: Тестирует конфигурацию бенчмарка путем ее проверки, печати сводки и симуляции запуска бенчмарка.
- Python 3.6+
- Инструменты клиента PostgreSQL (pgbench)
- Доступ к одному или нескольким облачным сервисам баз данных PostgreSQL
Отредактируйте раздел cloud_configs в скрипте для настройки подключений к вашим базам данных PostgreSQL:
cloud_configs = [
{
"name": "Мой облачный провайдер",
"host": "your-instance.yourcoolcloudprovider.ru",
"port": 5432,
"database": "postgres",
"user": "postgres_user",
"password": "postgres_password",
"instance_type": "db.large",
"version": "16",
"rub_per_hour": 10.0,
"connection_pooling": False,
"region": "ru-msk-1"
},
# Добавьте больше провайдеров при необходимости
]Настройте параметры бенчмаркинга в разделе benchmark_config:
benchmark_config = {
"scale_factor": 100, # Размер тестовой базы данных
"client_counts": [1, 2, 4, 8, 16, 32, 64], # Одновременные клиенты базы данных
"thread_counts": [1, 2, 4, 8], # Рабочие потоки
"run_time": 60, # Продолжительность теста в секундах
"iterations": 3, # Итерации для статистической значимости
# ... другие параметры
}Параметр scale_factor особенно важен, так как он определяет размер тестовой базы данных:
-
В pgbench масштабный коэффициент определяет количество строк в таблицах:
- pgbench_accounts: 100,000 × scale_factor строк
- pgbench_branches: 1 × scale_factor строк
- pgbench_tellers: 10 × scale_factor строк
- pgbench_history: изначально пустая, заполняется во время тестирования
-
Масштабный коэффициент 1 создает базу данных размером примерно 15-20 МБ
-
Масштабный коэффициент 100 создает базу данных размером примерно 1.5-2 ГБ
-
Масштабный коэффициент 1000 создает базу данных размером примерно 15-20 ГБ
Выберите масштабный коэффициент, соответствующий вашим потребностям тестирования и возможностям ваших экземпляров базы данных. Большие масштабные коэффициенты обеспечивают более реалистичное тестирование, но требуют больше хранилища и времени инициализации.
- Если pgbench не найден, убедитесь, что инструменты клиента PostgreSQL установлены и находятся в вашем PATH
- При проблемах с подключением проверьте сетевое подключение и настройки брандмауэра
- Если инициализация не удалась, убедитесь, что пользователь базы данных имеет соответствующие разрешения