Сборка 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 Benchmark.allin1_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]
При первом выполнении вставки или запроса из клиента, консоль сервера ClickHouse ожидается вывести этот лог:
Если вы не увидели этого, а вместо этого видите другой лог:
Это означает, что устройства IAA не готовы, вам нужно повторно проверить настройки IAA.
Бенчмарк с одним экземпляром
- Перед началом бенчмарка отключите C6 и установите режим частоты процессора на
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 экземплярa соответственно. Если вы не назначите его, порт по умолчанию 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. Это связано с тем, что % использования CPU очень низок < 10% для этих запросов, что означает, что они не могут продемонстрировать различия в производительности.