文档下载建议反馈入口

  • kwdb-tsbs 概述
  • 源码编译
  • 使用举例

kwdb-tsbs 性能测试

kwdb-tsbs 概述

kwdb-tsbs 是一款基于 Timescaleopen in new window Time Series Benchmark Suite (TSBS)open in new window 的时序数据库性能基准测试工具,用于生成数据集,然后对 KaiwuDB 数据库的读写性能进行基准测试。kwdb-tsbs 支持时序数据生成、数据写入、查询处理、自动化结果汇总统计等功能。

功能特性

  • 数据生成:支持自定义设备数量、数据采样时间范围和数据采样间隔。
  • 数据导入:提供针对 KaiwuDB 优化的批量写入工具。
  • 查询场景:提供标准的时序查询模板。
  • 自动化测试:一键执行完整的 KaiwuDB 性能基准测试流程。

测试场景

说明

目前,kwdb-tsbs 只支持 DevOps cpu-only 测试场景。

DevOps cpu-only 测试场景只关注 CPU 指标。该测试场景模拟对服务器 CPU 监控生成的时序数据,针对每台设备(CPU)记录其 10 个 CPU 指标。

下表列出 kwdb-tsbs 在 cpu-only 测试场景中支持的查询类型。

查询类型描述
single-groupby-1-1-1对单台主机的单个指标进行简单汇总(MAX)。每 5 分钟汇总一次,持续 1 小时。
single-groupby-1-1-12对单台主机的单个指标进行简单汇总(MAX)。每 5 分钟汇总一次,持续 12 小时。
single-groupby-1-8-1对八台主机的单个指标进行简单汇总(MAX)。每 5 分钟汇总一次,持续 1 小时。
single-groupby-5-1-1对单台主机的五个指标进行简单汇总(MAX)。每 5 分钟汇总一次,持续 1 小时。
single-groupby-5-1-12对单台主机的五个指标进行简单汇总(MAX)。每 5 分钟汇总一次,持续 12 小时。
single-groupby-5-8-1对八台主机的五个指标进行简单汇总(MAX)。每 5 分钟汇总一次,持续 1 小时。
cpu-max-all-1汇总 1 小时内单台主机每小时的所有 CPU 指标。
cpu-max-all-8汇总 1 小时内八台主机每小时的所有 CPU 指标。
double-groupby-1对时间和主机进行汇总,得出 24 小时内每台主机每小时单个 CPU 指标的平均值。
double-groupby-5对时间和主机进行汇总,得出 24 小时内每台主机每小时 5 个 CPU 指标的平均值。
double-groupby-all对时间和主机进行汇总,得出 24 小时内每台主机每小时所有 CPU 指标(10 个)的平均值。
high-cpu-all所有主机的某个指标超过阈值的所有读数。
high-cpu-1特定主机的某个指标超过阈值的所有读数。
lastpoint每台主机的最后读数。
groupby-orderby-limit在随机选定的时间终点前,按时间维度汇总的最后 5 个读数。

源码编译

前提条件

  • 已安装 Go 1.23 或更高版本。

安装部署

  1. 克隆仓库。

    git clone https://gitee.com/kwdb/kwdb-tsbs.git
    cd kwdb-tsbs
    
  2. 构建应用。

    make
    

编译和安装成功后的文件清单如下:

kwdb-tsbs/
└── bin/
    ├── tsbs_generate_data      # 数据生成工具
    ├── tsbs_load_kwdb          # 数据导入工具
    ├── tsbs_generate_queries   # 查询生成工具
    └── tsbs_run_queries_kwdb   # 查询执行工具

使用举例

使用 kwdb-tsbs 进行基准测试包括 4 个阶段:数据生成、数据导入、查询生成、和查询执行。

生成数据

