赞
踩
最近我们业务上也遇到数据库性能问题,我们有一个环节是扣费操作,在并发度较高的场景下,数据库延迟较高,吞吐降低。我们业务中的这个场景和秒杀场景一致。因此想使用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") then
db_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")
else
db_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的同学看到,觉得不对的地方可以联系我,看是否我哪个步骤不对。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。