Быстрый старт MatrixBench

В этом документе описывается базовое использование MatrixBench и представлены следующие разделы:

  • Подготовка среды
  • Быстрый старт
  • Примеры
  • Часто задаваемые вопросы (FAQ)

Примечание!
mxbench теперь является проектом с открытым исходным кодом. Мы приветствуем ваш отзыв и вклад. Пожалуйста, нажмите здесь, чтобы прочитать файл README.

1 Подготовка среды

1.1 Кластер YMatrix

Вам необходим работающий кластер YMatrix.

1.2 Переменные окружения

Для работы MatrixBench требуются команды, такие как createdb, gpconfig и gpstop. Необходимо правильно настроить соответствующие переменные окружения, чтобы эти команды могли выполняться корректно.

Конкретно выполните source <YMatrix Installation directory>/greenplum_path.sh и установите следующие переменные окружения:

  • PGHOST
  • PGPORT
  • PGUSER
  • PGPASSWORD
  • PGDATABASE
  • MASTER_DATA_DIRECTORY

Кроме того, проверьте выполнение команд, таких как createdb mxbench, gpconfig -s log_rotation_size и gpstop -rai, чтобы убедиться в их корректной работе.

1.3 MatrixGate

Для загрузки данных необходимо использовать MatrixGate (сокращённо mxgate). mxgate — это высокопроизводительный сервер потоковой загрузки данных, расположенный в каталоге bin/mxgate директории установки YMatrix. Дополнительную информацию см. в разделе mxgate.

2 Быстрый старт

Чтобы быстро протестировать MatrixBench на персональной машине разработчика, вы можете запустить его с использованием файла конфигурации или аргументов командной строки.

Примечание!
mxbench поддерживает множество типов данных, функций и составных запросов. Приведённые ниже примеры не охватывают эти расширенные возможности. За подробностями обращайтесь к разделу Основные функции.

2.1 Запуск с файлом конфигурации

Используйте следующий файл конфигурации, назовите его mxbench.conf и выполните mxbench --config mxbench.conf.

Примечание!
Параметр benchmark-parallel должен соответствовать возможностям вашей машины. Рекомендуется устанавливать его значение меньше или равное количеству ядер процессора.

[database]
  db-database = "testdb1"
  db-master-port = 5432

[global]
  # Skip the prompt for resetting GUCs. If set to true, you are assumed to have already configured database parameters; mxbench will not modify them.
  skip-set-gucs = true

  table-name = "table1"

  # Directory for generated DDL, parameter recommendations, query statements, etc.
  workspace = "/tmp/mxbench"

  table-name = "table1"

[benchmark]
  benchmark = "telematics"

  [benchmark.telematics]
    # Array: query concurrency levels
    benchmark-parallel = [8]
    # Available queries: latest value for single tag, latest values for 10 tags, detailed data for single tag
    benchmark-run-query-names = ["SINGLE_TAG_DETAIL_QUERY"]
    # Number of times or duration for each query per round. Set benchmark-run-times to 0 to enable runtime:
    benchmark-run-times = 0
    benchmark-runtime-in-second = "30"

2.2 Запуск из командной строки

Вы также можете запустить MatrixBench из командной строки. Следующая команда эквивалентна запуску MatrixBench с указанным выше файлом конфигурации.

mxbench run \
  --db-database "testdb1" \
  --db-master-host "localhost" \
  --db-master-port 5432 \
  --db-user "mxadmin" \
  --skip-set-gucs \
  --table-name "table1" \
  --benchmark "telematics" \
  --benchmark-run-query-names "SINGLE_TAG_DETAIL_QUERY" \
  --benchmark-parallel 8 \
  --benchmark-run-times 0 \
  --benchmark-runtime-in-second 30

3 Примеры

В этом разделе приведены примеры запуска MatrixBench с использованием файлов конфигурации и аргументов командной строки.

3.1 Примеры файлов конфигурации

