当前位置: 首页 > news >正文

TDengine 性能测试工具 taosBenchmark

  • 简介
  • 工具获取
  • 运行
    • 无参数模式
    • 命令行模式
    • 配置文件模式
  • 命令行参数
  • 配置文件参数
    • 通用配置参数
    • 写入配置参数
      • 数据库相关
      • 超级表相关
      • 标签列与数据列
      • 写入行为相关
    • 查询配置参数
      • 执行指定查询语句
      • 查询超级表
    • 订阅配置参数
    • 数据类型对照表
  • 配置文件示例
    • 写入 JSON 示例
    • 查询 JSON 示例
    • 订阅 JSON 示例
  • 输出性能指标
    • 写入指标
    • 查询指标
    • 订阅指标

简介

taosBenchmark 是 TDengine 产品性能基准测试工具,提供对 TDengine 产品写入、查询及订阅性能测试,输出性能指标。

工具获取

taosBenchmark 是 TDengine 服务器及客户端安装包中默认安装组件,安装后即可使用,参考 TDengine 安装

运行

taosBenchmark 支持无参数、命令行、配置文件三种运行模式
命令行配置文件 功能子集,两者同时使用时,以命令行方式优先。

在运行 taosBenchmark 之前要确保 TDengine 集群已经在正确运行。

无参数模式

taosBenchmark

在无参数运行时,taosBenchmark 默认连接 /etc/taos/taos.cfg 中指定的 TDengine 集群。
连接成功后,会默认创建智能电表示例数据库 test,创建超级表 meters, 创建子表 1 万,每子写入数据 1 万条,若 test 库已存在,默认会先删再建。

命令行模式

命令行支持的参数为写入功能中使用较为频繁的参数,查询与订阅功能不支持命令行方式
示例:

taosBenchmark -d db -t 100 -n 1000 -T 4 -I stmt -y

此命令表示使用 taosBenchmark 将创建一个名为 db 的数据库,并建立默认超级表 meters,子表 100 ,使用参数绑定(stmt)方式为每张子表写入 1000 条记录。

配置文件模式

以 JSON 配置文件方式运行提供了全部功能,所有命令行参数都可以在配置文件中配置运行

taosBenchmark -f <json file>

命令行参数

命令行参数功能说明
-f/–file <json file>要使用的 JSON 配置文件,由该文件指定所有参数,本参数与命令行其他参数不能同时使用。没有默认值
-c/–config-dir <dir>TDengine 集群配置文件所在的目录,默认路径是 /etc/taos
-h/–host <host>指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost
-P/–port <port>要连接的 TDengine 服务器的端口号,默认值为 6030
-I/–interface <insertMode>插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc
-u/–user <user>用于连接 TDengine 服务端的用户名,默认为 root
-U/–supplement-insert写入数据而不提前建数据库和表,默认关闭
-p/–password <passwd>用于连接 TDengine 服务端的密码,默认值为 taosdata
-o/–output <file>结果输出文件的路径,默认值为 ./output.txt
-T/–thread <threadNum>插入数据的线程数量,默认为 8
-B/–interlace-rows <rowNum>启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入
-i/–insert-interval <timeInterval>指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 -B/--interlace-rows 大于 0 时才起作用
-r/–rec-per-req <rowNum>每次向 TDengine 请求写入的数据行数,默认值为 30000
-t/–tables <tableNum>指定子表的数量,默认为 10000
-S/–timestampstep <stepLength>每个子表中插入数据的时间戳步长,单位是 ms,默认值是 1
-n/–records <recordNum>每个子表插入的记录数,默认值为 10000
-d/–database <dbName>所使用的数据库的名称,默认值为 test
-b/–data-type <colType>指定超级表普通列数据类型, 多个使用逗号分隔,默认值: “FLOAT,INT,FLOAT” 如:taosBenchmark -b "FLOAT,BINARY(8),NCHAR(16)"
-A/–tag-type <tagType>指定超级表标签列数据类型,多个使用逗号分隔,默认值: “INT,BINARY(24)” 如:taosBenchmark -A "INT,BINARY(8),NCHAR(8)"
-l/–columns <colNum>超级表的数据列的总数量。如果同时设置了该参数和 -b/--data-type,则最后的结果列数为两者取大。如果本参数指定的数量大于 -b/--data-type 指定的列数,则未指定的列类型默认为 INT, 例如: -l 5 -b float,double, 那么最后的列为 FLOAT,DOUBLE,INT,INT,INT。如果 columns 指定的数量小于或等于 -b/--data-type 指定的列数,则结果为 -b/--data-type 指定的列和类型,例如: -l 3 -b float,double,float,bigint,那么最后的列为 FLOAT,DOUBLE,FLOAT,BIGINT
-L/–partial-col-num <colNum>指定某些列写入数据,其他列数据为 NULL。默认所有列都写入数据
-w/–binwidth <length>nchar 和 binary 类型的默认长度,默认值为 64
-m/–table-prefix <tablePrefix>子表名称的前缀,默认值为 “d”
-E/–escape-character开关参数,指定在超级表和子表名称中是否使用转义字符。默认值为不使用
-C/–chinese开关参数,指定 nchar 和 binary 是否使用 Unicode 中文字符。默认值为不使用
-N/–normal-table开关参数,指定只创建普通表,不创建超级表。默认值为 false。仅当插入模式为 taosc, stmt, rest 模式下可以使用
-M/–random开关参数,插入数据为生成的随机值。默认值为 false。若配置此参数,则随机生成要插入的数据。对于数值类型的 标签列/数据列,其值为该类型取值范围内的随机值。对于 NCHAR 和 BINARY 类型的 标签列/数据列,其值为指定长度范围内的随机字符串
-x/–aggr-func开关参数,指示插入后查询聚合函数。默认值为 false
-y/–answer-yes开关参数,要求用户在提示后确认才能继续
-O/–disorder <Percentage>指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0,即没有乱序数据
-R/–disorder-range <timeRange>指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 -O/--disorder 指定的乱序数据百分比大于 0 时有效
-F/–prepare_rand <Num>生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000
-a/–replica <replicaNum>创建数据库时指定其副本数,默认值为 1
-k/–keep-trying <NUMBER>失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本
-z/–trying-interval <NUMBER>失败重试间隔时间,单位为毫秒,仅在 -k 指定重试后有效。需使用 v3.0.9 以上版本
-v/–vgroups <NUMBER>创建数据库时指定 vgroups 数,仅对 TDengine v3.0+ 有效
-V/–version显示版本信息并退出。不能与其它参数混用
-?/–help显示帮助信息并退出。不能与其它参数混用

