性能测试

一、测试背景

1、机器配置和版本

机器配置(下面测试qps数据都是以本机器配置为准)

型号:Dell s3710
磁盘:SSD 3T
CPU:32
内存:128G MySQL版本:5.7.22
gh-ost版本:1.0.46
pt-osc版本:3.0.12

2、数据准备和业务模拟

----插入1000万条数据,表大小约2G--
sysbench --mysql-user=darren --mysql-password=darren --mysql-host=10.126.126.164 --mysql-port=3306 --test=tests/db/oltp.lua \
--oltp_tables_count=1 --oltp-table-size=10000000 --rand-init=on prepare ----64个并发线程模拟SQL----
sysbench --mysql-user=darren --mysql-password=darren --mysql-host=10.126.126.164 --mysql-port=3306 --test=tests/db/oltp.lua \
--oltp-reconnect-mode=transaction --oltp_tables_count=1 --oltp-table-size=10000000 --num-threads=64 --oltp-read-only=off \
--report-interval=10 --rand-type=uniform --max-time=6000 --max-requests=0 run

二、性能测试

1、测试工具命令

-----------------------------------------gh-ost-------------------------------------------
time gh-ost \
--max-load=Threads_running=70 \
--critical-load=Threads_running=80 \
--chunk-size=1000 \
--dml-batch-size=100 \
--initially-drop-old-table \
--initially-drop-ghost-table \
--initially-drop-socket-file \
--ok-to-drop-table \
--host="10.126.126.164" \
--port=3306 \
--user="darren" \
--password="darren" \
--assume-rbr \
--allow-on-master \
--assume-master-host=10.126.126.164:3306 \
--database="sbtest" \
--table="sbtest1" \
--alter="drop primary key" \
--panic-flag-file=/tmp/ghost.panic.flag \
--serve-socket-file=/tmp/ghost.sock \
--verbose \
--execute -----------------------------------------pt-osc-------------------------------------------
time pt-online-schema-change \
--user=darren \
--password=darren \
--port=3306 \
--host=10.126.126.164 \
--alter "engine=innodb" \
D=sbtest,t=sbtest1 \
--max-load="Threads_running=70" \
--critical-load="Threads_running=80" \
--execute

2、单表高负载测试(64个并发线程,写入QPS:26927)

DDL类型 执行前QPS(r/w) pt-osc执行时间 pt-osc执行时QPS(r/w) gh-ost执行时间 gh-ost执行时QPS(r/w) online执行时间 online执行时QPS(r/w)
添加普通索引 (94254/26927) 8m32.448s (73123/22011) 无法完成,一直在追日志 (91363/24880) 1 min 5.76 (0.00/0.00)
删除普通索引 (93112/26543) 7m59.124s (74021/21280) 无法完成,一直在追日志 (91363/24880) 0.03s (92902/26043)
修改普通索引名 (92993/26887) 8m27.328s (75089/23321) 无法完成,一直在追日志 (90291/23879) 0.00s (92110/26876)
添加主键索引 (89991/26012) 18m53.515s (73021/19872) 无法完成,一直在追日志 - 1 min 5.44 s (79282/20838)
删除主键索引 (89809/25667) 不支持 - 不支持 - 1 min 48.03s (0/0)
添加列 (92484/26312) 8m12.238s (73521/21953) 无法完成,一直在追日志 (90362/25821) 4 min 16.05 (0.00/0.00)
删除列 (92001/26933) 8m15.085s (78430/22397) 无法完成,一直在追日志 (91138/26041) 5 min 20.69 s (0.00/0.00)
修改列类型 (91990/26989) 8m49.021s (73421/21859) 无法完成,一直在追日志 (93238/26123) 2 min 2.76 (0.00/0.00)
修改列名 (92901/27045) 8m03.559s (73552/22001) 无法完成,一直在追日志 (92998/25899) 0.01s (92808/27001)
修改列默认值 (93328/26312) 8m19.230s (74001/22339) 无法完成,一直在追日志 (92298/25005) 0.01s (91990/26909)
修改列注释 (93029/27049) 7m50.689s (73504/21992) 无法完成,一直在追日志 (91900/25698) 0.01s (92989/27022)
修改自增值 (92314/26978) 8m08.329s (72990/22334) 无法完成,一直在追日志 (92398/26821) 0.00s (91990/26876)
优化表 (93253/26312) 8m50s.120s (73523/22323) 无法完成,一直在追日志 (91092/27090) 2 min 21s (0.10/0.00)

