最近我们业务上也遇到数据库性能问题,我们有一个环节是扣费操作,在并发度较高的场景下,数据库延迟较高,吞吐降低。我们业务中的这个场景和秒杀场景一致。因此想使用alisql来替换mysql,带来性能上的提升。

硬件配置

使用alisql之前,我们先对alisql的性能做压测。自己从alisql项目仓库 clone 了一份代码,然后编译安装。硬件采用8C-16G配置,为了做对照,另外弄了一个完全一样的机器部署mysql,同时,购买了8C-16G配置的阿里云rds,版本都是mysql 5.6。

软件配置

alisql 采用推荐配置推荐配置,mysql和rds采用默认配置。

指标

数据库的qps和rt

压测过程

采用性能基准测试工具sysbench,脚本采用alisql团队给出的测试脚本alisql_ic.lua

因为我们就想测试对于单表单行更新的性能,因此sysbench测试的表数量和表大小都设置为1。

这里顺便解释一下alisql_ic.lua脚本,其中有这么一段语句:

if (oltp_inventory_mysql_type == "alisql") thendb_query("UPDATE COMMIT_ON_SUCCESS ROLLBACK_ON_FAIL QUEUE_ON_PK 1 TARGET_AFFECT_ROW 1 " .. table_name .. " SET c=c+1 WHERE id = 1")elsedb_query("UPDATE " .. table_name .. " SET c=c+1 WHERE id = 1")end

如果参数oltp_inventory_mysql_type设置为alisql,则语句执行会有COMMIT_ON_SUCCESS ,作用是,如果带此hint的语句执行成功,事务就默认提交。这个有什么好处呢?正常的使用方法是更新、等待成功、发commit。加这个hint可以减少事务提交的最后一次交互,在系统压力大或者网络较长的场景下,这是可以减少事务持续时间,提升整体吞吐量的,另外还有参数是提示排队的。

接下来就是设置不同的线程数,采用sysbench 来压测了,prepare、run、cleanup和其他压测情况一下。我们所采用的压测语句如下:

sysbench --mysql-host=localhost --mysql-port=3306 --mysql-user=username --mysql-password=passwd /opt/sysbench-1.0.3/tests/include/oltp_legacy/alisql_ic.lua --oltp-table-size=1 --oltp-tables-count=1 --num-threads=2 --time=60 --max-requests=0 --report-interval=1 --db-driver=mysql prepare

结果

thread alisql_qps alisql_rt mysql_qps mysql_rt rds_qps rds_rt
1 513.64 5.84 948.69 3.16 853.73 3.51
2 540.91 11.09 988.01 6.07 1732.29 3.46
4 569.68 21.06 980.23 12.24 2218.52 5.41
8 552.33 43.43 953.41 25.16 2174.28 11.03
16 561.18 85.47 975.10 49.20 2205.97 21.75
32 553.12 173.28 1007.76 95.18 2250.48 42.64
64 554.19 345.41 983.85 194.82 2210.52 86.79

其实看结果,很明显能够看出来。alisql比普通的mysql的性能还差。
我们自己也用写了个小工具来做压测对比,得到的结果也是alisql表现的性能比mysql差。仔细想想alisql性能比较差,应该是采用了推荐配置导致的,推荐配置和mysql的默认配置不一样。

结果比较意外,这里我们怀疑的是开源的这部分alisql并没有把批处理特性开放出来,所以用起来感觉就是个普通的mysql,毫无差别,这里我还黑了我们运维是否编译的是一个原生mysql。看结果rds的性能最好,rds是阿里云提供的收费的数据库服务,这些好不容易开发出来的特性,肯定不会那么容易开放出来吧。

在我们业务中当然没有采用alisql,我们自己在业务层做了一些优化,这个后续会拿出来介绍。

如果有alisql的同学看到,觉得不对的地方可以联系我,看是否我哪个步骤不对。