配置文件参数

通用配置参数

本节所列参数适用于所有功能模式。

  • filetype : 功能分类,可选值为 insert, querysubscribe。分别对应插入、查询和订阅功能。每个配置文件中只能指定其中之一。

  • cfgdir : TDengine 客户端配置文件所在的目录,默认路径是 /etc/taos 。

  • host : 指定要连接的 TDengine 服务端的 FQDN,默认值为 localhost。

  • port : 要连接的 TDengine 服务器的端口号,默认值为 6030。

  • user : 用于连接 TDengine 服务端的用户名,默认为 root。

  • password : 用于连接 TDengine 服务端的密码,默认值为 taosdata。

写入配置参数

写入场景下 filetype 必须设置为 insert,该参数及其它通用参数详见 通用配置参数

  • keep_trying : 失败后进行重试的次数,默认不重试。需使用 v3.0.9 以上版本。

  • trying_interval : 失败重试间隔时间,单位为毫秒,仅在 keep_trying 指定重试后有效。需使用 v3.0.9 以上版本。

  • childtable_from 和 childtable_to : 指定写入子表范围,开闭区间为 [childtable_from, childtable_to).

  • continue_if_fail : 允许用户定义失败后行为

    “continue_if_fail”: “no”, 失败 taosBenchmark 自动退出,默认行为
    “continue_if_fail”: “yes”, 失败 taosBenchmark 警告用户,并继续写入
    “continue_if_fail”: “smart”, 如果子表不存在失败,taosBenchmark 会建立子表并继续写入

数据库相关

创建数据库时的相关参数在 json 配置文件中的 dbinfo 中配置,个别具体参数如下。其余参数均与 TDengine 中 create database 时所指定的数据库参数相对应,详见[…/…/taos-sql/database]

  • name : 数据库名。

  • drop : 数据库已存在时是否删除,可选项为 “yes” 或 “no”, 默认为 “yes”

超级表相关

创建超级表时的相关参数在 json 配置文件中的 super_tables 中配置,具体参数如下。

  • name: 超级表名,必须配置,没有默认值。

  • child_table_exists : 子表是否已经存在,默认值为 “no”,可选值为 “yes” 或 “no”。

  • childtable_count : 子表的数量,默认值为 10。

  • childtable_prefix : 子表名称的前缀,必选配置项,没有默认值。

  • escape_character : 超级表和子表名称中是否包含转义字符,默认值为 “no”,可选值为 “yes” 或 “no”。

  • auto_create_table : 仅当 insert_mode 为 taosc, rest, stmt 并且 child_table_exists 为 “no” 时生效,该参数为 “yes” 表示 taosBenchmark 在插入数据时会自动创建不存在的表;为 “no” 则表示先提前建好所有表再进行插入。

  • batch_create_tbl_num : 创建子表时每批次的建表数量,默认为 10。注:实际的批数不一定与该值相同,当执行的 SQL 语句大于支持的最大长度时,会自动截断再执行,继续创建。

  • data_source : 数据的来源,默认为 taosBenchmark 随机产生,可以配置为 “rand” 和 “sample”。为 “sample” 时使用 sample_file 参数指定的文件内的数据。

  • insert_mode : 插入模式,可选项有 taosc, rest, stmt, sml, sml-rest, 分别对应普通写入、restful 接口写入、参数绑定接口写入、schemaless 接口写入、restful schemaless 接口写入 (由 taosAdapter 提供)。默认值为 taosc 。

  • non_stop_mode : 指定是否持续写入,若为 “yes” 则 insert_rows 失效,直到 Ctrl + C 停止程序,写入才会停止。默认值为 “no”,即写入指定数量的记录后停止。注:即使在持续写入模式下 insert_rows 失效,但其也必须被配置为一个非零正整数。

  • line_protocol : 使用行协议插入数据,仅当 insert_mode 为 sml 或 sml-rest 时生效,可选项为 line, telnet, json。

  • tcp_transfer : telnet 模式下的通信协议,仅当 insert_mode 为 sml-rest 并且 line_protocol 为 telnet 时生效。如果不配置,则默认为 http 协议。

  • insert_rows : 每个子表插入的记录数,默认为 0 。

  • childtable_offset : 仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表时的偏移量,即从第几个子表开始。

  • childtable_limit : 仅当 child_table_exists 为 yes 时生效,指定从超级表获取子表列表的上限。

  • interlace_rows : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入。

  • insert_interval : 指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 -B/--interlace-rows 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。

  • partial_col_num : 若该值为正数 n 时, 则仅向前 n 列写入,仅当 insert_mode 为 taosc 和 rest 时生效,如果 n 为 0 则是向全部列写入。

  • disorder_ratio : 指定乱序数据的百分比概率,其值域为 [0,50]。默认为 0,即没有乱序数据。

  • disorder_range : 指定乱序数据的时间戳回退范围。所生成的乱序时间戳为非乱序情况下应该使用的时间戳减去这个范围内的一个随机值。仅在 -O/--disorder 指定的乱序数据百分比大于 0 时有效。

  • timestamp_step : 每个子表中插入数据的时间戳步长,单位与数据库的 precision 一致,默认值是 1。

  • start_timestamp : 每个子表的时间戳起始值,默认值是 now。

  • sample_format : 样本数据文件的类型,现在只支持 “csv” 。

  • sample_file : 指定 csv 格式的文件作为数据源,仅当 data_source 为 sample 时生效。若 csv 文件内的数据行数小于等于 prepared_rand,那么会循环读取 csv 文件数据直到与 prepared_rand 相同;否则则会只读取 prepared_rand 个数的行的数据。也即最终生成的数据行数为二者取小。

  • use_sample_ts : 仅当 data_source 为 sample 时生效,表示 sample_file 指定的 csv 文件内是否包含第一列时间戳,默认为 no。 若设置为 yes, 则使用 csv 文件第一列作为时间戳,由于同一子表时间戳不能重复,生成的数据量取决于 csv 文件内的数据行数相同,此时 insert_rows 失效。

  • tags_file : 仅当 insert_mode 为 taosc, rest 的模式下生效。 最终的 tag 的数值与 childtable_count 有关,如果 csv 文件内的 tag 数据行小于给定的子表数量,那么会循环读取 csv 文件数据直到生成 childtable_count 指定的子表数量;否则则只会读取 childtable_count 行 tag 数据。也即最终生成的子表数量为二者取小。

  • primary_key : 指定超级表是否有复合主键,取值 1 和 0, 复合主键列只能是超级表的第二列,指定生成复合主键后要确保第二列符合复合主键的数据类型,否则会报错

  • repeat_ts_min : 数值类型,复合主键开启情况下指定生成相同时间戳记录的最小个数,生成相同时间戳记录的个数是在范围[repeat_ts_min, repeat_ts_max] 内的随机值, 最小值等于最大值时为固定个数

  • repeat_ts_max : 数值类型,复合主键开启情况下指定生成相同时间戳记录的最大个数

  • sqls : 字符串数组类型,指定超级表创建成功后要执行的 sql 数组,sql 中指定表名前面要带数据库名,否则会报未指定数据库错误

