TDengine taosdemo工具使用指南

TDengine产品提供一个数据库数据的测试工具,支持数据的插入、查询、订阅等功能和性能的验证。

(工具的参数内容有可能因版本更新而改变,请以 help 实际输出的联机帮助信息为准。)

TAOSDEMO命令帮助

root@taos-ec1:/dump# ./taosdemo --help
Usage: taosdemo [OPTION...]

      -f       The meta file to the execution procedure. Default is './meta.json'.
      -u       The TDengine user name to use when connecting to the server. Default is 'root'.
      -P       The password to use when connecting to the server. Default is 'taosdata'.
      -c       Configuration directory. Default is '/etc/taos/'.
      -h       The host to connect to TDengine. Default is localhost.
      -p       The TCP/IP port number to use for the connection. Default is 0.
      -d       Destination database. Default is 'test'.
      -a       Set the replica parameters of the database, Default 1, min: 1, max: 3.
      -m       Table prefix name. Default is 't'.
      -s       The select sql file.
      -N       Use normal table flag.
      -o       Direct output to the named file. Default is './output.txt'.
      -q       Query mode--0: SYNC, 1: ASYNC. Default is SYNC.
      -b       The data_type of columns, default: INT,INT,INT,INT.
      -w       The length of data_type 'BINARY' or 'NCHAR'. Default is 16
      -l       The number of columns per record. Default is 4.
      -T       The number of threads. Default is 10.
      -i       The sleep time (ms) between insertion. Default is 0.
      -r       The number of records per request. Default is 100.
      -t       The number of tables. Default is 10000.
      -n       The number of records per table. Default is 10000.
      -x       Not insert only flag.
      -y       Default input yes for prompt.
      -O       Insert mode--0: In order, 1 ~ 50: disorder ratio. Default is in order.
      -R       Out of order data's range, ms, default is 1000.
      -g       Print debug info.
      -V, --version       Print version info.
       

taosdemo支持两种配置参数的模式,一种是命令行参数,一种是使用json格式的配置文件。

一、命令行参数

-f:指定taosdemo所需参数的meta文件。当使用该参数时,其他所有命令行参数都失效。可选项,缺省是NULL。

-u: 用户名。可选项,缺省是“root“。

-P: 密码。可选项,缺省是“taosdata”。

-c: 配置文件taos.cfg所在的路径。因为taosdemo通过包含taos的动态库,去链接taosd服务,所以需要做好配置文件。可选项,缺省是 “/etc/taos”路径。

-h:taosd服务的FQDN。可选项,缺省是“localhost“。

-p: taosd服务的端口号。可选项,缺省是6030。

-d:数据库名称。可选项,缺省是“test”。

-a:副本个数,可选项。1 – 3,缺省是1。

-m:表名的前缀。可选项,缺省是“t”。

-s::执行该文件包含的多条 SQL 查询命令。

-N:使用普通建表模式。有该选项时,全部创建普通表,否则缺省创建超级表,再根据超级表创建子表;

-o:指定执行结果输出文件的路径。可选项,缺省是./output.txt。

-q:查询模式,0:同步模式;1:异步模式。可选项,缺省是0。

-b:列的类型。可选项,缺省是:INT,INT,INT,INT。

-w:BINARY或NCHAR数据类型的长度。可选项,缺省是16。

-l:列的个数。可选项,缺省是4。

-T:并发线程数。可选项,缺省是10。

-i:两次sql插入的时间间隔,缺省是0。

-r:每条插入请求包含的记录数,缺省是30000

-t:表的个数。可选项,缺省是10000。

-n:每个表插入的记录数。可选项,缺省是10000。

-x:不仅仅插入数据。有该选项时,taosdemo还会进行查询操作。

-y:提示询问输入时缺省输入yes。

-O:插入乱序数据的比例,0:顺序插入;> 0:乱序数据的百分比。可选项,缺省是0。

-R:乱序百分比不为0时,乱序时间戳范围,单位:毫秒。可选项,缺省是1000。

-g:打印debug信息

-V: 打印taosdemo的debug信息。