3、单表正常负载测试(4个并发线程以下,写入QPS5000以下)

DDL类型 执行前QPS(r/w) pt-osc执行时间 pt-osc执行时QPS(r/w) gh-ost执行时间 gh-ost执行时QPS(r/w) online执行时间 online执行时QPS(r/w)
添加普通索引 (19341/5525) 3m46.584s (14474/4134) 23m37.340s (17224/4920) 25.89s (18713/5346)
删除普通索引 (19311/5606) 2m53.548s (14089/4033) 16m45.551s (17335/4953) 0.01s (19050/5439)
修改普通索引名 (19299/5510) 4m2.699s (14321/4103) 17m39.098s (17098/4934) 0.00s (19298/5409)
添加主键索引 (18993/6087) 16m29.108s (10089/3321) 无法完成,一直在追日志 - 1 min 5.44 s (16202/3089)
删除主键索引 (19993/5887) 不支持 - 不支持 - 1m52s (0/0)
添加列 (19248/5540) 3m0.202s (13441/3840) 24m14.164s (17359/4960) 2m40.44 (18606/5316)
删除列 (19200/5472) 4m1.786s (13208/3888) 23m2.302s (17116/4890) 1m29.71 sec (18026/5389)
修改列类型 (19199/5618) 4m0.872s (13212/3901) 22m3.992s (17818/5090) 2 m49.54s (0.00/0.00)
修改列名 (19150/5472) 3m49.122s (13200/3890) 23m0.387s (17959/5130) 0.01 s (19101/5411)
修改列默认值 (19332/5014) 2m51.322s (13902/3860) 24m3.712s (17789/4987) 0.01s (19211/5493)
修改列注释 (19302/5388) 4m1.302s (13443/3844) 23m3.902s (17289/4887) 0.00s (19201/5421)
修改自增值 (19231/5339) 3m3.112s (13903/3904) 21m3.002s (17399/4917) 0.00s (19008/5239)
优化表 (19372/5533) 2m47.955s (13230/3780) 17m41.545s (17255/4929) 1m37.13 (18977/5421)

【注】

经过测试:当写入QPS5000以上,gh-ost无法完成任务,其原因是apply binlog是单线程,可以理解为slave,当原表写入量巨大时(QPS=5000以上),
一直在应用日志,而gh-ost设计是binlog应用优先级高于row copy,所以我们看到row copy进度一直没变,这样如果原表一直压力这么大,那么gh-ost DDL将无法完成。
经过在s3710机器上测试如果原表写入的QPS大于5000将大概率出现此情况,小于5000的话没问题。 Copy: 0/9705089 0.0%; Applied: 183480; Backlog: 1000/1000; Time: 1m24s(total), 1m24s(copy); streamer: tjtx-126-164.001588:441763689;
Copy: 0/9705089 0.0%; Applied: 185490; Backlog: 1000/1000; Time: 1m25s(total), 1m25s(copy); streamer: tjtx-126-164.001588:442986068;
Copy: 0/9705089 0.0%; Applied: 207590; Backlog: 1000/1000; Time: 1m30s(total), 1m30s(copy); streamer: tjtx-126-164.001588:455843331;

三、各个工具优缺点对比

四、建议的DDL方案

1、MySQL5.5版本DDL方案

MySQL5.5版本online ddl功能不完善,建议全部使用PT-OSC工具进行

2、MySQL5.6和5.7版本DDL方案

3、MySQL8.0版本DDL方案