标签列与数据列

指定超级表标签列与数据列的配置参数分别在 super_tables 中的 columnstag 中。

  • type : 指定列类型,可选值请参考 TDengine 支持的数据类型。
    注:JSON 数据类型比较特殊,只能用于标签,当使用 JSON 类型作为 tag 时有且只能有这一个标签,此时 count 和 len 代表的意义分别是 JSON tag 内的 key-value pair 的个数和每个 KV pair 的 value 的值的长度,value 默认为 string。

  • len : 指定该数据类型的长度,对 NCHAR,BINARY 和 JSON 数据类型有效。如果对其他数据类型配置了该参数,若为 0 , 则代表该列始终都是以 null 值写入;如果不为 0 则被忽略。

  • count : 指定该类型列连续出现的数量,例如 “count”: 4096 即可生成 4096 个指定类型的列。

  • name : 列的名字,若与 count 同时使用,比如 “name”:“current”, “count”:3, 则 3 个列的名字分别为 current, current_2. current_3。

  • min : 数据类型的 列/标签 的最小值。生成的值将大于或等于最小值。

  • max : 数据类型的 列/标签 的最大值。生成的值将小于最大值。

  • scalingFactor : 浮点数精度增强因子,仅当数据类型是 float/double 时生效,有效值范围为 1 至 1000000 的正整数。用于增强生成浮点数的精度,特别是在 min 或 max 值较小的情况下。此属性按 10 的幂次增强小数点后的精度:scalingFactor 为 10 表示增强 1 位小数精度,100 表示增强 2 位,依此类推。

  • fun : 此列数据以函数填充,目前只支持 sin 和 cos 两函数,输入参数为时间戳换算成角度值,换算公式: 角度 x = 输入的时间列ts值 % 360。同时支持系数调节,随机波动因子调节,以固定格式的表达式展现,如 fun=“10*sin(x)+100*random(5)” , x 表示角度,取值 0 ~ 360度,增长步长与时间列步长一致。10 表示乘的系数,100 表示加或减的系数,5 表示波动幅度在 5% 的随机范围内。目前支持的数据类型为 int, bigint, float, double 四种数据类型。注意:表达式为固定模式,不可前后颠倒。

  • values : nchar/binary 列/标签的值域,将从值中随机选择。

  • sma: 将该列加入 SMA 中,值为 “yes” 或者 “no”,默认为 “no”。

  • encode: 字符串类型,指定此列两级压缩中的第一级编码算法,详细参见创建超级表

  • compress: 字符串类型,指定此列两级压缩中的第二级加密算法,详细参见创建超级表

  • level: 字符串类型,指定此列两级压缩中的第二级加密算法的压缩率高低,详细参见创建超级表

  • gen: 字符串类型,指定此列生成数据的方式,不指定为随机,若指定为 “order”, 会按自然数顺序增长

  • fillNull: 字符串类型,指定此列是否随机插入 NULL 值,可指定为 “true” 或 “false”, 只有当 generate_row_rule 为 2 时有效

写入行为相关
  • thread_count : 插入数据的线程数量,默认为 8。

