Сборка ClickHouse с DEFLATE_QPL
-
Убедитесь, что ваша хост-машина соответствует необходимым для QPL требованиям
-
deflate_qpl включен по умолчанию во время сборки cmake. В случае, если вы случайно изменили это, пожалуйста, проверьте флаг сборки: ENABLE_QPL=1
-
Для общих требований, пожалуйста, обратитесь к общим инструкциям по сборке ClickHouse
Запуск бенчмарка с DEFLATE_QPL
Список файлов
Папка benchmark_sample
в qpl-cmake содержит примеры запуска бенчмарка с помощью python-скриптов:
client_scripts
содержит python-скрипты для выполнения типичного бенчмарка, например:
client_stressing_test.py
: Python-скрипт для стресс-теста запросов с [1~4] серверами.queries_ssb.sql
: Файл, в котором перечислены все запросы для Star Schema Benchmarkallin1_ssb.sh
: Этот shell-скрипт выполняет весь процесс бенчмарка автоматически.
database_files
означает, что он будет хранить файлы базы данных в соответствии с кодеками lz4/deflate/zstd.
Запуск бенчмарка автоматически для Star Schema:
После завершения проверьте все результаты в этой папке: ./output/
В случае ошибки, пожалуйста, выполните бенчмарк вручную, как указано в следующих разделах.
Определение
[CLICKHOUSE_EXE] обозначает путь к исполняемой программе clickhouse.
Окружение
- CPU: Sapphire Rapid
- Требования к ОС см. в Системных требованиях для QPL
- Установка IAA см. в Конфигурации ускорителя
- Установите модули python:
[Самопроверка для IAA]
Ожидаемый вывод, как показано ниже:
Если вы не видите вывода, это означает, что IAA не готов к работе. Пожалуйста, повторно проверьте установку IAA.
Генерация исходных данных
Используйте dbgen
для генерации данных объемом 100 миллионов строк с параметрами:
-s 20
Файлы вида *.tbl
ожидаются в папке ./benchmark_sample/rawdata_dir/ssb-dbgen
:
Настройка базы данных
Настройте базу данных с кодеком LZ4
Здесь вы должны увидеть сообщение Connected to ClickHouse server
в консоли, что означает, что клиент успешно установил соединение с сервером.
Завершите три шага, указанные в Star Schema Benchmark:
- Создание таблиц в ClickHouse
- Вставка данных. Здесь должны использоваться
./benchmark_sample/rawdata_dir/ssb-dbgen/*.tbl
как входные данные. - Преобразование "звездной схемы" в денормализованную "плоскую схему"
Настройте базу данных с кодеком IAA Deflate
Завершите три шага так же, как для lz4 выше.
Настройте базу данных с кодеком ZSTD
Завершите три шага так же, как для lz4 выше.
[самопроверка] Для каждого кодека (lz4/zstd/deflate), пожалуйста, выполните запрос ниже, чтобы убедиться, что базы данных созданы успешно:
Вы ожидаете увидеть следующий вывод:
[Самопроверка для IAA Deflate codec]
При первом выполнении вставки или запроса от клиента ожидается, что консоль сервера Clickhouse напечатает этот лог:
Если вы никогда не находили этот вывод, но видите другой лог, как указано ниже:
Это означает, что устройства IAA не готовы, вам следует проверить установку IAA еще раз.
Бенчмарк с одним экземпляром
- Перед началом бенчмарка отключите C6 и установите частоту CPU на
performance
- Чтобы устранить влияние памяти на перекрестные сокеты, мы используем
numactl
, чтобы привязать сервер к одному сокету, а клиента к другому сокету. - Один экземпляр означает одиночный сервер, соединенный с одиночным клиентом.
Теперь запустите бенчмарк для LZ4/Deflate/ZSTD соответственно:
LZ4:
IAA deflate:
ZSTD:
Теперь три лога должны быть выведены, как ожидалось:
Как проверить метрики производительности:
Мы сосредоточимся на QPS, пожалуйста, поищите ключевое слово: QPS_Final
и соберите статистику.
Бенчмарк с несколькими экземплярами
- Чтобы уменьшить влияние памяти на слишком много потоков, мы рекомендуем запустить бенчмарк с несколькими экземплярами.
- Мультии экземпляр означает несколько (2 или 4) серверов, соединенных с соответствующим клиентом.
- Ядра одного сокета должны быть распределены поровну и назначены серверам соответственно.
- Для мультии экземпляров обязательно создайте новую папку для каждого кодека и вставьте набор данных, следуя аналогичным шагам, как для одиночного экземпляра.
Существует 2 отличия:
- На стороне клиента вам нужно запускать clickhouse с назначенным портом во время создания таблицы и вставки данных.
- На стороне сервера вам нужно запускать clickhouse с конкретным XML-файлом конфигурации, в котором был назначен порт. Все настраиваемые XML-файлы для мультии экземпляров были предоставлены в ./server_config.
Предположим, что в каждом сокете 60 ядер и возьмем 2 экземпляра в качестве примера. Запустите сервер для первого экземпляра LZ4:
ZSTD:
IAA Deflate:
[Запустите сервер для второго экземпляра]
LZ4:
ZSTD:
IAA Deflate:
Создание таблиц и вставка данных для второго экземпляра
Создание таблиц:
Вставка данных:
- [TBL_FILE_NAME] представляет название файла, соответствующего регулярному выражению: *.tbl в папке
./benchmark_sample/rawdata_dir/ssb-dbgen
. --port=9001
обозначает назначенный порт для экземпляра сервера, который также определен в config_lz4_s2.xml/config_zstd_s2.xml/config_deflate_s2.xml. Для еще большего количества экземпляров вам нужно будет заменить его на значение: 9002/9003, которые означают s3/s4 экземпляр соответственно. Если вы не назначите его, порт по умолчанию будет 9000, который уже использует первый экземпляр.
Бенчмарк с 2 экземплярами
LZ4:
ZSTD:
IAA deflate
Здесь последний аргумент: 2
в client_stressing_test.py обозначает количество экземпляров. Для большего количества экземпляров вам нужно заменить его на: 3 или 4. Этот скрипт поддерживает до 4 экземпляров.
Теперь три лога должны быть выведены, как ожидалось:
Как проверить метрики производительности:
Мы сосредоточимся на QPS, пожалуйста, поищите ключевое слово: QPS_Final
и соберите статистику.
Настройка бенчмарка для 4 экземпляров аналогична настройке для 2 экземпляров выше. Мы рекомендуем использовать данные бенчмарка для 2 экземпляров в качестве окончательного отчета для обзора.
Советы
Каждый раз перед запуском нового сервера ClickHouse, пожалуйста, убедитесь, что нет работающих фоновых процессов ClickHouse, проверьте и завершите старые:
Сравнив список запросов в ./client_scripts/queries_ssb.sql с официальным Star Schema Benchmark, вы найдете, что 3 запроса не включены: Q1.2/Q1.3/Q3.4. Это связано с тем, что использование ЦП % для этих запросов очень низкое < 10%, что означает, что они не могут продемонстрировать различия в производительности.