MySQL DDL方案测试及选型.的更多相关文章

  1. MySQL ddl丢表

      MySQL ddl丢表: MySQL server层为了和innodb层保持数据一致性,在写binlog和redo log时,引入了两阶段提交,但不同的变更产生的日志并非都使用这种策略. 下面就来 ...

  2. Mysql主从方案的实现

    Mysql主从方案介绍 mysql主从方案主要作用: 读写分离,使数据库能支撑更大的并发.在报表中尤其重要.由于部分报表sql语句非常的慢,导致锁表,影响前台服务.如果前台使用master,报表使用s ...

  3. mysql+mycat压力测试一例【转】

    前言 有很多人担心生产系统上新东西的程序怕压力跟不上和稳定性不行,是的,大家都怕,所以领导要求做一次压力测试,我个人也觉得是有必要的. 如果按原理来说,mycat如果不做分片,纯粹只是代理的话,他所做 ...

  4. 实战体验几种MySQL Cluster方案(转)

    1.背景 MySQL的cluster方案有很多官方和第三方的选择,选择多就是一种烦恼,因此,我们考虑MySQL数据库满足下三点需求,考察市面上可行的解决方案: 高可用性:主服务器故障后可自动切换到后备 ...

  5. Mysql备份方案总结性梳理

    Mysql备份方案总结性梳理   服务器 mysql 日志 数据库 配置 Mariadb binlog   mysql数据库备份有多么重要已不需过多赘述了,废话不多说!以下总结了mysql数据库的几种 ...

  6. MySQL MHA 搭建&测试

    一:背景介绍 MHA(Master HA)是一款开源的MySQL的高可用工具,能在MySQL主从复制的基础上,实现自动化主服务器故障转移.虽然MHA试图从宕机的主服务器上保存二进制日志,但并不是总是可 ...

  7. MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS[转]

    MySQL HA方案之MySQL半复制+MHA+Keepalived+Atlas+LVS 简介 目前Mysql高可用的方案有好多,比如MMM,heartbeat+drbd,Cluster等,还有per ...

  8. linux .net mono方案测试记录与报告(一)

    第一阶段 linux .net 方案测试 硬件为4核8线程的笔记本i7-4710mq 分配了4个线程 情况下 1.方案一 nginx+fastcgi-mono-server4方式 性能为每秒处理140 ...

  9. MySQL安装之“测试”

    将MySQL安装完成之后还需要对其进行测试,判断MySQL是否安装成功,MySQL其可视化与我们之前使用过的SQLserver不同.MySQL其中测试方法有两种:一.使用MySQL命令进行测试:二.安 ...

随机推荐

  1. Flash AS 2.0右键菜单问题

    这几天都在忙这个右键菜单,因为之前的右键菜单都不能用了,必须做新的. 可是又必须使用原来2.0的接口和方法,真是忙的焦头烂额. 之前2.0的东西太多又太杂. 我头一个右键菜单和二级菜单没有问题了,做第 ...

  2. ubuntu安装scala详细教程

    ubuntu14 安装scala详细教程 1.下载scala压缩包 http://www.scala-lang.org/download/ 2.建立目录,解压文件到所建立目录 $ sudo mkdir ...

  3. uva 465 - Overflow 高精度还是浮点数?

    uva 465 - Overflow  Overflow  Write a program that reads an expression consisting of two non-negativ ...

  4. 尼康D90多点对焦

    11点对焦 上市时间 2008 类型 单反数码相机 对焦方式 单区域AF:在选择区域内只对焦于目标可以从11个AF点传感器中的任意一个中选择 动态区域AF:对焦于选择区域的目标上,如果目标离开原来位置 ...

  5. Charlse 抓包

    下载Charlse:https://www.charlesproxy.com/ 安装使用: https://www.cnblogs.com/ceshijiagoushi/p/6812493.html ...

  6. PowerDesigner使用教程3

    from:http://www.cnblogs.com/langtianya/archive/2013/03/08/2949118.html PowerDesigner是一款功能非常强大的建模工具软件 ...

  7. Eclipse UML插件

    Green UML http://green.sourceforge.net/ AmaterasUML http://amateras.sourceforge.jp/cgi-bin/fswiki_en ...

  8. IOS控件:分歧解决其(UILabel 和 IBAction)

    #import <UIKit/UIKit.h> @interface demo7_dayViewController : UIViewController { // 用来显示程序结果 IB ...

  9. 【BZOJ4596】[Shoi2016]黑暗前的幻想乡 容斥+矩阵树定理

    [BZOJ4596][Shoi2016]黑暗前的幻想乡 Description 幽香上台以后,第一项措施就是要修建幻想乡的公路.幻想乡有 N 个城市,之间原来没有任何路.幽香向选民承诺要减税,所以她打 ...

  10. jquery的jsonp相关

    <!DOCTYPE html><html><head ><meta charset="utf-8"><script src=& ...