thread_bind_vgroup : 写入时 vgroup 是否和写入线程绑定,绑定后可提升写入速度, 取值为 “yes” 或 “no”,默认值为 “no”, 设置为 “no” 后与原来行为一致。 当设为 “yes” 时,如果 thread_count 大于写入数据库 vgroups 数量, thread_count 自动调整为 vgroups 数量;如果 thread_count 小于 vgroups 数量,写入线程数量不做调整,一个线程写完一个 vgroup 数据后再写下一个,同时保持一个 vgroup 同时只能由一个线程写入的规则。

  • create_table_thread_count : 建表的线程数量,默认为 8。

  • result_file : 结果输出文件的路径,默认值为 ./output.txt。

  • confirm_parameter_prompt : 开关参数,要求用户在提示后确认才能继续, 可取值 “yes” or “no”。默认值为 “no” 。

  • interlace_rows : 启用交错插入模式并同时指定向每个子表每次插入的数据行数。交错插入模式是指依次向每张子表插入由本参数所指定的行数并重复这个过程,直到所有子表的数据都插入完成。默认值为 0, 即向一张子表完成数据插入后才会向下一张子表进行数据插入。
    super_tables 中也可以配置该参数,若配置则以 super_tables 中的配置为高优先级,覆盖全局设置。

  • insert_interval :
    指定交错插入模式的插入间隔,单位为 ms,默认值为 0。 只有当 -B/--interlace-rows 大于 0 时才起作用。意味着数据插入线程在为每个子表插入隔行扫描记录后,会等待该值指定的时间间隔后再进行下一轮写入。
    super_tables 中也可以配置该参数,若配置则以 super_tables 中的配置为高优先级,覆盖全局设置。

  • num_of_records_per_req :
    每次向 TDengine 请求写入的数据行数,默认值为 30000 。当其设置过大时,TDengine 客户端驱动会返回相应的错误信息,此时需要调低这个参数的设置以满足写入要求。

  • prepare_rand : 生成的随机数据中唯一值的数量。若为 1 则表示所有数据都相同。默认值为 10000 。

  • pre_load_tb_meta :是否提前加载子表的 meta 数据,取值为 “yes” or “no”。当子表数量非常多时,打开此选项可提高写入速度。

查询配置参数

查询场景下 filetype 必须设置为 query
query_times 指定运行查询的次数,数值类型

查询场景可以通过设置 kill_slow_query_thresholdkill_slow_query_interval 参数来控制杀掉慢查询语句的执行,threshold 控制如果 exec_usec 超过指定时间的查询将被 taosBenchmark 杀掉,单位为秒;
interval 控制休眠时间,避免持续查询慢查询消耗 CPU ,单位为秒。

其它通用参数详见 通用配置参数。

执行指定查询语句

查询指定表(可以指定超级表、子表或普通表)的配置参数在 specified_table_query 中设置。

  • mixed_query : 查询模式
    “yes” :混合查询
    “no”(默认值) :普通查询
    普通查询sqls 中每个 sql 启动 threads 个线程查询此 sql, 执行完 query_times 次查询后退出,执行此 sql 的所有线程都完成后进入下一个 sql
    查询总次数 = sqls 个数 * query_times * threads

    混合查询sqls 中所有 sql 分成 threads 个组,每个线程执行一组, 每个 sql 都需执行 query_times 次查询
    查询总次数 = sqls 个数 * query_times

  • query_interval : 查询时间间隔,单位: millisecond,默认值为 0。

  • threads : 执行查询 SQL 的线程数,默认值为 1。

  • sqls

    • sql: 执行的 SQL 命令,必填。
    • result: 保存查询结果的文件,未指定则不保存。
查询超级表

查询超级表的配置参数在 super_table_query 中设置。
超级表查询的线程模式与上面介绍的指定查询语句查询的 正常查询 模式相同,不同之处是本 sqls 使用所有子表填充。

  • stblname : 指定要查询的超级表的名称,必填。

  • query_interval : 查询时间间隔,单位是秒,默认值为 0。

  • threads : 执行查询 SQL 的线程数,默认值为 1。

  • sqls

    • sql : 执行的 SQL 命令,必填;对于超级表的查询 SQL,在 SQL 命令中必须保留 “xxxx”,会替换为超级下所有子表名后再执行。
    • result : 保存查询结果的文件,未指定则不保存。
    • 限制项 : sqls 下配置 sql 数组最大为 100 个

订阅配置参数

订阅场景下 filetype 必须设置为 subscribe,该参数及其它通用参数详见 通用配置参数

订阅配置参数在 tmq_info 项下设置,参数如下:

  • concurrent : 消费订阅的消费者数量,或称并发消费数量,默认值:1
  • create_mode : 创建消费者模式,可取值 sequential:顺序创建, parallel:并发同时创建,必填项,无默认值
  • group_mode : 生成消费者 groupId 模式,可取值 share:所有消费者只生成一个 groupId, independent:每个消费者生成一个独立的 groupId,如果 group.id 未设置,此项为必填项,无默认值
  • poll_delay : 调用 tmq_consumer_poll 传入的轮询超时时间,单位为毫秒,负数表示默认超时 1 秒
  • group.id : 指定消费者 groupId, 字符串类型,如果此值不指定,将由 group_mode 指定规则生成 groupId,如指定此值,group_mode 参数不再有效
  • client.id : 客户端 ID 标识号,字符串类型
  • auto.offset.reset : 消费组订阅的初始位置。可取值 earliest: 从头开始订阅,latest: 仅从最新数据开始订阅。默认值: latest
  • enable.auto.commit : 是否允许自动提交,可取值 true:允许自动提交, false:不允许自动提交
  • enable.manual.commit : 是否允许手动提交,可取值 true:允许手动提交,每次消费完消息后手动调用 tmq_commit_sync 完成提交, false:不进行提交,默认值: false
  • auto.commit.interval.ms : 自动提交间隔时间,单位为毫秒
  • rows_file : 存储消费数据的文件,可以为全路径或相对路径,带文件名。实际保存的文件会在后面加上消费者序号,如 rows_file 为 result, 实际文件名为 result_1(消费者 1) result_2(消费者 2) …
  • expect_rows : 期望每个消费者消费的行数,数据类型,当消费达到这个数,消费会退出,不设置会一直消费
  • topic_list : 指定消费的 topic 列表,数组类型。topic 列表格式示例: {“name”: “topic1”, “sql”: “select * from test.meters;”}, name: 指定 topic 名, sql: 指定创建 topic 的 sql 语句,需保证 sql 正确,框架会自动创建出 topic。

