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

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

  • Подготовка окружения
  • Быстрый старт
  • Примеры
  • Часто задаваемые вопросы

Примечание!
В настоящее время 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 на своём персональном компьютере, вы можете запустить MatrixBench с помощью конфигурационных файлов или командной строки.

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

2.1 Запуск через конфигурационный файл

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

Примечание!
Параметр benchmark-parallel следует настраивать в соответствии с производительностью машины; рекомендуется устанавливать значение, не превышающее количество ядер процессора.


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

[global]

Skip the step of asking whether to reset the parameters. If set to true, you think you have set the database parameters and mxbench will no longer process it

skip-set-gucs = true

table-name = "table1"

The directory where the generated DDL, parameter setting suggestions, query statements (Query) and other files are stored

workspace = "/tmp/mxbench"

table-name = "table1"

[benchmark] benchmark = "telematics"

[benchmark.telematics]

Array, query concurrency

benchmark-parallel = [8]
# 3 queries provided: latest value of bicycle, latest value of 10 vehicles, and detailed bicycles
benchmark-run-query-names = ["SINGLE_TAG_DETAIL_QUERY" ]
# The number of times or time of running each Query in each round, to make the time take effect, you need to set the number of times to 0, as follows:
benchmark-run-times = 0
benchmark-runtime-in-second = "30"
### 2.2 Запуск через командную строку

Вы также можете запустить MatrixBench с помощью командной строки. Выполнение следующей команды эквивалентно запуску MatrixBench с использованием указанного выше конфигурационного файла.
```bash
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 Примеры

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

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

Здесь представлены примеры конфигурационных файлов для двух типичных сценариев:

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

3.1.1 Генерация данных для ультраширокой разреженной таблицы и выполнение гибридной нагрузки

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

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

[Global]
  # Turn on progress viewing function, the default is true
  watch = true

  # The directory where generated DDL, parameter best practice suggestions, query statements and other files are stored
  workspace = "/home/mxadmin/mxbench/workspace"

  # Whether data writing and query are carried out simultaneously
  simultaneous-loading-and-query = true

  table-name = "table2"

  # Number of equipment
  tag-num = 20000
  # Metric data type, supporting four types: int4, int8, float4, float8
  metrics-type = "float8"
  # Number of indicators. If the number of indicators is greater than 998, the first 997 are used as simple columns.
  # Others are stored as JSON in a column named ext
  total-metrics-count = 5000

  # The start timestamp of the data generated, ts-end must be later than ts-start, otherwise an error will be reported.
  ts-start = "2022-04-19 00:00:00"
  ts-end = "2022-04-19 00:01:00"

[Generator]
  generator = "telematics"

  [generator.telematics]
    # The indicators of each device at each time point are uploaded in several pieces of data, and finally the database is UPSERT into 1 Tuple
    generator-batch-size = 1
    # The generation ratio of delayed uploaded data (1~100), the timestamp is pushed forward for 1 hour
    generator-disorder-ratio = 0
    # The null rate of generated data (1~100)
    generator-empty-value-ratio = 90
    # The randomness of the generated data is several levels, with OFF / S / M / L, and the default "OFF" is turned off
    generator-randomness = "OFF"

[Writer]
  writer = "stdin"

[Benchmark]
  benchmark = "telematics"

  [benchmark.telematics]
    # Array, query concurrency
    benchmark-parallel = [64]
    # 3 queries provided: latest value of bicycle, latest value of 10 vehicles, and detailed bicycles
    benchmark-run-query-names = [ "SINGLE_TAG_LATEST_QUERY", "MULTI_TAG_LATEST_QUERY", "SINGLE_TAG_DETAIL_QUERY" ]
    # The number of times or time of running each query statement in each round, so that the time needs to be effective, set the number of times to 0, as follows:
    benchmark-run-times = 0
    benchmark-runtime-in-second = "60"

3.1.2 Чтение DDL-файла для создания таблицы из внешнего пути, чтение CSV-файла для записи данных и отсутствие запросов

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

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

[Generator]
  # Read data from a 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 Примеры командной строки

В этом разделе представлены примеры команд запуска для двух типичных сценариев:

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

3.2.1 Генерация данных для ультраширокой разреженной таблицы и выполнение гибридной нагрузки

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

Запуск MatrixBench с использованием примера конфигурационного файла 1 эквивалентен запуску 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-файла и записываются. Этот пример повышает автономность тестирования с помощью mxbench. Если у вас уже есть определённый DDL и подготовленные тестовые данные, следуйте данному примеру. В этом примере операции запроса не выполняются, поэтому гибридная нагрузка отсутствует.

Запуск MatrixBench с использованием примера конфигурационного файла 2 эквивалентен запуску 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"

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

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

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

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

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

  5. Хотите просмотреть сгенерированные DDL и запросы
    Каталог unix-timestamp находится в директории, указанной параметром workspace.

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

  7. Хотите выполнить пользовательский запрос
    Введите пользовательский запрос в параметр benchmark-custom-queries в разделе telematics Benchmark, при этом содержимое должно быть заключено в "". Случайные параметры не поддерживаются.

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

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

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

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