Рассмотрены два типичных сценария:

  • Генерация данных для очень широкой разреженной таблицы и выполнение смешанной нагрузки.
  • Создание таблицы из внешнего DDL-файла, загрузка данных из CSV-файла и пропуск этапа запросов.

3.1.1 Очень широкая разреженная таблица со смешанной нагрузкой

Очень широкая разреженная таблица содержит много столбцов (метрик), но большинство значений в каждой строке — NULL. Такой формат часто используется в сценариях, где требуется большое количество метрик для различных аналитических моделей.
Смешанная нагрузка означает одновременную загрузку данных и выполнение запросов. Загрузка данных осуществляется через mxgate.

  # Example File 1
[Database]
  db-database = "testdb2"
  db-master-port = 5432

[Global]
  # Enable progress monitoring (default is true)
  watch = true

  # Directory for generated DDL, best-practice parameter suggestions, query statements, etc.
  workspace = "/home/mxadmin/mxbench/workspace"

  # Whether data loading and querying occur simultaneously
  simultaneous-loading-and-query = true

  table-name = "table2"

  # Number of devices (tags)
  tag-num = 20000
  # Metric data type: supports int4, int8, float4, float8
  metrics-type = "float8"
  # Total number of metrics. If greater than 998, the first 997 are simple columns;
  # the rest are stored in JSON format in a column named 'ext'
  total-metrics-count = 5000

  # Start timestamp for data generation. ts-end must be later than ts-start, or an error occurs.
  ts-start = "2022-04-19 00:00:00"
  ts-end = "2022-04-19 00:01:00"

[Generator]
  generator = "telematics"

  [generator.telematics]
    # Number of records per device per timestamp. These are upserted into one tuple in the database.
    generator-batch-size = 1
    # Percentage of out-of-order data (1–100), with timestamps moved back by 1 hour
    generator-disorder-ratio = 0
    # Percentage of NULL values in generated data (1–100)
    generator-empty-value-ratio = 90
    # Data randomness level: OFF / S / M / L (default: OFF)
    generator-randomness = "OFF"

[Writer]
  writer = "stdin"

[Benchmark]
  benchmark = "telematics"

  [benchmark.telematics]
    # Array: query concurrency levels
    benchmark-parallel = [64]
    # Available queries: single-tag latest, multi-tag latest, single-tag detail
    benchmark-run-query-names = [ "SINGLE_TAG_LATEST_QUERY", "MULTI_TAG_LATEST_QUERY", "SINGLE_TAG_DETAIL_QUERY" ]
    # Number of times or duration for each query per round. Set to 0 to use runtime:
    benchmark-run-times = 0
    benchmark-runtime-in-second = "60"

3.1.2 Загрузка DDL и CSV из внешних путей (без запросов)

Этот сценарий предполагает чтение DDL-файла из указанного пользователем пути для создания таблицы, а затем загрузку данных из CSV-файла. Это повышает гибкость тестирования. Используйте этот пример, если у вас уже есть определённый DDL и подготовленные тестовые данные.
Запросы не выполняются, поэтому смешанной нагрузки нет.

  # Example File 2
[Database]
  db-database = "testdb3"
  db-master-port = 5432

[Generator]
  # Read data from CSV file
  generator = "file"

  [generator.file]
    generator-file-paths = ["/home/mxadmin/mxbench/data.csv"]

[Global]
  table-name = "table3"

  watch = true
  workspace = "/home/mxadmin/mxbench/workspace"
  ddl-file-path = "/home/mxadmin/mxbench/ddl.sql"

[Writer]
  writer = "stdin"

[Benchmark]
  benchmark = "nil"

3.2 Примеры командной строки

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

3.2.1 Очень широкая разреженная таблица со смешанной нагрузкой

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

Запуск MatrixBench с помощью первого примера файла конфигурации эквивалентен следующей команде:

