Skip to content

Инструмент для бенчмаркинга PostgreSQL в облаке

Notifications You must be signed in to change notification settings

h3llo-cloud/bench-cloud-pg

Repository files navigation

Инструмент для бенчмаркинга PostgreSQL в облаке

Как запустить бенчмаркинг в облаке:

  1. Создайте базу данных Postgres и виртуальную машину с публичным IPv4 в облаке в одной зоне доступности, объедините их в общую приватную подсеть
  2. На виртуальную машину скачайте этот репозиторий
  3. Отредактируйте файл config.py внесите в него данные для подключения базы данных (одной или нескольких)
  4. Убедитесь, что необходимые зависимости установлены командой python setup_benchmark.py
    • возможно предстоит установить python, pip и postgres на виртуальную машину
    • вероятно потребуется установить pip3 install pandas numpy plotly psycopg2-binary scipy
  5. Проверьте, что соединение с базой данных установлено командой python test_connections.py
  6. Удалите файл pg_benchmark_results_*_state.json если он есть, чтобы запустить бенчмаркинг с нуля (если файл существует, то запуск бенмаркинга продолжится с места предыдущей остановки)
  7. Запустите бенчмаркинг командой python main.py
  8. После того, как бенчмаркинг завершится, скачайте файл с результатами бенчмаркинга командой из локального терминала командой scp root@111.111.111.111:~/db_test/pg_benchmark_results_*.json ~/pgtestresults, где root@111.111.111.111 - это публичный IPv4 адрес вашей виртуальной машины
  9. В файле 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

Конфигурация

Конфигурация базы данных config.py

Отредактируйте раздел 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
  • При проблемах с подключением проверьте сетевое подключение и настройки брандмауэра
  • Если инициализация не удалась, убедитесь, что пользователь базы данных имеет соответствующие разрешения

About

Инструмент для бенчмаркинга PostgreSQL в облаке

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published