Databend 是一款开源、弹性、低成本,基于对象存储也可以做实时分析的新式数仓。
部署Databend
参照 Docs - Deploy Databend 完成部署。
安装 hyperfine
根据 hyperfine - installation 的提示安装 hyperfine。
设计基准测试
根据Continuous Benchmarking - Vectorized Execution Benchmarking
设计SQL语句,列举10条SQL保存到文件bench.sql, 如下:
1
2
3
4
5
6
7
8
9
10
|
SELECT avg(number) FROM numbers_mt(100000000000);
SELECT sum(number) FROM numbers_mt(100000000000);
SELECT min(number) FROM numbers_mt(100000000000);
SELECT max(number) FROM numbers_mt(100000000000);
SELECT count(number) FROM numbers_mt(100000000000);
SELECT sum(number+number+number) FROM numbers_mt(100000000000);
SELECT sum(number) / count(number) FROM numbers_mt(100000000000);
SELECT sum(number) / count(number), max(number), min(number) FROM numbers_mt(100000000000);
SELECT number FROM numbers_mt(10000000000) ORDER BY number DESC LIMIT 10;
SELECT max(number), sum(number) FROM numbers_mt(1000000000) GROUP BY number % 3, number % 4, number % 5 LIMIT 10;
|
使用测试脚本简化流程,benchmark.sh 范本
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
#!/bin/bash
WARMUP=3
RUN=10
export script="hyperfine -w $WARMUP -r $RUN"
script=""
function run() {
port=$1
sql=$2
result=$3
script="hyperfine -w $WARMUP -r $RUN"
while read SQL; do
n="-n \"$SQL\" "
s="echo \"$SQL\" | mysql -h127.0.0.1 -P$port -uroot -s"
script="$script '$n' '$s'"
done <<< $(cat $sql)
script="$script --export-markdown $result"
echo $script | bash -x
}
run "$1" "$2" "$3"
|
- 使用 -w/–warmup & WARMUP 在实际基准测试之前运行 3 次程序执行来预热。
- 使用 -r/–runs & RUN 要求执行 10 次基准测试。
- 允许指定 Databend MySQL 兼容服务的端口。
- 允许指定输入的 SQL 文件,以及输出时的 Markdown 文件。
运行出错可以添加参数 --show-output
输出详细结果
运行测试
MySQL 兼容服务的端口是 3307 ,基准测试用到的 SQL 文件为 bench.sql , 预期的输出在 databend-hyperfine.md 。
1
|
./benchmark.sh 3307 bench.sql databend-hyperfine.md
|
参考