开源alisql压测批处理性能相关推荐

  1. RocketMQ这样做,压测后性能提高30%

    从官方这边获悉,RocketMQ在4.9.1版本中对消息发送进行了大量的优化,性能提升十分显著,接下来请跟着我一起来欣赏大神们的杰作. 根据RocketMQ4.9.1的更新日志,我们从中提取到关于消息 ...

  2. 系统性能指标、压测、性能优化思路

    压测 压力测试考察的是当前软硬件环境下系统所能承受的最大负荷并帮助找出系统的瓶颈所在,压测都是为了系统在线上的处理能力和稳定性维持在一定的范围内,做到心中有数. 使用压力测试,我们有希望找到很多种用其 ...

  3. Mall商城的高级篇的开发(二)性能压测和性能监控

    Mall商城的高级篇的开发(二) 性能压测–压力测试 压力测试考察当前软件硬件环境下系统所能承受的最大负荷并帮助找出系统的瓶颈所在.压测都是为了系统在上线的处理能力和稳定性维持在一个标准的范围内,做到 ...

  4. 开源网络压测工具dperf登上了github C语言趋势榜

    dperf上了github C语言趋势榜.向支持dperf的朋友们说声谢谢. dperf是目前世界性能最高开源网络压力测试仪.性能可以达到100Gbps,每秒1千万TCP新建连接,几十亿TCP并发连接 ...

  5. linux下使用ab压测接口性能方法

    ab -r -k -n 100000 -c 500 www.baidu.com/login -r 表示遇到错误继续 -k 表示keepalive -n表示总共请求的次数 -c表示每次请求的数量(即并发 ...

  6. 性能压测工具选型对比

    本文是<Performance Test Together>(简称PTT)系列专题分享的第二期,该专题将从性能压测的设计.实现.执行.监控.问题定位和分析.应用场景等多个纬度对性能压测的全 ...

  7. Java 应用压测性能问题定位经验分享

    什么是压测 压测,即压力测试,是确立系统稳定性的一种测试方法,通常在系统正常运作范围之外进行,以考察其功能极限和和可能存在的隐患. 压测主要用于检测服务器的承受能力,包括用户承受能力,即多少用户同时使 ...

  8. 推荐一款国内首个开源线上全链路压测平台

    关注上方"测试开发技术",选择星标, 干货技术,第一时间送达! 开课通知:重磅消息 | 2021年最新全栈测试开发技能实战指南(第2期) 前不久国内知名的系统高可用专家数列科技宣布 ...

  9. 首个生产环境全链路压测平台Takin正式开源

    6月25日,国内知名的系统高可用专家数列科技宣布开源旗下核心产品能力,对外开放生产全链路压测平台产品的源代码,并正式命名为Takin. 目前中国人寿.顺丰科技.希音.中通快递.中国移动.永辉超市.爱库 ...

  10. web版本 开源压测工具_免费压测工具

    很多的web应用在搭建服务器完成后,为了让搭建的服务能够满足用户的访问需求,通常需要测试自己应用的并发连接能力.需要使用一些压测工具,本文介绍一些免费的开源的压测工具,可以用于简单的压力测试(实验均在 ...

最新文章

  1. 【138天】尚学堂高淇Java300集视频精华笔记(84)
  2. Godaddy如何导入导出MSSQL数据库
  3. oracle分区交换有啥好处,分区交换的速度为什么快?
  4. 探讨视频云与边缘云平台的竞争力 ——基于Serverless的端边云一体化媒体网络...
  5. 对session和cookie的一些理解
  6. Android—OkHttp同步异步请求过程源码分析与拦截器
  7. NAND FLASH分区规划
  8. priority_queue+贪心:运输(题解)
  9. 永恒边境白羊座服务器维护,永恒边境升级攻略 速升50级技巧
  10. 扁平图文列表小程序模板
  11. SpringMVC(十三)异常注解
  12. shell脚本命令(记录)
  13. LARGE_INTEGER类型和QueryPerformanceFrequency()
  14. 如何快速上手一个项目
  15. jQuery学习笔记(一) 取值、赋值的基本方法
  16. 面向对象(Python):学习笔记之模块和包
  17. mongoDB快速入门
  18. Lipschitz连续,一致连续
  19. 详解CheckStyle的检查规则(共138条规则)
  20. 面向过程与面向对象的区别

热门文章

  1. 项目进度管理表模板_IT项目进度管理—你能驾驭的项目节奏
  2. 挑战程序设计竞赛是c语言编写的嘛,POJ 2115 C Looooops 题解《挑战程序设计竞赛》...
  3. UWB与蓝牙AOA定位技术简要对比
  4. 无人机4G数传一站多机模式
  5. 蓝桥杯题目练习(加法运算)
  6. Java开发过程中遇到的问题及解决方法
  7. echarts-map的使用
  8. #转载汉化 用C++写出来的人工智能围棋游戏
  9. text——Android下的默认字体详解
  10. docker 定时重启脚本_群晖Docker容器定时执行重启任务