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版本更新。