数据类型对照表

#引擎taosBenchmark
1TIMESTAMPtimestamp
2INTint
3INT UNSIGNEDuint
4BIGINTbigint
5BIGINT UNSIGNEDubigint
6FLOATfloat
7DOUBLEdouble
8BINARYbinary
9SMALLINTsmallint
10SMALLINT UNSIGNEDusmallint
11TINYINTtinyint
12TINYINT UNSIGNEDutinyint
13BOOLbool
14NCHARnchar
15VARCHARvarchar
16VARBINARYvarbinary
17GEOMETRYgeometry
18JSONjson

注意:taosBenchmark 配置文件中数据类型必须小写方可识别

配置文件示例

下面为支持的写入、查询、订阅三大功能的配置文件示例:

写入 JSON 示例

insert.json

查询 JSON 示例

query.json

订阅 JSON 示例

tmq.json

查看更多 json 配置文件示例可 点击这里

输出性能指标

写入指标

写入结束后会在最后两行输出总体性能指标,格式如下:

SUCC: Spent 8.527298 (real 8.117379) seconds to insert rows: 10000000 with 8 thread(s) into test 1172704.41 (real 1231924.74) records/second
SUCC: insert delay, min: 19.6780ms, avg: 64.9390ms, p90: 94.6900ms, p95: 105.1870ms, p99: 130.6660ms, max: 157.0830ms

第一行写入速度统计:

  • Spent: 写入总耗时,单位秒,从开始写入第一个数据开始计时到最后一条数据结束,这里表示共花了 8.527298 秒
  • real : 写入总耗时(调用引擎),此耗时已抛去测试框架准备数据时间,纯统计在引擎调用上花费的时间,示例为 8.117379 秒,8.527298 - 8.117379 = 0.409919 秒则为测试框架准备数据消耗时间
  • rows : 写入总行数,为 1000 万条数据
  • threads: 写入线程数,这里是 8 个线程同时写入
  • records/second 写入速度 = 写入总耗时/ 写入总行数 , 括号中 real 同前,表示纯引擎写入速度
    第二行单个写入延时统计:
  • min : 写入最小延时
  • avg : 写入平时延时
  • p90 : 写入延时 p90 百分位上的延时数
  • p95 : 写入延时 p95 百分位上的延时数
  • p99 : 写入延时 p99 百分位上的延时数
  • max : 写入最大延时
    通过此系列指标,可观察到写入请求延时分布情况
查询指标

查询性能测试主要输出查询请求速度 QPS 指标, 输出格式如下:

complete query with 3 threads and 10000 query delay avg: 	0.002686s min: 	0.001182s max: 	0.012189s p90: 	0.002977s p95: 	0.003493s p99: 	0.004645s SQL command: select ...
INFO: Spend 26.9530 second completed total queries: 30000, the QPS of all threads:   1113.049
  • 第一行表示 3 个线程每个线程执行 10000 次查询及查询请求延时百分位分布情况,SQL command 为测试的查询语句
  • 第二行表示查询总耗时为 26.9653 秒,每秒查询率(QPS)为:1113.049 次/秒
  • 如果在查询中设置了 continue_if_fail 选项为 yes,在最后一行中会输出失败请求个数及错误率,格式 error + 失败请求个数 (错误率)
  • QPS = 成功请求数量 / 花费时间(单位秒)
  • 错误率 = 失败请求数量 /(成功请求数量 + 失败请求数量)
订阅指标

订阅性能测试主要输出消费者消费速度指标,输出格式如下:

INFO: consumer id 0 has poll total msgs: 376, period rate: 37.592 msgs/s, total rows: 3760000, period rate: 375924.815 rows/s
INFO: consumer id 1 has poll total msgs: 362, period rate: 36.131 msgs/s, total rows: 3620000, period rate: 361313.504 rows/s
INFO: consumer id 2 has poll total msgs: 364, period rate: 36.378 msgs/s, total rows: 3640000, period rate: 363781.731 rows/s
INFO: consumerId: 0, consume msgs: 1000, consume rows: 10000000
INFO: consumerId: 1, consume msgs: 1000, consume rows: 10000000
INFO: consumerId: 2, consume msgs: 1000, consume rows: 10000000
INFO: Consumed total msgs: 3000, total rows: 30000000
  • 1 ~ 3 行实时输出每个消费者当前的消费速度,msgs/s 表示消费消息个数,每个消息中包含多行数据,rows/s 表示按行数统计的消费速度
  • 4 ~ 6 行是测试完成后每个消费者总体统计,统计共消费了多少条消息,共计多少行
  • 第 7 行所有消费者总体统计,msgs 表示共消费了多少条消息, rows 表示共消费了多少行数据

相关文章:

TDengine 性能测试工具 taosBenchmark

简介工具获取运行 无参数模式命令行模式配置文件模式 命令行参数配置文件参数 通用配置参数写入配置参数 数据库相关超级表相关标签列与数据列写入行为相关 查询配置参数 执行指定查询语句查询超级表 订阅配置参数数据类型对照表 配置文件示例 写入 JSON 示例查询 JSON 示例订阅…...

校园网绕过认证上网很简单

校园网绕过认证就是不用通过校园WiFi的WEB页面登录&#xff0c;这个WEB登录页面就是认证页面. 所谓绕过认证&#xff0c;就是不通过校园WiFi WEB登录页面直接上网&#xff0c;校园WiFi没有密码&#xff0c;直接就能连接上&#xff0c;我们连上这个WiFi的时候&#xff0c;它会给…...

C++ Primer 迭代语句

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…...

World of Warcraft [CLASSIC][Grandel] FOR THE HORDE

