В этом документе описывается базовое использование MatrixBench и представлены следующие разделы:
Примечание!
mxbench теперь является проектом с открытым исходным кодом. Мы приветствуем ваш отзыв и вклад. Пожалуйста, нажмите здесь, чтобы прочитать файл README.
Вам необходим работающий кластер YMatrix.
Для работы MatrixBench требуются команды, такие как createdb, gpconfig и gpstop. Необходимо правильно настроить соответствующие переменные окружения, чтобы эти команды могли выполняться корректно.
Конкретно выполните source <YMatrix Installation directory>/greenplum_path.sh и установите следующие переменные окружения:
Кроме того, проверьте выполнение команд, таких как createdb mxbench, gpconfig -s log_rotation_size и gpstop -rai, чтобы убедиться в их корректной работе.
Для загрузки данных необходимо использовать MatrixGate (сокращённо mxgate). mxgate — это высокопроизводительный сервер потоковой загрузки данных, расположенный в каталоге bin/mxgate директории установки YMatrix. Дополнительную информацию см. в разделе mxgate.
Чтобы быстро протестировать MatrixBench на персональной машине разработчика, вы можете запустить его с использованием файла конфигурации или аргументов командной строки.
Примечание!
mxbench поддерживает множество типов данных, функций и составных запросов. Приведённые ниже примеры не охватывают эти расширенные возможности. За подробностями обращайтесь к разделу Основные функции.
Используйте следующий файл конфигурации, назовите его 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"
Вы также можете запустить 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
В этом разделе приведены примеры запуска MatrixBench с использованием файлов конфигурации и аргументов командной строки.
Рассмотрены два типичных сценария:
Очень широкая разреженная таблица содержит много столбцов (метрик), но большинство значений в каждой строке — 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"
Этот сценарий предполагает чтение 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"
Два типичных сценария продемонстрированы с использованием аргументов командной строки.
Очень широкая разреженная таблица содержит много столбцов, но мало данных в каждой строке. Смешанная нагрузка подразумевает параллельную загрузку данных и выполнение запросов через 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
Создание таблицы из внешнего 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"
Только запись, без запросов
Установите параметр benchmark в значение nil.
Только запросы, без записи
Установите параметр generator в значение nil.
Одновременное выполнение загрузки данных и запросов
В глобальной конфигурации установите параметр simultaneous-loading-and-query в значение true.
Генерация и экспорт CSV-файлов с данными
В глобальной конфигурации установите параметр dump в значение true. Сгенерированные файлы будут находиться в подкаталоге unix-timestamp внутри каталога workspace.
Просмотр сгенерированных DDL и SQL-запросов
Проверьте подкаталог unix-timestamp в каталоге workspace.
Использование пользовательского DDL
Укажите абсолютный путь к DDL-файлу в параметре ddl-file-path в глобальных настройках.
Использование пользовательских запросов
Укажите свои собственные запросы в параметре benchmark-custom-queries в рамках телематического бенчмарка, заключив их в двойные кавычки (""). Подстановка случайных параметров не поддерживается.
Сохранение текущих параметров базы данных вместо применения рекомендованных
Когда MatrixBench обнаруживает расхождения между текущими и рекомендованными параметрами, он предлагает сбросить и перезапустить базу данных. Введите N, чтобы сохранить текущие параметры. MatrixBench затем уточнит, следует ли продолжить. Введите Y, чтобы продолжить.
Каковы требования к допустимости параметров?
В глобальной конфигурации:
ts-end должен быть позже, чем ts-start;table-name и schema-name не должны быть пустыми;tag-num должен быть больше 0;ts-step-in-second не должен быть равен 0.Примечание!
Полный список параметров командной строки см. в разделе Параметры командной строки MatrixBench.
За информацией о ключевых возможностях обращайтесь к разделу Основные функции MatrixBench.
Подробности о мониторинге прогресса и статистических отчётах — в разделе Понимание прогресса и отчётов MatrixBench.