使用 DEFLATE_QPL 构建 Clickhouse
-
确保您的主机机器满足 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
:该文件列出所有 星型模式基准测试 的查询。allin1_ssb.sh
:此 Shell 脚本自动执行所有基准测试工作流。
database_files
表示将根据 lz4/deflate/zstd 编解码器存储数据库文件。
自动运行星型模式基准测试:
完成后,请检查此文件夹中的所有结果:./output/
如果遇到失败,请手动按照以下部分运行基准测试。
定义
[CLICKHOUSE_EXE] 表示 clickhouse 执行程序的路径。
环境
[IAA 自检]
预期输出如下:
如果没有输出,意味着 IAA 尚未准备好工作。请再次检查 IAA 设置。
生成原始数据
使用 dbgen
生成 1 亿行数据,参数为:
-s 20
期望在 ./benchmark_sample/rawdata_dir/ssb-dbgen
下输出如 *.tbl
的文件:
数据库设置
使用 LZ4 编解码器设置数据库
在此处,您应从控制台看到消息 Connected to ClickHouse server
,这意味着客户端成功与服务器建立连接。
完成 星型模式基准测试 中提到的以下三步
- 在 ClickHouse 中创建表
- 插入数据。这里应使用
./benchmark_sample/rawdata_dir/ssb-dbgen/*.tbl
作为输入数据。 - 将“星型模式”转换为非规范化的“扁平模式”
使用 IAA Deflate 编解码器设置数据库
完成与 above lz4 相同的三步
使用 ZSTD 编解码器设置数据库
完成与 above 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)服务器与各自的客户端相连。
- 一个插槽的核心需要平均分配并分别分配给服务器。
- 对于多实例,必须为每个编解码器创建新文件夹,并按照与单实例类似的步骤插入数据集。
存在两个不同之处:
- 对于客户端,您需要在创建表和插入数据时使用指定的端口启动 clickhouse。
- 对于服务器,您需要使用指定端口的特定 xml 配置文件启动 clickhouse。所有针对多实例的自定义 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
这里,client_stressing_test.py 的最后一个参数: 2
表示实例的数量。对于更多的实例,您需要将其替换为值:3 或 4。该脚本支持最多 4 个实例。
现在应该按预期输出三个日志:
如何检查性能指标:
我们关注 QPS,请搜索关键字: QPS_Final
并收集统计信息。
4 个实例的基准测试设置与上述 2 个实例类似。 我们建议使用 2 个实例的基准测试数据作为最终报告进行审查。
提示
每次在启动新 clickhouse 服务器之前,请确保没有后台的 clickhouse 进程在运行,请检查并杀掉旧的进程:
通过将 ./client_scripts/queries_ssb.sql 中的查询列表与官方 星型模式基准测试 进行比较,您会发现有 3 个查询未包含:Q1.2/Q1.3/Q3.4。这是因为这些查询的 CPU 利用率 % 非常低 < 10%,这意味着无法显示性能差异。