$ mxbench run \
  --db-database "testdb2" \
  --db-master-port 5432 \
  --db-user "mxadmin" \
  --workspace "/home/mxadmin/mxbench/workspace" \
  --simultaneous-loading-and-query \
  --table-name "table2" \
  --tag-num 25000 \
  --metrics-type "float8" \
  --total-metrics-count 5000 \
  --ts-start "2022-04-19 00:00:00" \
  --ts-end "2022-04-19 00:01:00" \
  --generator "telematics" \
  --generator-batch-size 1 \
  --generator-disorder-ratio 0 \
  --generator-empty-value-ratio 90 \
  --generator-randomness "OFF" \
  --writer "stdin" \
  --benchmark "telematics" \
  --benchmark-run-query-names "SINGLE_TAG_LATEST_QUERY" \
  --benchmark-run-query-names "MULTI_TAG_LATEST_QUERY" \
  --benchmark-run-query-names "SINGLE_TAG_DETAIL_QUERY" \
  --benchmark-parallel 64 \
  --benchmark-run-times 0 \
  --benchmark-runtime-in-second 60

3.2.2 Загрузка DDL и CSV из внешних путей (без запросов)

Создание таблицы из внешнего DDL-файла и загрузка данных из CSV-файла. Такой подход повышает гибкость тестирования. Используйте этот пример, если у вас уже есть готовый DDL и тестовые данные.

Запуск MatrixBench со вторым примером файла конфигурации эквивалентен следующей команде:

$ mxbench run \
  --db-database "testdb3" \
  --db-master-port 5432 \
  --workspace "/home/mxadmin/mxbench/workspace" \
  --ddl-file-path "/home/mxadmin/mxbench/ddl.sql" \
  --table-name "table3" \
  --generator "file" \
  --generator-file-paths "/home/mxadmin/mxbench/data.csv" \
  --writer "stdin" \
  --benchmark "nil" 

Часто задаваемые вопросы (FAQ)

  1. Только запись, без запросов
    Установите параметр benchmark в значение nil.

  2. Только запросы, без записи
    Установите параметр generator в значение nil.

  3. Одновременное выполнение загрузки данных и запросов
    В глобальной конфигурации установите параметр simultaneous-loading-and-query в значение true.

  4. Генерация и экспорт CSV-файлов с данными
    В глобальной конфигурации установите параметр dump в значение true. Сгенерированные файлы будут находиться в подкаталоге unix-timestamp внутри каталога workspace.

  5. Просмотр сгенерированных DDL и SQL-запросов
    Проверьте подкаталог unix-timestamp в каталоге workspace.

  6. Использование пользовательского DDL
    Укажите абсолютный путь к DDL-файлу в параметре ddl-file-path в глобальных настройках.

  7. Использование пользовательских запросов
    Укажите свои собственные запросы в параметре benchmark-custom-queries в рамках телематического бенчмарка, заключив их в двойные кавычки (""). Подстановка случайных параметров не поддерживается.

  8. Сохранение текущих параметров базы данных вместо применения рекомендованных
    Когда MatrixBench обнаруживает расхождения между текущими и рекомендованными параметрами, он предлагает сбросить и перезапустить базу данных. Введите N, чтобы сохранить текущие параметры. MatrixBench затем уточнит, следует ли продолжить. Введите Y, чтобы продолжить.

  9. Каковы требования к допустимости параметров?
    В глобальной конфигурации:

  • ts-end должен быть позже, чем ts-start;
  • table-name и schema-name не должны быть пустыми;
  • tag-num должен быть больше 0;
  • ts-step-in-second не должен быть равен 0.

Примечание!
Полный список параметров командной строки см. в разделе Параметры командной строки MatrixBench.
За информацией о ключевых возможностях обращайтесь к разделу Основные функции MatrixBench.
Подробности о мониторинге прогресса и статистических отчётах — в разделе Понимание прогресса и отчётов MatrixBench.