开发者社区> 问答> 正文

OceanBase和TiDB  Sysbench测试对比


1. 环境准备


主机 CPU E5-2430 0 @ 2.20GHz *24
内存 8G *12
DISK SATA 2T *11 用LVM管理
网卡千兆

TiDB  7台机器:  PD(3台)+ TiKV(3台)+ TiDB(1台)
OB     7台机器: OBServer(6台)+ OBProxy(1台)

Sysbench 1.0
准备了 16个表,每个表1亿左右数据。 TiKV是自动把leader分散到三个机器上。OB通过设置将16个表打散到六台机器上。


数据初始化 ./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
纯读场景 ./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
读写混合场景 ./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
纯写场景 ./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

TiDB 集群安装详情 参见其他帖子 TiDB集群手动安装
OB集群安装详情参见其他帖子 OceanBase集群手动安装


2. 纯读场景


报告 见图
[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台机器全部使用。


3. 读写混合场景


报告见图
[attachment=145365]






4. 纯写场景


报告见图
[attachment=145366]


备注:
1. 在128并发的时候,OB的QPS反而下降了,分析发现是此时 数据报错(主要是主键冲突)增多导致。




5. 总结


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台机器,看总的性能输出还是有说服力的。







展开
收起
mq4096 2018-10-10 11:12:17 44688 1
8 条回答
写回答
取消 提交回答
  • zhm
    ReOceanBase和TiDBSysbench测试对比
    你好,我在用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)
    2019-03-21 17:15:44
    赞同 展开评论 打赏
  • 回 2楼mq4096的帖子
    老哥跑tpcc时候可以用OB2.1 vs TiDB 3.0对比下,看TiDB 3.0的release note里撸了新的引擎换了rocksdb。
    2019-03-17 16:01:27
    赞同 展开评论 打赏
  • 谢谢分享。

    2018-11-27 09:37:03
    赞同 展开评论 打赏
  • ReOceanBase和TiDBSysbench测试对比
    2018-11-10 00:27:28
    赞同 展开评论 打赏
  • ReOceanBase和TiDBSysbench测试对比
    性能测试中资源都未占满的情况下,其他吃CPU的进程会对测试结果有影响吗?

    -------------------------

    ReOceanBase和TiDBSysbench测试对比
    楼主能否贴一下测试的时候,sbuser的资源池是什么样的?
    2018-11-09 17:03:38
    赞同 展开评论 打赏
  • 感谢楼主的分享
    2018-10-22 20:28:34
    赞同 展开评论 打赏
  • OceanBase 对外技术输出。欢迎关注个人公众号:obpilot
    回 1楼(苍穹之巅007) 的帖子
    恩。TPCC将会在 OB 2.1版本后开始测试。 预计11月底可以。

    -------------------------


    上面OB使用了6台机器。考虑到TiDB是用三台存储节点提供服务。于是我把OB租户缩容到三台机器再重新测试一下。


    测试脚本不变。
    测试结论也不变。SATA盘性能确实不怎么好。当数据量非常大的时候,TiKV的主机Pagecache命中率和OBServer的Block cache命中率都不高的时候,都会有很多随机磁盘IO,磁盘的性能间接都会影响二者的RT和吞吐。


    纯读场景



    读写混合




    纯写场景




    -------------------------

    回 7楼(klkyy2018) 的帖子
    机器就是 https://bbs.aliyun.com/read/589394.html 这个里面提到的。 资源池规格最大不超过单机的资源大小。

    -------------------------

    回 10楼(EricSyh) 的帖子
    恩,好。  记着了。

    -------------------------

    Re:回 12楼(zhm) 的帖子
    请带上下面参数 试试


    --db-ps-mode=disable  --mysql-ignore-errors=6002,6004,4012,2013,4016


    1. OB 1.4还不支持prepare 接口,所以需要禁用。
    2. 在导入数据过程中,OB有可能因为冻结合并发生内部切主或者kill事务(1.x版本问题,2.x没有),需要客户端自动重连。所以要加上 一些error的忽略。否则sysbench客户端会话直接中断退出了。


    2018-10-10 16:58:36
    赞同 展开评论 打赏
  • ReOceanBase和TiDBSysbench测试对比
    赞,什么时候跑下tpcc对比下
    2018-10-10 16:48:31
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
MaxCompute基于BigBench标准的最新测试进展 立即下载
用AI 高效测试移动应用 立即下载
移动互联网测试到质量的转变 立即下载