kwdb-tsbs 提供数据生成工具(tsbs_generate_data),为 KaiwuDB 数据库生成一个伪 CSV 文件。其中,每行表示一条记录,首项为操作类型(1 或 3)。

  • 1:表示插入数据(包括数据值和标签值),格式为 1,ptag名,字段数量,插入的数据
  • 3:表示写入标签值,格式为 3,表名,ptag名,标签值

示例:

1,host_0,11,(1451606400000,58,2,24,61,22,63,6,44,80,38,'host_0')
3,cpu,host_0,('host_0','eu-central-1','eu-central-1a','6','Ubuntu15.10','x86','SF','19','1','test')

以下示例生成一个数据文件,可用于将数据批量加载到 KaiwuDB 数据库中。

./tsbs_generate_data \
  --format="kwdb" \
  --use-case="cpu-only" \
  --seed=123 \
  --scale=100 \
  --timestamp-start="2016-01-01T00:00:00Z" \
  --timestamp-end="2016-01-02T00:00:00Z" \
  --log-interval="10s" \
  --orderquantity=12 > data.dat

参数说明:

参数描述类型可选值默认值
format目标数据库的格式。STRINGkwdbN/A
use-case测试场景类型。STRINGcpu-onlycpu-only
seed伪随机数生成器 PRNG 种子。INT正整数0,表示使用当前时间戳。
scale生成数据的设备数量。INT正整数1
timestamp-start数据生成的起始时间。遵循 RFC 3339 标准。STRINGN/A2016-01-01T00:00:00Z
timestamp-end数据生成的结束时间。遵循 RFC 3339 标准。STRINGN/A2016-03-02T00:00:00Z
log-interval数据生成的间隔时间。STRING如 "10s"、"1m"10s
orderquantity初始生成设备数量。例如,对于 100 台 设备,首先生成从 host_0host_11 的数据,然后生成从 host_12host_23 的数据,依此类推。INT正整数建议与导入数据时使用的 worker 参数的取值保持一致。

导入数据

kwdb-tsbs 提供数据导入工具(tsbs_load_data),将由 tsbs_generate_data 工具生成的数据文件导入到目标数据库。tsbs_load_data 工具支持 INSERT 模式和 PREPARE 模式。两种数据导入模式的参数基本相同。

  • INSERT 模式

    ./tsbs_load_kwdb \
      --file=data.dat \
      --user=root \
      --pass=1234 \
      --host=127.0.0.1 \
      --port=26257 \
      --insert-type=insert \
      --batch-size=1000 \
      --db-name=benchmark \
      --case=cpu-only \
      --workers=12 \
      --partition=false
    
  • PREPARE 模式

    ./tsbs_load_kwdb \
      --file=data.dat \
      --user=root \
      --pass=1234 \
      --host=127.0.0.1 \
      --port=26257 \
      --insert-type=prepare \
      --preparesize=1000 \
      --db-name=benchmark \
      --case=cpu-only \
      --workers=12 \
      --partition=false
    

参数说明:

参数描述类型可选值默认值
file数据生成文件的路径。STRINGN/AN/A
user连接 KaiwuDB 数据库的用户名。STRINGN/Aroot
pass身份验证时使用的密码。STRINGN/A默认为空。
hostKaiwuDB 数据库的 IP 地址。STRINGN/AN/A
portKaiwuDB 数据库的连接端口。INTN/A26257
insert-type数据写入模式。
- insert:直接插入数据。
- prepare:预编译数据。
STRINGinsertprepareinsert
batch-sizepreparesize每批次写入的数据量。
说明
- batch-size 参数只适用于 INSERT 模式。
- preparesize 参数只适用于 PREPARE 模式。
INT正整数1000
db-name需要访问的 KaiwuDB 数据库名称。STRINGN/Abenchmark
case测试场景类型。STRINGcpu-onlycpu-only
workers并发写入线程数。INT正整数建议与生成数据时使用的 orderquantity 参数的取值保持一致。
partition设置是否分区。
- 单节点:false
- 集群:true
BOOLtruefalsefalse

生成查询