–help: 打印命令参数列表。

二、json格式的配置文件中所有参数说明

taosdemo支持3种功能的测试,包括插入、查询、订阅。但一个taosdemo实例不能同时支持3中功能,一个taosdemo实例只能支持其中的一种功能,通过配置文件来指定进行哪种功能的测试。

1、插入功能测试的json配置文件

{
  "filetype": "insert",
  "cfgdir": "/etc/taos",
  "host": "127.0.0.1",
  "port": 6030,
  "user": "root",
  "password": "taosdata",
  "thread_count": 4,                  
  "thread_count_create_tbl": 4,        
  "result_file": "./insert_res.txt",  
  "confirm_parameter_prompt": "no",    
  "insert_interval": 0,        
  "interlace_rows": 100,        
  "num_of_records_per_req": 100,
  "databases": [{
      "dbinfo": {
          "name": "db",
          "drop": "yes",                
          "replica": 1,
          "days": 10,
          "cache": 16,
          "blocks": 8,
          "precision": "ms",
          "keep": 3650,
          "minRows": 100,
          "maxRows": 4096,
          "comp":2,
          "walLevel":1,
          "cachelast":0,
          "quorum":1,
          "fsync":3000,
          "update": 0
      },
      "super_tables": [{
          "name": "stb",
          "child_table_exists":"no",  
          "childtable_count": 100,  
          "childtable_prefix": "stb_",
          "auto_create_table": "no",  
          "batch_create_tbl_num": 5,  
          "data_source": "rand",      
          "insert_mode": "taosc",      
          "insert_rows": 100000,      
          "childtable_limit": 10,      
          "childtable_offset":100,    
          "interlace_rows": 0,        
          "insert_interval":0,        
          "max_sql_len": 1024000,      
          "disorder_ratio": 0,        
          "disorder_range": 1000,      
          "timestamp_step": 10,        
          "start_timestamp": "2020-10-01 00:00:00.000",  
          "sample_format": "csv",      
          "sample_file": "./sample.csv",  
          "tags_file": "",              
          "columns": [{"type": "INT"}, {"type": "DOUBLE", "count":10}, {"type": "BINARY", "len": 16, "count":3}, {"type": "BINARY", "len": 32, "count":6}],
          "tags": [{"type": "TINYINT", "count":2}, {"type": "BINARY", "len": 16, "count":5}]
      }]
  }]
}

“filetype”: 本taosdemo实例进行哪种功能测试。”insert”表示数据插入功能。必选项

“cfgdir”: 配置文件taos.cfg所在的路径。因为taosdemo通过包含taos的动态库,去链接taosd服务,所以需要做好配置文件。可选项,缺省是 “/etc/taos”路径。

“host”: taosd服务的FQDN。可选项,缺省是“localhost“。

“port”: taosd服务的端口号。可选项,缺省是6030。

“user”: 用户名。可选项,缺省是“root“。

“password”: 密码。可选项,缺省是“taosdata”。

“thread_count”: 插入数据时的并发线程数。可选项,缺省是1。

“thread_count_create_tbl”: 建子表时的并发线程数。可选项,缺省是1。

“result_file”: 测试完成后结果保存文件。可选项,缺省是本实例启动目录下的”./insert_res.txt”。

“confirm_parameter_prompt”: 执行过程中提示是否确认,为no时,执行过程无需手工输入enter。可选项,缺省是no。

“insert_interval”: 两次发送请求的间隔时间。可选项,缺省是0,代表无人工设置的时间间隔,单位为ms。。

“interlace_rows”: 设置轮询插入每个单表数据的条目数,如果interlace_rows*childtable_count*supertable_num小于num_of_records_per_req时,则请求插入的数目以interlace_rows*childtable_count*supertable_num为准。可选项,缺省是0。

“num_of_records_per_req”: 每条请求数据内容包含的插入数据记录数目,该数据组成的sql不能大于maxslqlen,如果过大,则取taood限制的1M长度(1048576)。可选项,缺省是INT64_MAX。0代表不插入数据,建议配置大于0。

