(转载自公众号DBATech)

一、测试环境

1、tidb 集群架构:

测试使用最基本的TiDB架构。即 3个tidb-server节点+ 3个tikv节点 + 3个pd节点。

2、tidb集群的部署环境(混合部署):

192.168.xx.A 1*server +1*PD +1*tikv

192.168.xx.B 1*server +1*PD +1*tikv

192.168.xx.C 1*server +1*PD+1*tikv

IDC机器环境:

0S :CentOS7

CPU :Intel(R) Xeon(R) CPU E5-2620 v3 @ 2.40GHz  *24

RAM :48GB

DISK :SSD, 480GB RAID0

TiDB 重要配置参数

以下这些参数都是会对tidb造成性能影响的参数。设置尽量折中。较少对性能的影响。

tidb-server节点的设置:

[log]

level = "warn"

[prepared-plan-cache]

enabled = true

log-level = "warning"

[raftstore]

sync-log = false

tikv节点的设置:

log-level = "warning"

[rocksdb.defaultcf]

[rocksdb.writecf]

block-cache-size = "6GB"    #关于写的缓存块大小  大概设置为读的1/3

max-background-jobs = 8  #后台线程,用于压缩数据与刷新数据

[raftstore]

sync-log = false

[storage.block-cache]

capacity = "20GB"   # 3.0之后 tikv的缓存,包括  rocksdb.defaultcf rocksdb.writecf  rocksdb.lockcf raftdb.defaultcf 都由改参数设置,缓存共享。

集群正常启动后,在每个节点执行以下语句,关闭 失败事务重试。

set global tidb_disable_txn_auto_retry = off

3、sysbench client:

6 台机器 sysbench client (配置与tidb-server机器一模一样)。每次测试6个机器同时发起6个sysbench进程。sysbech client 均匀连接到 3 tidb-server节点上(每2台sysbench client 连接一个tidb-server节点)

由于测试由6个机器并发发起,因此执行结果的 TPS QPS error  reconnects 是 6 个sysbench client 之和。min max 为 6个节点的最小于最大值。avg 95th 为6个节点值的平均值。

sysbench 压测语句如下:

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxx --mysql-port=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-db=sysbench --db-driver=mysql --tables=50 --table-size=10000000 --report-interval=1 --threads=[线程从2-24变化]  --rand-type=uniform   --time=300 --max-requests=0  run

说明:每个sysbech client一次发起长达300秒测试。--max-requests=0 表示不限制测试达到的总qps。

测试数据准备:

sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=xxxx --mysql-port=xxxx --mysql-user=xxxx --mysql-password=xxxx --mysql-db=sysbench --db-driver=mysql --tables=50 --table-size=10000000 --report-interval=100 --threads=24  --rand-type=uniform   --time=0 --max-requests=0 prepare

数据量:50张表,每个表1000万数据。大约200GB数据。缓存参数capacity为20GB。缓存与持久化数据比例 大约为1:10

5 测试脚本:

本猿编写一小py小脚本( https://github.com/jiasirVan/dbtool/blob/master/bench2.py ) 。

配置文件sysbench.cnf:

[mysql]

ip=192.168.xx.x

port=xxxx

user=xxxx

password=xxxx

dbname=sysbench

[sysbench]

#生成的表数量

table_amount=50

#限制总的执行时间(秒) 0表示不限制

exectime=300

#每个表初始化多少行数据

rows=10000000

#请求的最大数目。默认为1000000,0代表不限制

max_request=0

#每n秒输出一次测试进度报告

interval=10

#指定sysbench的输出日志目录

logdir=/tmp/log

##并发压测的线程数

threadnumber=2,4,6,8,10,12,14,16,18,20,22,24

#指定用哪个lua脚本测试

lua_script=/usr/share/sysbench/oltp_update_index.lua

执行脚本:./bench2.py  -c sysbench.cnf  -r -f

测试结果直接格式化输出,大约如下(每一行为配置文件的一个threadnumber值,例如以下的2,4,6线程的输出)。

输出结果:

TPS    QPS    error/s    reconnects/s    min    avg    max    95th

110.98    1775.60    0.00    0.00    10.95    18.02    164.74    23.10

250.54    4008.68    0.00    0.00    9.72    15.96    243.09    19.65

415.15    6642.39    0.00    0.00    9.04    14.45    281.74    18.28

二、sysbench测试说明:

sysbench mysql 的测试类型:

#1. bulk_insert.lua  批量写入操作

#2. oltp_delete.lua 写入和删除并行操作

#3. oltp_insert.lua  纯写入操作

#4. oltp_point_select.lua  只读操作,条件为唯一索引列

#5. oltp_read_only.lua  只读操作,包含聚合,去重等操作 大多数情况用于统计的压测

#6. oltp_read_write.lua 读写混合操作,最常用的脚本  用于oltp系统的压测。

#7. oltp_update_index.lua 更新操作,通过主键进行更新

#8. oltp_update_non_index.lua 更新操作,不通过索引列

#9. oltp_write_only.lua 纯写操作,常用脚本,包括insert update delete

#10. select_random_points.lua 随机集合只读操作,常用脚本,聚集索引列的selete in操作

#11. select_random_ranges.lua 随机范围只读操作,常用脚本,聚集索引列的selete between操作

注:因为sysbench测试客户端机器与tidb服务器都在同机房。网络ping延迟大约为0.08ms 。可以忽略不计。

三 、开始测试

说明:所有的tidb-server与 sysbench 测试机器在同机房,多次ping 网络延迟大约在0.08ms左右,可以忽略不计。

1、唯一索引只读压测:

结论: 唯一索引读是数据库最高效的查询操作。从上图看,唯一索引select 的qps 在 client thread 并发达到 108 之后增长趋于平缓。大约qps在10万左右。平均时延也相对较低。在1ms以下。越大的并发,平均qps时延增加。

2、只读压测(包括聚合,去重,关联等复杂查询

结论:以上是各类读操作,包括 聚合,关联,去重等复杂的select操作的压测结果。比较符合分析系统型压测。根据上图压测,QPS 在 client thread 108 之后增长趋于平缓。QPS 大约在55000左右。

3、读写混合测试(读写比例为默认的7:3):

结论:读写混合压测针对OLTP在线系统,压测结果展示 ,大约在 client thread 为108并发之后,QPS增长趋于平缓。在 40000左右。时延随着并发数的增加不断的增大。

4、总结:

通过以上压测。架构为 3 tikv + 3 tidb-server+ 3 pd 架构的tidb分布式集群 在给定环境的下性能表现很好。client thread 并发支持在108 线程达到最大。继续增大并发,QPS 增长并不明显,会增大操作时延。在读写混合型的oltp系统中,QPS 达到 40000万左右。并发上比mysql更优,得益于tidb的分布式架构。但对于单个简单查询语句,mysql的响应时间更快。在大部分OLTP 系统上,都是简单select操作,tidb的响应时间在1毫秒一下。与mysql 相差不大。但 tidb 的分布式架构 支持更好的横向扩展。

TiDB 压力测试报告的更多相关文章

  1. jmeter压力测试报告 - DEMO

    XXX压力测试报告 时间:2015-08-04                                             测试人员:xxx 目录 XXX压力测试报告... 1 一  测试 ...

  2. jmeter压力测试报告

    XXX压力测试报告 时间:2015-08-04                                             测试人员:xxx 目录 XXX压力测试报告... 1 一  测试 ...

  3. [原]一个针对LVS的压力测试报告

    LVS 测试报告 测试计划 基本功能测试 流量压力测试 响应时间测试 配置正确性测试 灾难恢复测试 测试点 基本功能测试 客户端IP地址正确性 RealServer 访问Internet测试(包括Ip ...

  4. kbmMW 5.08.01压力测试报告

    上图为客户端测试结果,运行14小时,无异常报告.基于洞主封装的HttpsysTransport,基于ClientQuery完成25万多次数据库访问操作,含查询并对查询结果进行修改及增加新记录,然后提交 ...

  5. 双十一LoanMarket压力测试报告

    测试背景 评估服务器资源及几个重要接口的并发性能. 测试需求 由开发提供的5个重要接口: 业务场景 URL 访问量(万) TPS 请求比例(%) 随手借点-首页产品接口 /suishoujiedian ...

  6. 详细介绍windows下使用python pylot进行网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个安装软件,用来运行python程序,而pylot则是pytho ...

  7. Visual Studio 单元测试之三---压力测试

    原文:Visual Studio 单元测试之三---压力测试 我们都知道大名鼎鼎的LoadRuner,但是很少有人知道Visual Studio自带的Test也可以做些简单的压力测试,下面我们就介绍一 ...

  8. pylot网站压力测试

    windows下使用python进行网站压力测试,有两个必不可少的程序需要安装,一个是python,另一个是pylot.python是一个 安装软 件,用来运行python程序,而pylot则是pyt ...

  9. Jemter 压测基础(一)——基本概念、JMeter安装使用、分布式测试、导出测试结果、编写测试报告

    Jemter   压测基础(一) 1.压力测试的基本概念: 1.吞吐率(Requestspersecond) 服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请 ...

随机推荐

  1. git 清除远程仓库已经删除的本地分支 清除已经合并到master的本地分支

    在gitlab中执行deleted merged.也是可以在本地看到这些分支的 查看本地分支和追踪情况: git remote show origin 可以发现远程分支已被删除的分支,根据提示可以使用 ...

  2. python3报'ascii' codec can't encode characters in position 0-7: ordinal not in range(128)解决方法

    运行前指定export PYTHONIOENCODING为utf-8 如 export PYTHONIOENCODING=utf-8; python main.;y

  3. sequelize时间自动格式化

    问题 每次查询datetime的字段,显示出来都是这种格式 2019-08-27T12:02:05.000Z 解决办法 初始化Sequelize的时候传入dialectOptions参数 let se ...

  4. ABAP对象-面向对象(转)

    转自:https://www.jianshu.com/p/f847c8f71438 1 面向对象基础 不多赘述何为对象与类.简单回顾一下在面向对象特性. 封装 限定内部资源的可见性 多态 相同名称的方 ...

  5. Python【day 17-2】面向对象-成员

    '''''' ''' 1.简述面向对象三大特性并用示例解释说明?[背写] 1.封装 狭义的封装:把一组属性封装到一个对象,创建对象的时候 广义的封装:代码块,函数.对象.类.模块-py文件都是封装 把 ...

  6. TCP协议如何保证可靠传输?

    一.TCP的可靠传输如何保证? 在TCP连接中,数据流必须以正确的顺序传送给对方.TCP的可靠性是通过顺序编号和确认(ACK)实现的.TCP在开始传送一个段时,为准备重传而首先将该段插入到发送队列中, ...

  7. 采坑 - LODOP,打印预览

    结合 layui.弹出框内容样式如下: 红框表示,左右的内边距. 图一 打印预览的样式如下:红框表示,左右的内边距. 图二 要根据图二的左右内边距,去修改图一的左右内边距.不然会影响正文内容高度的判断 ...

  8. Python函数使用

    Python函数用def指定函数名,可以指定输入参数,可以指定参数的默认值,也可以用return指定返回值.调用时除了默认的位置赋值,也可按关键字赋值. 一.函数不带参数.没有返回值 def hell ...

  9. React教程:4 个 useState Hook 示例

    摘要: React示例教程. 原文:快速了解 React Hooks 原理 译者:前端小智 到 React 16.8 目前为止,如果编写函数组件,然后遇到需要添加状态的情况,咱们就必须将组件转换为类组 ...

  10. PHP代码篇(七)--PHP及MySQL已经使用过的函数

    一.PHP常用函数 //数组转字符串 $str = implode(',',$device_string); //字符串转数组 $arr = explode(',',$device_string); ...