kwdb-tsbs 提供查询生成工具(tsbs_generate_queries),用以生成指定查询类型的查询脚本。

./tsbs_generate_queries \
    --format=kwdb \
    --use-case="cpu-only" \
    --seed=123 \
    --scale=100 \
    --query-type=${QUERY_TYPE} \
    --queries=100 \
    --timestamp-start="2016-01-01T08:00:00Z" \
    --timestamp-end="2016-01-05T00:00:01Z" \
    --db-name=benchmark > query.dat

参数说明:

参数描述类型可选值默认值
format目标数据库的格式。STRINGkwdbN/A
use-case测试场景类型。STRINGcpu-onlycpu-only
seed伪随机数生成器 PRNG 种子。INT正整数0,表示使用当前时间戳。
scale生成查询的设备数量。INT正整数1
query-type查询类型。STRING有关 kwdb-tsbs 支持的查询类型,参见测试场景N/A
queries产生的查询语句数量。INT正整数N/A
timestamp-start查询生成的起始时间。遵循 RFC 3339 标准。STRINGN/A2016-01-01T08:00:00Z
timestamp-end查询生成的结束时间。遵循 RFC 3339 标准。STRINGN/A2016-01-05T00:00:01Z
db-name需要访问的 KaiwuDB 数据库名称。STRINGN/Abenchmark

执行查询

在完成数据生成、数据导入、查询生成后,用户可以使用 tsbs_run_queries_kwdb 工具测试 KaiwuDB 数据库的查询执行性能。

./tsbs_run_queries_kwdb \
    --file=query.dat \
    --user=root \
    --pass=1234 \
    --host=127.0.0.1 \
    --port=26257 \
    --workers=1 > query.log

参数说明:

参数描述类型可选值默认值
file数据生成文件的路径。STRINGN/AN/A
user连接 KaiwuDB 数据库的用户名。STRINGN/Aroot
pass身份验证时使用的密码。STRINGN/A默认为空。
hostKaiwuDB 数据库的 IP 地址。STRINGN/AN/A
portKaiwuDB 数据库的连接端口。INTN/A26257
workers并发查询线程数。INT正整数N/A

自动化测试

kwdb-tsbs 在 kwdb-tsbs/scripts 目录下提供自动化脚本(tsbs_kwdb.sh),用户可以一键执行完整的 KaiwuDB 性能基准测试流程。

前提条件

  • 已安装 kwdb-tsbs 以及 Go 1.23 或更高版本。
  • 具有执行自动化测试脚本的权限。

推荐配置

  • 硬件

    下表列出执行自动化测试推荐的硬件规格。用户可以根据实际的业务规模和性能要求规划硬件资源。

    组件规格
    CPU16 核
    内存32 GB
    磁盘SSD
  • 操作系统

    下表列出执行自动化测试推荐的操作系统。未提及的操作系统版本也许可以运行自动化测试脚本,但尚未得到 KaiwuDB 官方支持。

    操作系统版本架构
    UbuntuV20.04x86_64

执行自动化脚本

  1. 配置自动化脚本参数。

    workspace="$GOPATH/src/gitee.com/kwdb"
    

    参数说明:

    • workspace:KaiwuDB 工作目录的路径。有关更多自动化测试脚本的参数配置,参见脚本文件open in new window中的详细注释说明。
  2. 执行自动化脚本。

    cd kwdb-tsbs/scripts
    ./tsbs_kwdb.sh
    

    运行完成后,生成以下相关文件:

    kwdb-tsbs/
    ├── load_data/          # 生成的导入数据
    ├── query_data/         # 生成的查询数据
    └── reports/            # 生成的测试结果
    └── YMD_HMS_scale[scaleNum]_cluster[clusterNum]_insert[insertType]_wal[walSetting]_replica[replicaNum]_dop[degreeOfParallelism]/
    ├── load_data/  # 导入测试的结果
    └── query_data/ # 查询测试的结果