《World of Warcraft [CLASSIC][80猎人][Grandel]维克尼拉斯大型纪录片2025年元宵节击杀联盟主城4BOSS[为了部落&#xff01;]》 World of Warcraft [CLASSIC][80猎人][Grandel]维克尼拉斯大型纪录片2025年元宵节击杀联盟主城4BOSS[为了部落&#xff01;]_魔兽...

【ESP32指向鼠标】——icm20948与esp32通信

【ESP32指向鼠标】——icm20948与esp32通信 ICM-20948介绍 ICM-20948 是一款由 InvenSense&#xff08;现为 TDK 的一部分&#xff09;生产的 9 轴传感器集成电路。它结合了 陀螺仪、加速度计和磁力计。 内置了 DMP&#xff08;Digital Motion Processor&#xff09;即负责执…...

随手记:小程序setData 数据传输长度为 XXXKB,存在有性能问题!小程序长列表性能优化,uni.createIntersectionObserver

在一些小程序列表的页面&#xff0c;总是会看到小程序控制台的黄色警告&#xff1a; 这是由于data 数据过大&#xff0c;导致的问题 方法&#xff1a; 1.避免setData的数据过大&#xff0c;小于1024kb。 2.避免调用频繁&#xff0c;保证数据实时性。 3.避免未绑定在WXML的…...

双ESP8266-01S通讯UDP配置

第一台ESP8266(发送命令需要勾---发送新行) ATCWMODE3 ATCWSAP_DEF"CAR_wifi_Master","12345678",5,3 //设置本地wifi名称以及密码 ATCIPSTA_DEF"192.168.4.1" //设置本地IP ATCIFSR …...

记忆模块概述

文章目录 记忆模块概述记忆组件的定义记忆组件、链组件和Agent组件的关系设置第一个记忆组件内置记忆组件自定义记忆组件 本文将LangChain框架内所有与记忆功能有关的组件统一称为“记忆模块”。简而言之&#xff0c;记忆模块是一个集合体&#xff0c;由多个不同的记忆组件构成…...

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网&#xff0c;当时花了几天时间查阅相关博客总算是做出来了&#xff0c;在验收后一直没管&#xff0c;在寒假想起来了简单分享一下&#xff0c;希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…...

算法之 数论

文章目录 质数判断质数3115.质数的最大距离 质数筛选204.计数质数2761.和等于目标值的质数对 2521.数组乘积中的不同质因数数目 质数 质数的定义&#xff1a;除了本身和1&#xff0c;不能被其他小于它的数整除&#xff0c;最小的质数是 2 求解质数的几种方法 法1&#xff0c;根…...

【论文阅读】Revisiting the Assumption of Latent Separability for Backdoor Defenses

https://github.com/Unispac/Circumventing-Backdoor-Defenses 摘要和介绍 在各种后门毒化攻击中&#xff0c;来自目标类别的毒化样本和干净样本通常在潜在空间中形成两个分离的簇。 这种潜在的分离性非常普遍&#xff0c;甚至在防御研究中成为了一种默认假设&#xff0c;我…...

【深入探讨 ResNet:解决深度神经网络训练问题的革命性架构】

深入探讨 ResNet&#xff1a;解决深度神经网络训练问题的革命性架构 随着深度学习的快速发展&#xff0c;卷积神经网络&#xff08;CNN&#xff09;已经成为图像识别、目标检测等计算机视觉任务的主力军。然而&#xff0c;随着网络层数的增加&#xff0c;训练深层网络变得愈加…...

【C】链表算法题7 -- 环形链表||

leetcode链接https://leetcode.cn/problems/linked-list-cycle-ii/description/ 问题描述 给定一个链表的头节点 head &#xff0c;返回链表开始入环的第一个节点。 如果链表无环&#xff0c;则返回 null。如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到…...

设备智能化无线通信,ESP32-C2物联网方案,小尺寸芯片实现大功能

在科技飞速发展的当下&#xff0c;我们的生活正被各类智能设备悄然改变&#xff0c;它们如同一位位无声的助手&#xff0c;渗透到我们生活的每一个角落&#xff0c;让生活变得更加便捷和丰富多彩。 智能插座、智能照明和简单家电设备在家居领域的应用&#xff0c;为我们的生活…...

【嵌入式Linux应用开发基础】read函数与write函数

目录 一、read 函数 1.1. 函数原型 1.2. 参数说明 1.3. 返回值 1.4. 示例代码 二、write 函数 2.1. 函数原型 2.2. 参数说明 2.3. 返回值 2.4. 示例代码 三、关键注意事项 3.1 部分读写 3.2 错误处理 3.3 阻塞与非阻塞模式 3.4 数据持久化 3.5 线程安全 四、嵌…...

从 X86 到 ARM :工控机迁移中的核心问题剖析

在工业控制领域&#xff0c;技术的不断演进促使着工控机从 X86 架构向 ARM 架构迁移。然而&#xff0c;这一过程并非一帆风顺&#xff0c;面临着诸多关键挑战。 首先&#xff0c;软件兼容性是一个重要问题。许多基于 X86 架构开发的工业控制软件可能无法直接在 ARM 架构上运行…...

【数据结构】(7) 栈和队列

一、栈 Stack 1、什么是栈 栈是一种特殊的线性表&#xff0c;它只能在固定的一端&#xff08;栈顶&#xff09;进行出栈、压栈操作&#xff0c;具有后进先出的特点。 2、栈概念的例题 答案为 C&#xff0c;以C为例进行讲解&#xff1a; 第一个出栈的是3&#xff0c;那么 1、…...

android设置添加设备QR码信息

摘要&#xff1a;客户衍生需求&#xff0c;通过扫QR码快速获取设备基础信息&#xff0c;并且基于POS SDK进行打印。 1. 定位至device info的xml添加相关perference Index: vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/my_device_info.xml--- vendor/medi…...

进程状态

目录 1.进程排队 硬件的队列 进程排队 2.进程的三大状态 什么是状态 运行状态 阻塞状态 挂起状态 3.Linux系统中的进程状态 4.僵尸状态 5.孤儿进程 1.进程排队 硬件的队列 计算机是由很多硬件组成的&#xff0c;操作系统为了管理这些硬件&#xff0c;通常需要为这…...

【linux学习指南】模拟线程封装与智能指针shared_ptr

文章目录 &#x1f4dd;线程封装&#x1f309; Thread.hpp&#x1f309; Makefile &#x1f320;线程封装第一版&#x1f309; Makefile:&#x1f309;Main.cc&#x1f309; Thread.hpp: &#x1f320;线程封装第二版&#x1f309; Thread.hpp:&#x1f309; Main.cc &#x1f…...

智慧物流新引擎:ARM架构工控机在自动化生产线中的应用

工业自动化程度的不断提升&#xff0c;对高性能、低功耗和高可靠性的计算设备需求日益增长。ARM架构工控机因其独特的优势&#xff0c;在多个工业领域得到了广泛应用。本文将深入探讨ARM架构工控机的特点及其在具体工业场景中的应用。 ARM架构工控机的主要优势 高效能与低功耗…...

OpenGL的基础光照知识

光照模型 常见的光照模型&#xff1a;ADS模型 A&#xff1a;环境光反射&#xff08;ambient reflection&#xff09;&#xff1a;模拟低级光照&#xff0c;影响场景中的所有物体。D&#xff1a;漫反射&#xff08;diffuse reflection&#xff09;&#xff1a;根据光线的入射角…...

centos 10 离线安装dnf 和 设置dnf镜像源

离线安装dnf可用kimi搜索, centos 使用curl 下载dnf 的rpm包 mkdir ~/dnf_packages cd ~/dnf_packages# CentOS 7 示例 curl -O http://springdale.math.ias.edu/data/puias/unsupported/7/x86_64/dnf-0.6.4-2.sdl7.noarch.rpm curl -O http://springdale.math.ias.edu/data/pu…...

redis 缓存击穿问题与解决方案

前言1. 什么是缓存击穿?2. 如何解决缓存击穿?怎么做?方案1: 定时刷新方案2: 自动续期方案3: 定时续期 如何选? 前言 当我们使用redis做缓存的时候,查询流程一般是先查询redis,如果redis未命中,再查询MySQL,将MySQL查询的数据同步到redis(回源),最后返回数据 流程图 为什…...

Linux下的进程切换与调度

目录 1.进程的优先级 优先级是什么 Linux下优先级的具体做法 优先级的调整为什么要受限 2.Linux下的进程切换 3.Linux下进程的调度 1.进程的优先级 我们在使用计算机的时候&#xff0c;通常会启动多个程序&#xff0c;这些程序最后都会变成进程&#xff0c;但是我们的硬…...

开源模型应用落地-Qwen1.5-MoE-A2.7B-Chat与vllm实现推理加速的正确姿势(一)

一、前言 在人工智能技术蓬勃发展的当下,大语言模型的性能与应用不断突破边界,为我们带来前所未有的体验。Qwen1.5-MoE-A2.7B-Chat 作为一款备受瞩目的大语言模型,以其独特的架构和强大的能力,在自然语言处理领域崭露头角。而 vllm 作为高效的推理库,为模型的部署与推理提…...

阿里云IOT设备管理

本文主要介绍了阿里云IOT设备管理的基本概念、功能特点以及应用场景。阐述了如何利用阿里云IOT平台实现设备的连接、监控和控制&#xff0c;以及如何借助其丰富的数据分析功能提升设备管理效率。 一、IOT工作原理 二、创建模拟设备 1.创建产品 2.物模型 3.设备 4.设备数据上报…...

图像处理技术和应用

图像处理技术是一种依托计算机和相关算法&#xff0c;对图像进行深度处理、分析及改变的技术。主要包括图像数字化、图像增强和复原、图像数据编码、图像分割和图像识别等。它不仅能够从静态图像中提取关键信息&#xff0c;还能改变图像的外观或特征&#xff0c;并进一步检测、…...

格式化字符串漏洞详解

一、漏洞原理 格式化字符串漏洞&#xff08;Format String Vulnerability&#xff09;是由于程序使用用户可控的输入作为格式化字符串参数&#xff08;如 printf、sprintf 等函数&#xff09;时未正确过滤导致的漏洞。攻击者可通过构造特殊格式字符串实现以下操作&#xff1a;…...

java项目之基于web的中国古诗词的设计与实现源码(ssm+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的基于web的中国古诗词的设计与实现。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 项目简介&#xff1a; 基于web的中国…...

网络初识-

网络的相关概念 一、局域网和广域网 将各种计算机、外部设备等相互连接起来&#xff0c;实现在这个范围内数据通信和资源共享的计算机网络。它的覆盖范围通常在几百米到几公里之内。例如&#xff0c;一个小型企业的办公室&#xff0c;通过交换机将多台电脑连接在一起&#xf…...

AOS安装及操作演示

文章目录 一、安装node1.1 在 macOS 上管理 Node版本1.1.1 安装 nvm1.1.2 验证 nvm 是否安装成功1.1.3 使用 nvm 安装/切换 Node.js 版本1.1.4 卸载 Node.js 版本 1.2 在 windows 上管理 Node版本1.2.1 安装 nvm-windows1.2.2 安装 Node.js 版本1.2.3 切换 Node.js 版本1.2.4 卸…...

vue学习8

1.pinia&#xff08;更优&#xff09; 是vue最新的状态管理工具&#xff0c;是vuex的替代品 pinia&#xff1a; state actions(支持异步&#xff0c;可以直接修改state) getters 优点&#xff1a; 提供更加简单的API(去掉了mutation)提供符合&#xff0c;组合式的API语法(和v…...

【竞技宝】电竞世界杯:无畏契约首次入选正式项目!

北京时间2月12日&#xff0c;电竞世界杯基金会&#xff08;EWCF&#xff09;与知名游戏开发商拳头游戏&#xff08;Riot Games&#xff09;在近日共同宣布达成三年合作伙伴关系。同时&#xff0c;三大顶级电竞项目——《英雄联盟》《英雄联盟&#xff1a;云顶之弈》&#xff08…...

Bigemap Pro地图配置文件包

配置文件获取 配置文件下载后&#xff0c;直接拖入软件中自动识别导入图源&#xff0c;一键完成加载。...

有哪些免费的SEO软件优化工具

随着2025年互联网的不断发展&#xff0c;越来越多的企业意识到在数字营销中&#xff0c;网站的曝光度和排名至关重要。无论是想要提高品牌知名度&#xff0c;还是想要通过在线销售增加收益&#xff0c;SEO&#xff08;搜索引擎优化&#xff09;都是一项不可忽视的关键策略。而要…...

第二天:工具的使用

每天上午9点左右更新一到两篇文章到专栏《Python爬虫训练营》中&#xff0c;对于爬虫有兴趣的伙伴可以订阅专栏一起学习&#xff0c;完全免费。 键盘为桨&#xff0c;代码作帆。这趟为期30天左右的Python爬虫特训即将启航&#xff0c;每日解锁新海域&#xff1a;从Requests库的…...

分享在职同时准备系统分析师和教资考试的时间安排

&#xff08;在职、时间有限、同时备考系统分析师考试和小学信息技术教资面试&#xff09;&#xff0c;以下是详细的备考计划&#xff0c;确保计划的可行性和通过性。 一、总体安排 时间分配&#xff1a; 每周周末&#xff08;2天&#xff09;用于系统分析师考试备考。工作日晚…...

从Word里面用VBA调用NVIDIA的免费DeepSeekR1

看上去能用而已。 选中的文字作为输入&#xff0c;运行对应的宏即可&#xff1b;会先MSGBOX提示一下&#xff0c;然后相关内容追加到word文档中。 需要自己注册生成好用的apikey Option ExplicitSub DeepSeek()Dim selectedText As StringDim apiKey As StringDim response A…...

3.2 > Bash

概览 在上一节中我们了解了关于 Shell 的执行流程&#xff0c;知道了在 Linux 环境中一般有哪些常用的 Shell。而在本节中&#xff0c;将会学习到 Linux 中最常见的一个 Shell —— Bash&#xff0c;了解到 bash 的相关知识和用法。 本节目录 概览相关知识bash 命令提示符bas…...

游戏引擎学习第100天

仓库:https://gitee.com/mrxiao_com/2d_game_2 昨天的回顾 今天的工作重点是继续进行反射计算的实现。昨天&#xff0c;我们开始了反射和环境贴图的工作&#xff0c;成功地根据法线显示了反射效果。然而&#xff0c;我们还没有实现反射向量的计算&#xff0c;导致反射交点的代…...

新一代SCADA: 宏集Panorama Suite 2025 正式发布,提供更灵活、符合人体工学且安全的应用体验

宏集科技宣布正式推出全新Panorama Suite 2025 SCADA软件&#xff01;全新版本标志着 Panorama Suite的一个重要里程碑&#xff0c;代表了从 Panorama Suite 2022 开始并跨越三个版本&#xff08;2022、2023、2025&#xff09;的开发过程的顶峰。 此次重大发布集中在六个核心主…...

Visual Studio 进行单元测试【入门】

摘要&#xff1a;在软件开发中&#xff0c;单元测试是一种重要的实践&#xff0c;通过验证代码的正确性&#xff0c;帮助开发者提高代码质量。本文将介绍如何在VisualStudio中进行单元测试&#xff0c;包括创建测试项目、编写测试代码、运行测试以及查看结果。 1. 什么是单元测…...

Notepad++ 中删除所有以 “pdf“ 结尾的行

Notepad 中删除所有以 “pdf” 结尾的行 操作步骤 1.打开文件&#xff1a; 在 Notepad 中打开你需要处理的文本文件。 2.打开查找和替换对话框&#xff1a; 按快捷键 Ctrl F&#xff0c;打开“查找和替换”对话框。 3.启用正则表达式模式&#xff1a; 在对话框的底部&#xf…...

Java 使用腾讯翻译 API 实现含 HTML 标签文本,json值,精准翻译工具

注意&#xff1a;需搭配标题二的腾讯翻译工具使用 一-1、翻译标签文本工具 package org.springblade.common.utils;import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;public class TencentTranslationFor…...

DeepSeek R1+Open WebUI +SearXNG 本地化部署与联网功能

GitHub - searxng/searxng-docker: The docker-compose files for setting up a SearXNG instance with docker....

数据科学之数据管理|NumPy数据管

一、Numpy介绍 (一) 什么是numpy NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运…...

零基础玩转 DeepSeek API实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于大模型算法的研究与应用。曾担任百度千帆大模型比赛、BPAA算法大赛评委,编写微软OpenAI考试认证指导手册。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。授权多项发明专利。对机器学…...

【GPIO】5.理解保护二极管在GPIO过电压保护中的作用

在电子电路设计中&#xff0c;保护二极管是常见的保护元件&#xff0c;用于防止过电压对敏感电路的损害。本文将探讨当GPIO输入电压大于3.3V时&#xff0c;保护二极管如何工作&#xff0c;并解释为什么大部分过电压引起的电流会通过二极管流向VDD而不是流入内部电路。 1.背景 …...

2.5 模块化迁移策略:从传统项目到模块化系统

模块化迁移策略&#xff1a;从传统项目到模块化系统 将传统 Java 项目迁移至 JDK 9 模块化系统是一项系统性工程&#xff0c;需分阶段实施以降低风险。以下是详细的迁移策略、工具使用和实战示例。 1. 迁移阶段划分 阶段目标关键操作阶段1&#xff1a;兼容性验证确保项目能在…...