“databases”: [{

“dbinfo”: { ​

“name”: 数据库名称。必选项。

“drop”: 如果数据库已经存在,”yes“:删除后重建;”no“:不删除,直接使用。可选项,缺省是”no“。

“replica”: 副本个数,可选项。1 – 3,缺省是1。

“days”: 数据文件存储数据的时间跨度,可选项。缺省是10天。

“cache”: 内存块的大小,单位是MB,可选项。缺省是16MB。

“blocks”: 每个VNODE(TSDB)中有多少cache大小的内存块,可选项。缺省是6块。

“precision”: 数据库时间精度,可选项。”ms”:毫秒, “us”:微秒。缺省是“ms”。

“keep”: 数据保留的天数,可选项。缺省是3650天。

“minRows”: 文件块中记录的最小条数,可选项。缺省是100。

“maxRows”: 文件块中记录的最大条数,可选项。缺省是4096.

“comp”:文件压缩标志位,可选项。0:关闭,1:一阶段压缩,2:两阶段压缩。缺省是2。

“walLevel”:WAL级别,可选项。1:写wal, 但不执行fsync; 2:写wal, 而且执行fsync。缺省是1。

“cachelast”:允许在内存中保留每张表的最后一条记录。1表示允许。

“quorum”:异步写入成功所需应答之法定数,1-3,可选项。缺省是1。

“fsync”:当wal设置为2时,执行fsync的周期,单位是毫秒,最小为0,表示每次写入,立即执行fsync. 最大为180000,可选项。缺省是3000。

“update”: 支持数据更新,0:否;1:是。可选项。缺省是0。 ​ },

“super_tables”: [{ ​

“name”: 超级表名称,必选项。

“child_table_exists”: 子表是否已经存在,“yes”:是;”no”:否。指定“是”后,不再建子表,后面相关子表的参数就无效了。可选项,缺省是“no”。

“childtable_count”: 建立子表个数 。该值需要大于0。当child_table_exists为“no”时,必选项,否则就是无效项。

“childtable_prefix”: 子表名称前缀。当child_table_exists为“no”时,必选项,否则就是无效项。确保数据库中表名没有重复。

“auto_create_table”: 子表的创建方式,“yes”:自动建表;”no”:提前建表。当child_table_exists为“yes”时无效。可选项,缺省是“no”。

“batch_create_tbl_num”: 一个sql批量创建子表的数目。

“data_source”: 插入数据来源,”rand”:实例随机生成;“sample”:从样例文件中读取。可选项。缺省是“rand”。

“insert_mode”: 插入数据接口,”taosc”:调用TDengine的c接口;“resetful”:使用restfule接口。可选项。缺省是“taosc”。

“insert_rows”: 插入记录数,0:一直插入,永不退出;>0:每个子表插入记录数,完成后实例退出。可选项,缺省是0。

“childtable_offset”: 插入数据时,子表起始值。只在drop=no && child_table_exists= yes,该字段生效。

“childtable_limit”: 插入数据时,子表从offset开始,偏移的表数目。使用者可以运行多个 taosdemo 实例(甚至可以在不同的机器上)通过使用不同的 childtable_offset 和 childtable_limit 配置值来实现同时写入相同数据库相同超级表下多个子表。

“interlace_rows”: 跟上面的配置一致,不过该处的配置优先,每个stable可以有自己单独的配置。

“insert_interval”: 同上。

“max_sql_len”: 同上

“disorder_ratio”: 插入数据时的乱序百分比,可选项,缺省是0。

“disorder_range”: 乱序百分比不为0时,乱序时间戳范围,单位:ms。可选项,缺省是1000,即1秒或1000毫秒。

“timestamp_step”: 每个子表中记录时间戳的步长,单位:ms。可选项,缺省是1,即1毫秒。

“start_timestamp”: 子表中记录时间戳的起始值,支持”2020-10-01 00:00:00.000″和“now”两种格式,可选项,缺省是“now”。

“sample_format”: 当插入数据源选择“sample”时,sample文件的格式,”csv”:csv格式,每列的值与子表的columns保持一致,但不包含第1列的时间戳。可选项,缺省是”csv”。目前仅仅支持csv格式的sample文件。

“sample_file”:sample文件,包含路径和文件名。当插入数据源选择“sample”时,该项为必选项。

“tags_file”: 子表tags值文件,只能是csv文件格式,且必须与超级表的tags保持一致。当该项为非空时,表示子表的tags值从文件中获取;为空时,实例随机生成。可选项,缺省是空。

“columns”: [{ 超级表的column列表,最大支持1024列(指所有普通列+超级列总和)。默认的第一列为时间类型,程序自动添加,不需要手工添加。

“type”: 该列的数据类型 ,必选项。

“len”: 该列的长度,只有type是BINARY或NCHAR时有效,可选项,缺省值是8。

“count”:该类型的连续列个数,可选项,缺省是1。

}],

“tags”: [{ 超级表的tags列表,type不能是timestamp类型, 最大支持128个。

“type”: 该列的数据类型 ,必选项。

“len”: 该列的长度,只有type是BINARY或NCHAR时有效,可选项,缺省值是8。

“count”:该类型的连续列个数,可选项,缺省是1。

}]

2、查询功能测试的json配置文件

{
"filetype": "query",
"cfgdir": "/etc/taos",
"host": "127.0.0.1",
"port": 6030,
"user": "root",
"password": "taosdata",
"confirm_parameter_prompt": "no",
"databases": "db",
"query_times": 2,
"query_mode": "taosc",
"specified_table_query": {
  "query_interval": 1,
  "concurrent": 3,
  "sqls": [
    {
      "sql": "select last_row(*) from stb0 ",
      "result": "./query_res0.txt"
    },
    {
      "sql": "select count(*) from stb00_1",
      "result": "./query_res1.txt"
    }
  ]
},
"super_table_query": {
  "stblname": "stb1",
  "query_interval": 1,
  "threads": 3,
  "sqls": [
    {
      "sql": "select last_row(ts) from xxxx",
      "result": "./query_res2.txt"
    }
  ]
}
}

“filetype”: 本taosdemo实例进行哪种功能测试。”query”表示数据查询功能。必选项

“cfgdir”: 配置文件taos.cfg所在的路径。因为taosdemo通过包含taos的动态库,去链接taosd服务,所以需要做好配置文件。可选项,缺省是 “/etc/taos”路径。

“host”: taosd服务的FQDN。可选项,缺省是“localhost“。

“port”: taosd服务的端口号。可选项,缺省是6030。

“user”: 用户名。可选项,缺省是“root“。

“password”: 密码。可选项,缺省是“taosdata”。

“confirm_parameter_prompt”: 执行过程中提示是否确认,为no时,执行过程无需手工输入enter。可选项,缺省是no。

“databases”: 数据库名称。必选项。

“query_times”: 每种查询类型的查询次数

“query_mode”: 查询数据接口,”taosc”:调用TDengine的c接口;“resetful”:使用restfule接口。可选项。缺省是“taosc”。

“specified_table_query”: { 指定表的查询

“query_interval”: 执行sqls的间隔,单位是毫秒。可选项,缺省是0。

“concurrent”: 并发执行sqls的线程数,可选项,缺省是1。每个线程都执行所有的sqls。

“sqls”: [{ 可以添加多个sql语句,最多支持100条。

“sql”: 查询语句。必选项。

“result”: 查询结果写入的文件名。可选项,缺省是空,表示查询结果不写入文件。

}] ​ },

“super_table_query”: { 对超级表中所有子表的查询

“stblname”: 超级表名称。必选项。

“query_interval”: 执行sqls的间隔,单位是毫秒。可选项,缺省是0。

“threads”: 并发执行sqls的线程数,可选项,缺省是1。每个线程负责一部分子表,执行所有的sqls。

“sqls”: [{ 可以添加多个sql语句,最多支持100条。

“sql”: “select count(*) from xxxx”。查询语句,其中表名必须写成 “xxxx”,实例会自动替换成子表名。restful使用db.xxxx。

“result”: 查询结果写入的文件名。可选项,缺省是空,表示查询结果不写入文件。

}] ​ }

注意:

1、每条sql语句后的保存结果的文件不能重名,且生成结果文件时,文件名会附加线程号。

2、 查询结果显示:如果查询线程结束一次查询距开始执行时间超过30秒打印一次查询次数、用时和QPS。所有查询结束时,汇总打印总的查询次数和QPS。

3、使用restful的接口时,需要使用dbname.tablename的形式做查询操作,eg:select last_row(*) from db.stb0。

3、订阅功能测试的json配置文件

{
  "filetype":"subscribe",
  "cfgdir": "/etc/taos",
  "host": "127.0.0.1",
  "port": 6030,
  "user": "root",
  "password": "taosdata",
  "databases": "db",
  "confirm_parameter_prompt": "no",
  "specified_table_query":
    {
      "concurrent":1,
      "mode":"sync",
      "interval":0,
      "restart":"yes",
      "keepProgress":"yes",
      "sqls": [
      {
        "sql": "select * from stb00_0 ;",
        "result": "./subscribe_res0.txt"
      }]
    },
  "super_table_query":
    {
      "stblname": "stb0",
      "threads":1,
      "mode":"sync",
      "interval":10000,
      "restart":"yes",
      "keepProgress":"yes",
      "sqls": [
      {
        "sql": "select * from xxxx where ts > '2021-02-25 11:35:00.000' ;",
        "result": "./subscribe_res1.txt"
      }]
    }
}

“filetype”: 本taosdemo实例进行哪种功能测试。”subscribe”表示数据查询功能。必选项

“cfgdir”: 配置文件taos.cfg所在的路径。因为taosdemo通过包含taos的动态库,去链接taosd服务,所以需要做好配置文件。可选项,缺省是 “/etc/taos”路径。

“host”: taosd服务的FQDN。可选项,缺省是“localhost“。

“port”: taosd服务的端口号。可选项,缺省是6030。

“user”: 用户名。可选项,缺省是“root“。

“password”: 密码。可选项,缺省是“taosdata”。

“databases”: 数据库名称。必选项

“confirm_parameter_prompt”: 执行过程中提示是否确认,为no时,执行过程无需手工输入enter。可选项,缺省是no。

注意:这里的订阅查询sql目前只支持select * ,其余不支持。

“specified_table_query”: { 指定表的查询

“concurrent”: 并发执行sqls的线程数,可选项,缺省是1。每个线程都执行所有的sqls。

“mode”: 订阅模式。目前支持同步订阅,缺省是sync。

“interval”: 执行订阅的间隔,单位是毫秒。可选项,缺省是0。

“restart”: 订阅重启。”yes”:如果订阅已经存在,重新开始,”no”: 继续之前的订阅。

“keepProgress”: 保留订阅信息进度。yes表示保留订阅信息,no表示不保留。该值为yes,restart为no时,才能继续之前的订阅。

“sqls”: [{

“sql”: 查询语句。必选项。

“result”: 查询结果写入的文件名。可选项,缺省是空,表示查询结果不写入文件。

}] ​ },

“super_table_query”: { 对超级表中所有子表的查询

“stblname”: 超级表名称。必选项。

“threads”: 并发执行sqls的线程数,可选项,缺省是1。每个线程都执行所有的sqls。

“mode”: 订阅模式。

“interval”: 执行sqls的间隔,单位是毫秒。可选项,缺省是0。

“restart”: 订阅重启。”yes”:如果订阅已经存在,重新开始,”no”: 继续之前的订阅。

“keepProgress”: 保留订阅信息进度。yes表示保留订阅信息,no表示不保留。该值为yes,restart为no时,才能继续之前的订阅。

“sqls”: [{

“sql”: ” select count(*) from xxxx “。查询语句,其中表名必须写成 “xxxx”,实例会自动替换成子表名。 ​

“result”: 查询结果写入的文件名。可选项,缺省是空,表示查询结果不写入文件。 ​

}] ​ } ​

注意:每条sql语句后的保存结果的文件不能重名,且生成结果文件时,文件名会附加线程号。


文档依据ver-2.1.0版本更新。