kingshard的性能测试报告

原文:kingshard/kingshard_performance_test.md at master · flike/kingshard (github.com)

kingshard的性能测试报告

1.测试环境

1.1服务器配置

类别 名称
OS 云主机 Ubuntu 14.04 LTS
CPU Common KVM CPU @ 2.40GHz *4
RAM 8GB
DISK 500GB
kingshard master分支
Mysql v5.6.25
Sysbench v0.5

2.性能需求

  1. 测试通过kingshard转发SQL请求与直连DB发送SQL请求这两种情形下的性能差距。
  2. 测试配置文件中max_conns_limit参数对kingshard的影响,并找出最优值。

3.测试准备工作

3.1 kingshard性能测试环境搭建

利用上述配置的4台服务器搭建了一个kingshard性能测试环境:

  • 服务器A运行着sysbench
  • 服务器B运行着kingshard系统
  • 服务器C运行着主库
  • 服务器D运行着从库

四台服务器处在同一个网段中。具体的拓扑图如下所示:

https://github.com/flike/kingshard/blob/master/doc/KingDoc/kingshard_performance_test_resources/kingshard_performance_test_topology.png

有关kingshard系统安装与配置,请参考文档安装kingshard
有关sysbench v0.5的安装与命令选项,请参考sysbench

4.测试过程

执行下面的命令准备测试数据

time sysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/oltp.lua \
              --mysql-host=host \
              --mysql-port=9696 \
              --mysql-user=kingshard \
              --mysql-password=kingshard \
              --mysql-db=kingshard \
              --oltp-tables-count=1 \
              --oltp-table-size=1000000 \
              --num-threads=50 \
              --max-requests=1000000 \
              --report-interval=1 \
              prepare

上述命令会创建表sbtest1,数据量为100w,建表语句如下:

CREATE TABLE `sbtest1` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `k` int(10) unsigned NOT NULL DEFAULT '0',
  `c` char(120) NOT NULL DEFAULT '',
  `pad` char(60) NOT NULL DEFAULT '',
  KEY `xid` (`id`),
  KEY `k_1` (`k`)
) ENGINE=InnoDB AUTO_INCREMENT=1000001 DEFAULT CHARSET=utf8 MAX_ROWS=1000000;

4.1 kingshard与直连DB性能比较

利用sysbench测试通过kingshard转发SQL请求和直连DB发送SQL请求这两种情况下,kingshard和Mysql系统的两项数据指标:QPS和每条SQL请求平均处理时间
通过sysbench发送四类SQL请求:select、update、insert和delete,场景分别为只读、读写4比1和只写。

4.1.1 kingshard与直连DB只读比较

通过修改host、port执行下面的命令分别测试kingshard转发SQL或直连DB:

time sysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/select.lua \
              --mysql-host=host \
              --mysql-port=9696 \
              --mysql-user=kingshard \
              --mysql-password=kingshard \
              --mysql-db=kingshard \
              --oltp-tables-count=1 \
              --oltp-table-size=1000000 \
              --num-threads=16 \
              --max-requests=1000000 \
              --report-interval=1 \
              --max-time=20 \
              run

利用sysbench测试了并发线程个数不同的情况下,分别执行最大请求次数为100w的 select操作,通过修改--num-threads可以获得不同并发线程数。
测试连接 kingshard 和直连 DB 这两种情况下的 QPS(QPS越大,系统性能越好), 测试连接 kingshard 和直连 DB 这两种情况下的 执行sql平均时延(时延越小,系统性能越好), 每组数据重复测试三次后取平均值,具体数据对比如下表所示:

[图片上传中...(image-35fcab-1633922964088-9)]

上表对应的QPS折线图如下所示:

[图片上传失败...(image-91e3b1-1633922964088)]

上表对应的时延折线图如下所示:

[图片上传失败...(image-397753-1633922964088)]

4.1.2 kingshard与直连DB读写4:1比较

通过修改host、port执行下面的命令分别测试kingshard转发SQL或直连DB:

ysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/oltp.lua \
              --mysql-host=host \
              --mysql-port=3306 \
              --mysql-user=kingshard \
              --mysql-password=ks \
              --mysql-db=kingshard \
              --oltp-tables-count=1 \
              --oltp-table-size=1000000 \
              --num-threads=16 \
              --max-requests=1000000 \
              --report-interval=1 \
              --max-time=20 \
              run

利用sysbench测试了并发线程个数不同的情况下,分别执行最大请求次数为100w的 select、update、insert、delete等混合操作,通过修改--num-threads可以获得不同并发线程数。
测试连接 kingshard 和直连 DB 这两种情况下的 QPS(QPS越大,系统性能越好), 测试连接 kingshard 和直连 DB 这两种情况下的 执行sql平均时延(时延越小,系统性能越好), 每组数据重复测试三次后取平均值,具体数据对比如下表所示:

[图片上传失败...(image-79d667-1633922964088)]

上表对应的QPS折线图如下所示:

[图片上传中...(image-bcb155-1633922964088-5)]

上表对应的时延折线图如下所示:

[图片上传失败...(image-d75eb-1633922964088)]

4.1.3 kingshard与直连DB只写比较

通过修改host、port执行下面的命令分别测试kingshard转发SQL或直连DB:

time sysbench --test=/data/home/test_user/software/sysbench/sysbench/tests/db/insert.lua \
              --mysql-host=host \
              --mysql-port=3306 \
              --mysql-user=kingshard \
              --mysql-password=ks \
              --mysql-db=kingshard \
              --oltp-tables-count=1 \
              --oltp-table-size=1000000 \
              --num-threads=16 \
              --max-requests=1000000 \
              --report-interval=1 \
              --max-time=20 \
              run

利用sysbench测试了并发线程个数不同的情况下,分别执行最大请求次数为100w的insert操作,通过修改--num-threads可以获得不同并发线程数。
测试连接 kingshard 和直连 DB 这两种情况下的 QPS(QPS越大,系统性能越好), 测试连接 kingshard 和直连 DB 这两种情况下的 执行sql平均时延(时延越小,系统性能越好), 每组数据重复测试三次后取平均值,具体数据对比如下表所示:

[图片上传中...(image-14d761-1633922964088-3)]

上表对应的QPS折线图如下所示:

[图片上传失败...(image-fa0315-1633922964088)]

上表对应的时延折线图如下所示:

[图片上传中...(image-6c7b3d-1633922964088-1)]

从QPS折线图可以看出,当sysbench的并发测试线程较少时,连接kingshard和直连DB的QPS差距较大。 这主要是因为当sysbench并发线程少时,kingshard的性能没有得到充分的发挥, sysbench只有很少的线程向kingshard发送请求,此时网络延迟对QPS的影响是最主要的。

当sysbench的并发测试线程较大时,此时kingshard的性能就得到了充分的发挥, QPS的对比是连接kingshard与直连DB性能对比的真实的反应,网络延迟对QPS的影响作用就显得很小了。

从以上几个表个的比例数据来看,通过kingshard转发select请求时的QPS是直连DB时80%左右, 而update和insert请求对应的QPS则更高一些,相当于直连DB时的85%左右,甚至在并发更高的情况下直连mysql的性能低于通过kingshards转发的性能。 由此看来利用kingshard转发SQL请求带来的性能下降虽有下降,但完全可以接受,甚至高并发场景下kingshard的性能优于直连DB的性能。这也是得益于kingshard在高并发的时候,充分利用了连接池的作用,降低了高并发带来的竞争消耗。

sysbench并发线程高于512的数据并没有给出,因为直连DB已经不能正常完成测试,但是kingshard可以完成。

4.2 max_conns_limit参数对kingshard性能影响

max_conns_limit 是 kingshard 初始化时创建的与后端mysql长连接个数,这个值设置的不同对 kingshard 性能也有比较明显的影响。 我们猜测max_conns_limit除了与kingshard所在主机CPU核心数有关外还与后端mysql能接纳的连接数有关。 我们分别测试将 max_conns_limit 设置为16、32、64、128、256、512时,kingshard转发select,update和insert三类操作请求时的 QPS, SQL的混合情况为读写4比1,且sysbench的不同sql分别处于不同的事务中,具体对比结果如下所述:

上数测试对应的QPS折线图如下所示:

[图片上传失败...(image-5633c9-1633922964088)]

从kingshard处理三类SQL操作的QPS对比来看,将max_conns_limit参数设置为128左右较为合理, 高于128后通过提高max_conns_limit值并没有显著效果。

max_conns_limit参数值与kingshard所在主机核心数并没有必然的联系,与后端mysql主机可承受连接数关系密切。

5.测试结论

本文主要测试了通过kingshard转发SQL请求与直连DB发送SQL请求这两种情形下的性能差距,和max_conns_limit值对kingshard的性能影响。
ks的读写性能平均可以达到原生mysql性能的80%,一定条件下可以达到90%,随着并发数的增加甚至能超越mysql本身。
ks可以对mysql形成保护,增加了ks后,db层对外表现出可以接收更高的并发数,且执行时间长短不同的sql使用各自的资源,形成了资源隔离,mysql不会出现性能毛刺。
综合以上测试结果来看,kingshard性能表现较为优秀,并没有明显的性能下降。同时在测试中发现kingshard系统属于CPU密集型任务,相对于磁盘IO和内存占用率而言,kingshard对CPU消耗显得最为明显,所以建议在部署kingshard的时候需要优先考虑服务器的CPU性能。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容