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

参考