sysbench压测sharding proxy和cobar,发现sharding proxy读写性能不及cobar

方便更快捷的说明问题,可以按需填写(可删除)

使用环境:

使用sysbench0.5测试cobar和sharding proxy ,发现sharding proxy读写性能和cobar相比,无论是insert还是udpate,sharding proxy性能均不及cobar。

场景、问题:

在不同并发场景下对cobar和sharding proxy进行压测,发现在insert和select,update场景下,sharding proxy的性能均不及cobar。做了sbtest1到sbtest10共十张表, cobar和sharding proxy后端均是8个分库,每个分库中一个物理表,逻辑表sbtest1后端有8个物理子表,每张逻辑表100万条记录,后端每个物理子表12.5万记录,分片键都是k字段,为了适配分库分表场景,已经将sysbench脚本中的update_index.lua和select.lua脚本中的where条件从id改为k,如下所示

下面是sharding proxy的配置部分截图


insert场景

已进行操作:

插入压测命令
for i in 16 32 64 128 256 512 768 1024
do
sysbench --test=/usr/local/sysbench-0.5/share/sysbench/insert.lua --mysql-host=ip地址 --mysql-port=端口 --mysql-user=root --mysql-password=密码 --mysql-db=sysbenchnew --mysql-table-type=innodb --oltp-test-mode=complex --oltp-write-only=on --oltp-auto-inc=off --oltp-reconnect=on --oltp-table-size=10000000 --max-requests=10000000 --num-threads=${i} --report-interval=1 --report-checkpoints=10 --oltp-tables-count=10 run
sleep 60;
done

查询压测命令
for i in 16 32 64 128 256 512 768 1024
do
nowtime=$(date “+%Y-%m-%d_%H:%M”)
sysbench --test=/usr/local/sysbench-0.5/share/sysbench/select_k.lua --mysql-host=ip地址 --mysql-port=端口 --mysql-user=root --mysql-password=密码 --oltp-table-size=10000000 --num-threads=${i} --max-time=600 --mysql-db=sysbenchnew --max-requests=0 --oltp-test-mode=complex --report-interval=1 --mysql-table-engine=innodb --mysql-ignore-errors=1142,1050,1047,1148 --oltp-tables-count=10 run > /root/shellscripts/sysbench/logs/sysbench_shardingproxy_select_threads${i}_${nowtime}.log

sleep 60;
done

更新压测命令
for i in 16 32 64 128 256 512 768 1024
do
nowtime=$(date “+%Y-%m-%d_%H:%M”)
sysbench --test=/usr/local/sysbench-0.5/share/sysbench/update_index.lua --mysql-host=数据库ip地址 --mysql-port=端口 --mysql-user=root --mysql-password=密码 --oltp-table-size=10000000 --num-threads=${i} --max-time=600 --mysql-db=sysbenchnew --max-requests=0 --oltp-test-mode=complex --oltp-read-only=off --rand-type=uniform --report-interval=1 --mysql-table-engine=innodb --mysql-ignore-errors=1142,1050,1062 --percentile=99 --oltp-tables-count=10 run > /root/shellscripts/sysbench/logs/sysbench_shardingproxy_update_threads${i}_${nowtime}.log

sleep 60;
done

现状:

使用sysbench压测sharingproxy性能不及cobar 这种情况是正常的吗?还是我测试的方式不对呢?

首先想问一下 sysbench0.5 是什么版本,sysbench 1.0 貌似都是 2017 年的测试工具,目前最新的好像是 1.0.20,咱们为什么用 0.5 版本的 sysbench 进行测试。

其次就是我们可以按照 id 分片,为什么要修改 sysbench 的源码单独测试 k 这个字段?这么做的目的是什么呢。

目前我这边测试 sysbench,是通过这样的脚本:

sysbench oltp_point_select --mysql-host=${HOST} --mysql-port=${PORT} --mysql-user=root --mysql-password=${PASSWORD} --mysql-db=${DATABASE} --tables=${TABLES} --table-size=${TABLE_SIZE} --report-interval=5 --time=${TIME} --threads=${THREADS} --max-requests=0 --percentile=99 --mysql-ignore-errors="all" --range_selects=off --rand-type=uniform --auto_inc=off run 

sysbench oltp_read_write --mysql-host=${HOST} --mysql-port=${PORT} --mysql-user=root --mysql-password=${PASSWORD} --mysql-db=${DATABASE} --tables=${TABLES} --table-size=${TABLE_SIZE} --report-interval=5 --time=${TIME} --threads=${THREADS} --max-requests=0 --percentile=99 --mysql-ignore-errors="all" --range_selects=off --rand-type=uniform --auto_inc=off run 

sysbench oltp_write_only --mysql-host=${HOST} --mysql-port=${PORT} --mysql-user=root --mysql-password=${PASSWORD} --mysql-db=${DATABASE} --tables=${TABLES} --table-size=${TABLE_SIZE} --report-interval=5 --time=${TIME} --threads=${THREADS} --max-requests=0 --percentile=99 --mysql-ignore-errors="all" --range_selects=off --rand-type=uniform --auto_inc=off run 

刚刚翻了下 cobar,不知道现在还有人用 corbar 是出于一种什么目的。7 年前的 issue 都已经没有人回复了。

嗯,这个是很老的架构,我来公司之前就一直再用了。现在需要将这个架构改造迁移到sharding proxy,我们也不想用cobar了。

之所以用0.5的sysbench,是因为想做cobar和sharding proxy的性能对比。sysbench 0.5的版本还能改改lua,用来压测cobar,sysbench1.0版本的不兼容cobar。所以做不了对比测试。目前我们使用了楼方鑫大佬的mydbtest工具进行了压测。已经有对比结果了。

京ICP备2021015875号