Skip to main content
  • Убедитесь, что ваша хост-машина соответствует предварительным требованиям QPL
  • deflate_qpl включен по умолчанию при сборке через cmake. Если вы случайно изменили этот параметр, ещё раз проверьте флаг сборки: ENABLE_QPL=1
  • Общие требования приведены в общих инструкциях по сборке ClickHouse

Список файлов

В папках 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.

Автоматический запуск бенчмарка для схемы «звезда»:

После завершения проверьте все результаты в этой папке: ./output/ Если возникнет ошибка, вручную запустите бенчмарк, как указано в разделах ниже.

Определение

[CLICKHOUSE_EXE] обозначает путь к исполняемому файлу clickhouse.

Окружение

[Проверьте себя по 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 и установите для регулятора частоты 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 server обязательно убедитесь, что не запущены фоновые процессы ClickHouse; проверьте это и завершите старый процесс:
Сравнив список запросов в ./client_scripts/queries_ssb.sql с официальным Star Schema Benchmark, вы увидите, что 3 запроса отсутствуют: Q1.2/Q1.3/Q3.4 . Это связано с тем, что для этих запросов загрузка CPU очень низкая — < 10%, поэтому на них невозможно продемонстрировать различия в производительности.
Последнее изменение 3 июля 2026 г.