Skip to content

mo_ts_perf_test 工具指南

mo_ts_perf_test 是一款针对 MatrixOne 进行时序写入和查询测试工具。

Note

mo_ts_perf_test 工具目前只支持在 Linux 系统 x86 架构部署。

前置依赖

安装 mo_ts_perf_test

wget https://github.com/matrixorigin/mo_ts_perf_test/archive/refs/tags/v1.0.1.zip
unzip v1.0.1.zip

配置

根据实际情况修改 matrixone/conf 目录下的 db.conf 配置文件

root@host-10-222-4-8:~/soft/perf/mo_ts_perf_test-1.0.0/matrixone/conf# cat db.conf 
[dbInfo]
host = 127.0.0.1
port = 6001
user = root
password = 111
tablePrefix = d
point_query_ts_condition = '2017-07-14 10:40:06.379'
loadFilePath = /root/soft/perf/

配置说明:

  • tablePrefix: 为查为多表写入时,表名称的前缀,比如,值为 d,3 个客户端的话,会自动创建 3 个表:d0、d1、d2;
  • point_query_ts_condition: 为点查询时 ts 字段的过滤条件值;
  • loadFilePath: 为 load data infile 导入时,要导入的本地 csv 文件所在目录;注意:loadFilePath 路径必须是 MO 数据库本地路径,即:csv 文件要放到 MO 数据库所在服务器上。

使用 mo-write 执行写入测试

mo-write 为 MO 写入测试工具,命令为:

mo-write -T -r -n -retry -mode -txc -tType -wType -wType

Note

所有写入都是向 test 数据库下的表写,单表写入是向 d0 表写,多表写入是向 d0、d1、d2 等等(数量由客户端数据决定)。

参数说明

  • -T: 表示并发写入的客户端数量,默认为 7;
  • -r: 表示每次写入提交的数据行数,默认 10000;
  • -n: 表示每个客户端总共要导入的数据行数,默认 500000;
  • -retry: 表示测试次数(最终会自动计算写入速度的平均值),默认 1;
  • -mode: 表示写入模式,single 表示单表写入,multi 表示多表写入,默认 multi;
  • -txc: 表示每次事务提交的写入的次数,值>=0, 默认 0(0 表示不开启事务);
  • -tType: 表示写入表的类型,分别 ts、tsPK、intPK,默认 ts,ts 表示无主键时序表,tsPK 表示有主键时序表,intPK 表示主键为 int 类型的普通表;
  • -wType: 表示写入类型,分为 insert、loadLine、loadFile,insert 表示 insert into values 的方式写数据,loadLine 表示 load data inline 的方式写,loadFile 表示 load data infile 的方式导入本地 csv 文件来(本地 csv 数据文件获取:可通过 sr-write 自动生成在其上级 data 目录下)。

示例

  • 示例 1

使用默认配置写数据,即:7 个客户端使用 load data inline 的方式,分别向无主键的时序表(d0、d1…… d6)多表写入 500000 条数据(总共写入数据量:500000*7),每次写入 10000 行数据,测试一组数据:

root@host-10-222-4-8:~/soft/perf/mo_ts_perf_test-1.0.0/matrixone/mo-write# ./mo-write 
r=10000, T=7, n=500000, mode=multi, retry=1, txc=0, tType=ts, wType=loadLine 
dbConfig:{127.0.0.1 6001 root 111 d '2017-07-14 10:40:06.379'   /root/soft/perf/}
start create db conn, count:7
db connection[1] created.
db connection[2] created.
db connection[3] created.
db connection[4] created.
db connection[5] created.
db connection[6] created.
db connection[7] created.
mo-data of all clinet(7 thread) has ready!
Initialize database and table completed.
start preparing test data.
spend time of prepare testing data:7.255468 s
按 Y 或者 回车键,将开始插入数据,按 N 将退出, 开的第1次测试, txc=0 

start test 1 …….
spend time:7.405524 s
1 test: 3500000/7.405524 = 472620.159086 records/second
======== avg test: 472620.159086/1 = 472620.159086 records/second txc=0 ===========
  • 示例 2

2 个客户端使用 insert into 的方式,分别向有主键的时序表(d0)单表写 100000 条数据:

root@host-10-222-4-8:~/soft/perf/mo_ts_perf_test-1.0.1/matrixone/mo-write# ./mo-write -T 2 -n 100000 -mode single -tType tsPK -wType insert
r=10000, T=2, n=100000, mode=single, retry=1, txc=0, tType=tsPK, wType=insert 
dbConfig:{127.0.0.1 6001 root 111 d '2017-07-14 10:40:06.379'   /root/soft/perf/}
start create db conn, count:2
db connection[1] created.
db connection[2] created.
mo-data of all clinet(2 thread) has ready!
Initialize database and table completed.
start preparing test data.
spend time of prepare testing data:0.819425 s
按 Y 或者 回车键,将开始插入数据,按 N 将退出, 开的第1次测试, txc=0 

