OceanBase和TiDB  Sysbench测试对比

开发者论坛 > 分布式数> 帖子正文


OceanBase和TiDB  Sysbench测试对比

mq4096 2018-10-10 回复 13 浏览 11978
[b] 1. 环境准备[/b] [table=100%,#ffffff,#dddddd,1][tr][td] 主机[/td][td] CPU[/td][td] E5-2430 0 @ 2.20GHz[/td][td] *24[/td][td] [/td][td] [/td][/tr][tr][td] [/td][td] 内存[/td][td] 8G[/td][td] *12[/td][td] [/td][td] [/td][/tr][tr][td] [/td][td] DISK[/td][td] SATA 2T[/td][td] *11[/td][td] 用LVM管理[/td][td] [/td][/tr][tr][td] [/td][td] 网卡[/td][td]千兆 [/td][td] [/td][td] [/td][td] [/td][/tr][/table] TiDB  7台机器:  PD(3台)+ TiKV(3台)+ TiDB(1台) OB     7台机器: OBServer(6台)+ OBProxy(1台) Sysbench 1.0 准备了 16个表,每个表1亿左右数据。 TiKV是自动把leader分散到三个机器上。OB通过设置将16个表打散到六台机器上。 [table=100%,#ffffff,#dddddd,1][tr][td] 数据初始化[/td][td] ./sysbench --test=./oltp_read_only.lua --mysql-host=***.***.82.173 --mysql-port=4001 --mysql-db=test --mysql-user="sbuser"  --mysql-password=sbtest --tables=16 --table_size=100000000 --threads=32 --time=300 --report-interval=5 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 prepare[/td][/tr][tr][td] 纯读场景[/td][td] ./sysbench --test=./oltp_read_only.lua --mysql-host=***.***.82.173 --mysql-port=4001 --mysql-db=test --mysql-user="sbuser"  --mysql-password=sbtest --tables=16 --table_size=100000000 --threads=96 --time=600  --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016 --secondary=on run[/td][/tr][tr][td] 读写混合场景[/td][td] ./sysbench --test=./oltp_read_write.lua --mysql-host=***.***.82.173 --mysql-port=4001 --mysql-db=test --mysql-user="sbuser"  --mysql-password=sbtest --tables=16 --table_size=100000000 --threads=32 --time=600 --report-interval=5 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run[/td][/tr][tr][td] 纯写场景[/td][td] ./sysbench --test=./oltp_write_only.lua --mysql-host=***.***.82.173 --mysql-port=4001 --mysql-db=test --mysql-user="sbuser"  --mysql-password=sbtest --tables=16 --table_size=100000000 --threads=32 --time=600 --report-interval=5 --db-driver=mysql --db-ps-mode=disable --skip-trx=on --mysql-ignore-errors=6002,6004,4012,2013,4016,1062 run[/td][/tr][/table] TiDB 集群安装详情 参见其他帖子 [url=https://bbs.aliyun.com/read/589420.html]TiDB集群手动安装[/url] OB集群安装详情参见其他帖子 [url=https://bbs.aliyun.com/read/589394.html]OceanBase集群手动安装[/url] [b]2. 纯读场景[/b] 报告 见图 [attachment=145361] 备注: 1. 前期初始化1亿*16表数据跑了近8个小时。OB的写特点是写增量在内存里不落盘,待内存使用达到某个阀值后触发冻结、转储和大合并事件。因此OB初始化过程中发生多次冻结事件有部分数据写入失败回滚。 2. 纯读场景刚开始,多跑几次性能会逐步变好。TiKV内部使用rocksdb引擎,数据IO都是buffer io,主机的pagecache达到43G左右不再增长,8-16个并发的时候,推测数据在pagecache命中率很高,所以tikv节点的io压力比observer的IO压力小(OB都是direct io),rt更好,qps更高。而OB主机随着并发增加,运行时间变成,block cache的命中率从80%提升到97%后,OB的rt 逐渐下降,observer节点的io压力从早期的100%回落到80%左右。 3. 观察tikv 和observer机器的io特点。tikv 节点磁盘的平均每个读io的大小在30K左右,observer节点磁盘的平均每个读io大小在12K左右。observer的block cache hit 大小对observer性能影响比较大。磁盘的性能对tikv影响比较大。 4. 最早的时候ob租户只选了3台机器,且只有一台机器提供服务。后来误判性能跟不上,就直接将租户扩容到6台机器全部使用。 [b]3. 读写混合场景[/b] 报告见图 [attachment=145365] [b]4. 纯写场景[/b] 报告见图 [attachment=145366] 备注: 1. 在128并发的时候,OB的QPS反而下降了,分析发现是此时 数据报错(主要是主键冲突)增多导致。 [b]5. 总结[/b] [b] [/b] a. 对TiDB了解很浅,配置文件主要是参考网友方法搭建,可能存在某些参数不是最优。而这个机器的配置是为OceanBase做过定制。这方面对二者性能可能有些影响。如果有人有好的经验,欢迎指出来。 b. 机器的磁盘是SATA盘,属于生产环境下线的老机器。最新的机器都是普通ssd做raid 5.  这个SATA盘对TiDB的性能可能影响比较大,不过对OB影响不大。后面我会再换ssd机器做对比测试。 c. 早期做过16个表*1kw数据的测试,结论也是这样。这里每个表1亿的数据量,对OB的影响还是有一点,因为没有用分区表,所以对表的随机读取会触发很多磁盘io。当OB的block cache 命中率达到97%后,这部分影响基本消失。 d. TiDB的架构特点是计算与存储分离,OB的架构里没有做分离。6个observer节点作用一样,都承担sql运算和数据存储功能。从细节上来说这个对比很难做到公平,但从客户角度,同样提供7台机器,看总的性能输出还是有说服力的。
展开全部内容
<上一篇 下一篇>
苍穹之巅007 1楼 2018-10-10
赞,什么时候跑下tpcc对比下
mq4096 2楼 2018-10-10
恩。TPCC将会在 OB 2.1版本后开始测试。 预计11月底可以。
mq4096 3楼 2018-10-10
上面OB使用了6台机器。考虑到TiDB是用三台存储节点提供服务。于是我把OB租户缩容到三台机器再重新测试一下。 测试脚本不变。 测试结论也不变。SATA盘性能确实不怎么好。当数据量非常大的时候,TiKV的主机Pagecache命中率和OBServer的Block cache命中率都不高的时候,都会有很多随机磁盘IO,磁盘的性能间接都会影响二者的RT和吞吐。 纯读场景 [attachment=145385] 读写混合 [attachment=145386] 纯写场景 [attachment=145387]
孜然炸鸡柳 4楼 2018-10-22
感谢楼主的分享
klkyy2018 5楼 2018-11-09
性能测试中资源都未占满的情况下,其他吃CPU的进程会对测试结果有影响吗?
沃什割手 6楼 2018-11-10
klkyy2018 7楼 2018-11-14
楼主能否贴一下测试的时候,sbuser的资源池是什么样的?
mq4096 8楼 2018-11-26
机器就是 [url]https://bbs.aliyun.com/read/589394.html[/url] 这个里面提到的。 资源池规格最大不超过单机的资源大小。
服务器云 9楼 2018-11-27
谢谢分享。

EricSyh 10楼 03-17
老哥跑tpcc时候可以用OB2.1 vs TiDB 3.0对比下,看TiDB 3.0的release note里撸了新的引擎换了rocksdb。
mq4096 11楼 03-19
恩,好。  记着了。
zhm 12楼 03-21
你好,我在用sysbench1.0测试oceanbase的时候报出如下错误,请问这是什么原因导致的,怎么解决呢 我的测试语句是: ../sysbench oltp_point_select.lua --mysql-host=xx.xxx.17.66 --mysql-port=8041 --mysql-user=xxxx --mysql-password=xxxx --mysql-db=obtest --tables=16 --table-size=1000000 --threads=64 --time=60 run 错误如下: FATAL: mysql_stmt_prepare() failed (last message repeated 3 times) FATAL: MySQL error: 1235 "Not supported feature or function" (last message repeated 2 times) FATAL: mysql_stmt_prepare() failed (last message repeated 1 times) FATAL: MySQL error: 1235 "Not supported feature or function" (last message repeated 2 times) FATAL: `thread_init' function failed: ./oltp_common.lua:291: SQL API error (last message repeated 5 times)
mq4096 13楼 03-25
请带上下面参数 试试 [backcolor=#ffffff][color=#333333][font=Arial]--db-ps-mode=disable  --mysql-ignore-errors=6002,6004,4012,2013,4016[/font][/color][/backcolor] [backcolor=#ffffff][color=#333333][font=Arial] [/font][/color][/backcolor] [color=#333333][font=Arial][backcolor=#ffffff]1. OB 1.4还不支持prepare 接口,所以需要禁用。[/backcolor][/font][/color] [font=Arial][backcolor=#ffffff][color=#333333]2. 在导入数据过程中,OB有可能因为冻结合并发生内部切主或者[/color][color=#ff0000]kill事务(1.x版本问题,2.x没有)[/color][color=#333333],需要客户端自动重连。所以要加上 一些error的忽略。否则sysbench客户端会话直接中断退出了。[/color][/backcolor][/font]

相关帖子