start test 1 …….
spend time:11.388648 s
1 test: 200000/11.388648 = 17561.347089 records/second
======== avg test: 17561.347089/1 = 17561.347089 records/second txc=0 ===========
  • 示例 3

1 个客户端使用 load data inline 的方式,向主键为 int 类型的普通表(d0)写 500000 条数据,测试一组数据:

root@host-10-222-4-8:~/soft/perf/mo_ts_perf_test-1.0.1/matrixone/mo-write# ./mo-write -T 1 -tType=intPK -retry 1
r=10000, T=1, n=500000, mode=multi, retry=1, txc=0, tType=intPK, wType=loadLine 
dbConfig:{127.0.0.1 6001 root 111 d '2017-07-14 10:40:06.379'   /root/soft/perf/}
start create db conn, count:1
db connection[1] created.
mo-data of all clinet(1 thread) has ready!
Initialize database and table completed.
start preparing test data.
spend time of prepare testing data:1.583363 s
按 Y 或者 回车键,将开始插入数据,按 N 将退出, 开的第1次测试, txc=0 

start test 1 …….
spend time:5.062582 s
1 test: 500000/5.062582 = 98763.826906 records/second
======== avg test: 98763.826906/1 = 98763.826906 records/second txc=0 ===========
  • 示例 4

8 个客户端使用 load data inline 的方式,通过事务提交(每次提交 10 次写入)向无主键的时序表(d0……d7)多表写 500000 条数据,自动测试 3 组求平均值:

root@host-10-222-4-8:~/soft/perf/mo_ts_perf_test-1.0.1/matrixone/mo-write# ./mo-write -T 8 -txc 10 -retry 3
r=10000, T=8, n=500000, mode=multi, retry=3, txc=10, tType=ts, wType=loadLine 
dbConfig:{127.0.0.1 6001 root 111 d '2017-07-14 10:40:06.379'   /root/soft/perf/}
start create db conn, count:8
db connection[1] created.
db connection[2] created.
db connection[3] created.
db connection[4] created.
db connection[5] created.
db connection[6] created.
db connection[7] created.
db connection[8] created.
mo-data of all clinet(8 thread) has ready!
Initialize database and table completed.
start preparing test data.
spend time of prepare testing data:7.854798 s
按 Y 或者 回车键,将开始插入数据,按 N 将退出, 开的第1次测试, txc=10 

start test 1 …….
开始事务提交写入, 一次事务提交的写入: 10
spend time:9.482012 s
1 test: 4000000/9.482012 = 421851.388088 records/second
按 Y 或者 回车键,将开始插入数据,按 N 将退出, 开的第2次测试, txc=10 

start test 2 …….
tables has truncated and start insert data ……
开始事务提交写入, 一次事务提交的写入: 10
spend time:10.227261 s
2 test: 4000000/10.227261 = 391111.576833 records/second
按 Y 或者 回车键,将开始插入数据,按 N 将退出, 开的第3次测试, txc=10 

start test 3 …….
tables has truncated and start insert data ……
开始事务提交写入, 一次事务提交的写入: 10
spend time:8.994586 s
3 test: 4000000/8.994586 = 444711.979564 records/second
======== avg test: 1257674.944485/3 = 419224.981495 records/second txc=10 ===========

使用 mo-query 执行查询测试

mo-query 为查询测试工具,测试 select *、点查询、常用聚合查询、时间窗口等查询的时间,所有查询都只查询 test 库里 d0 这一张表。命令为:

mo-query -T

参数说明

-T: 表示并发执行 select * 查询的客户端数量,默认为 1。

示例

root@host-10-222-4-8:~/soft/perf/mo_ts_perf_test-1.0.1/matrixone/mo-query# ./mo-query -T 5
T=5 
dbConfig:{127.0.0.1 6001 root 111 d '2017-07-14 10:40:06.379'   /root/soft/perf/}
start create db conn, count:5
db connection[1] created.
db connection[2] created.
db connection[3] created.
db connection[4] created.
db connection[5] created.
mo all clinet(5 thread) has ready!

 count value is:200000
'count(*)' query spend time:0.062345 s

'select *' (5 client concurrent query) spend time:0.850350 s
query speed: 1000000/0.850350 = 1175985.806764 records/second

 point query sql: select * from test.d0 where ts='2017-07-14 10:40:06.379'
'point query' spend time:0.001589 s

 avg value is: 0.07560730761790913
'avg(current)' query spend time:0.026116 s

 sum value is: 15121.461523581824
'sum(current)' query spend time:0.023109 s

 max value is: 3.9999022
'max(current)' query spend time:0.054021 s

 min value is: -3.9999993
'min(current)' query spend time:0.035809 s

TimeWindow query sql:select _wstart, _wend, max(current), min(current) from d0 interval(ts, 60, minute) sliding(60, minute)
2017-07-14 02:00:00 +0000 UTC 2017-07-14 03:00:00 +0000 UTC 3.9999022 -3.9999993
TimeWindow query spend time:0.180333 s