OB数据库压力测试

本文档介绍了如何使用sysbench工具对Oceanbase数据库进行压力测试。首先,详细阐述了安装sysbench的步骤,然后在Oceanbase和MySQL集群中创建测试数据库和用户。接着,针对Oceanbase进行了读写测试,并在遇到错误时调整了相关参数以解决超时问题。最后,执行了压测并展示了部分测试结果,包括事务每秒(tps)和查询每秒(qps)等指标。

安装压测工具sysbench

RHEL/CentOS:

wget https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh

$ cat /etc/os-release |grep ID

ID="centos"

ID_LIKE="rhel fedora"

VERSION_ID="7"

chmod a+x script.rpm.sh

os=centos dist=7 ./script.rpm.sh

yum -y install sysbench

[root@master opt]# rpm -ql sysbench

/usr/bin/sysbench

/usr/share/doc/sysbench-1.0.20

/usr/share/doc/sysbench-1.0.20/COPYING

/usr/share/doc/sysbench-1.0.20/ChangeLog

/usr/share/doc/sysbench-1.0.20/README.md

/usr/share/licenses/sysbench-1.0.20

/usr/share/licenses/sysbench-1.0.20/COPYING

/usr/share/sysbench

/usr/share/sysbench/bulk_insert.lua

/usr/share/sysbench/oltp_common.lua

/usr/share/sysbench/oltp_delete.lua

/usr/share/sysbench/oltp_insert.lua

/usr/share/sysbench/oltp_point_select.lua

/usr/share/sysbench/oltp_read_only.lua

/usr/share/sysbench/oltp_read_write.lua

/usr/share/sysbench/oltp_update_index.lua

/usr/share/sysbench/oltp_update_non_index.lua

/usr/share/sysbench/oltp_write_only.lua

......省略一些输出

分别在Oceanbase和mysql集群中创建测试数据库和用户:

Oceanbase上执行:

obclient -uroot@obmysql -proot -P2883 -h192.168.18.28 -e "create database sbtest;"

obclient -uroot@obmysql -proot -P2883 -h192.168.18.28 -e "grant all on sbtest.* to sbtest@'%' identified by 'sbtest';"

mysql集群上执行:

mysql -uroot -p123456 -P8066 -h127.0.0.1 -e "create database sbtest;"

mysql -uroot -p123456 -P8066 -h127.0.0.1 -e "grant all on sbtest.* to sbtest@'%' identified by 'sbtest';"

压测

1 对Oceanbase的读写测试:

–准备数据

./oltp_read_write.lua --mysql-host=10.0.14.22 --mysql-port=2883 --mysql-user=root@obcp_t1 --mysql-password='' --mysql-db=sbtest --tables=15 --table-size=100000 --report-interval=2 --time=60 --threads=15 --auto_inc=off --mysql-ignore-errors --db-ps-mode=disable prepare

发现在执行该脚本时,会报错:

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Initializing worker threads...

Creating table 'sbtest7'...

Creating table 'sbtest1'...

Creating table 'sbtest2'...

Creating table 'sbtest4'...

Creating table 'sbtest6'...

Creating table 'sbtest15'...

Creating table 'sbtest8'...

Creating table 'sbtest9'...

Creating table 'sbtest12'...

Creating table 'sbtest11'...

Creating table 'sbtest14'...

Creating table 'sbtest13'...

Creating table 'sbtest3'...

Creating table 'sbtest16'...

Creating table 'sbtest10'...

Creating table 'sbtest5'...

Inserting 100000 records into 'sbtest7'

Inserting 100000 records into 'sbtest1'

Inserting 100000 records into 'sbtest2'

Inserting 100000 records into 'sbtest4'

Inserting 100000 records into 'sbtest6'

Inserting 100000 records into 'sbtest8'

Inserting 100000 records into 'sbtest15'

FATAL: mysql_drv_query() returned error 4012 (Timeout) for query 'INSERT INTO sbtest8(id, k, c, pad) VALUES(1, 50216, '37995383632-96831892448-13834617111-03288165365-98215351924-61835230531-26938366841-20852559367-97450947472-50942960202'

...省略一部分... FATAL: `sysbench.cmdline.call_command' function failed: /usr/share/sysbench/oltp_common.lua:230: db_bulk_insert_next() failed

调整OB参数:

MySQL [sbtest]> show variables like '%timeout%';

+---------------------+------------------+

| Variable_name | Value |

+---------------------+------------------+

| connect_timeout | 10 |

| interactive_timeout | 28800 |

| lock_wait_timeout | 31536000 |

| net_read_timeout | 30 |

| net_write_timeout | 60 |

| ob_pl_block_timeout | 3216672000000000 |

| ob_query_timeout | 10000000 |

| ob_trx_idle_timeout | 120000000 |

| ob_trx_lock_timeout | -1 |

| ob_trx_timeout | 100000000 |

| wait_timeout | 28800 |

+---------------------+------------------+

11 rows in set (0.003 sec)

MySQL [sbtest]> set global ob_query_timeout=100000000000;

Query OK, 0 rows affected (12.295 sec)

MySQL [sbtest]> set global ob_trx_idle_timeout=200000000;

Query OK, 0 rows affected (0.148 sec)

MySQL [sbtest]> set global ob_trx_timeout=180000000;

Query OK, 0 rows affected (0.128 sec)

先执行下面的清理数据脚本,然后再重新执行准备脚本:

./oltp_read_write.lua --mysql-host=10.0.14.22 --mysql-port=2883 --mysql-user=root@obcp_t1 --mysql-password='' --mysql-db=sbtest --tables=15 --table-size=100000 --report-interval=2 --time=60 --threads=15 --auto_inc=off --mysql-ignore-errors --db-ps-mode=disable prepare

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Initializing worker threads...

Creating table 'sbtest14'...

Creating table 'sbtest8'...

Creating table 'sbtest13'...

Creating table 'sbtest15'...

Creating table 'sbtest7'...

Creating table 'sbtest5'...

Creating table 'sbtest12'...

Creating table 'sbtest4'...

Creating table 'sbtest3'...

Creating table 'sbtest10'...

Creating table 'sbtest1'...

Creating table 'sbtest11'...

Creating table 'sbtest9'...

Creating table 'sbtest6'...

Creating table 'sbtest2'...

Inserting 100000 records into 'sbtest14'

Inserting 100000 records into 'sbtest13'

Inserting 100000 records into 'sbtest15'

Inserting 100000 records into 'sbtest5'

Creating a secondary index on 'sbtest14'...

Creating a secondary index on 'sbtest13'...

Inserting 100000 records into 'sbtest8'

Inserting 100000 records into 'sbtest7'

Inserting 100000 records into 'sbtest12'

Creating a secondary index on 'sbtest5'...

Creating a secondary index on 'sbtest8'...

Inserting 100000 records into 'sbtest4'

Creating a secondary index on 'sbtest12'...

Inserting 100000 records into 'sbtest10'

Inserting 100000 records into 'sbtest11'

Inserting 100000 records into 'sbtest1'

Creating a secondary index on 'sbtest4'...

Inserting 100000 records into 'sbtest3'

Creating a secondary index on 'sbtest11'...

Creating a secondary index on 'sbtest1'...

Creating a secondary index on 'sbtest15'...

Inserting 100000 records into 'sbtest9'

Inserting 100000 records into 'sbtest6'

Inserting 100000 records into 'sbtest2'

Creating a secondary index on 'sbtest7'...

Creating a secondary index on 'sbtest9'...

Creating a secondary index on 'sbtest6'...

Creating a secondary index on 'sbtest10'...

Creating a secondary index on 'sbtest3'...

Creating a secondary index on 'sbtest2'...

查看表的主副本分布情况:

MySQL [oceanbase]> select c.tenant_name,

-> b.table_name,

-> a.zone,

-> case when a.role=1 then 'leader' when a.role=2 then 'follower' else null end role,

-> concat(a.svr_ip,':',a.svr_port) server

-> from __all_virtual_meta_table a,__all_virtual_table b,gv$tenant c

-> where a.tenant_id=b.tenant_id and a.table_id=b.table_id and a.tenant_id=c.tenant_id and a.role=1

-> order by server;

+-------------+------------+-------+--------+--------------------+

| tenant_name | table_name | zone | role | server |

+-------------+------------+-------+--------+--------------------+

| obmysql | sbtest13 | zone1 | leader | 192.168.18.28:2900 |

| obmysql | sbtest8 | zone1 | leader | 192.168.18.28:2900 |

| obmysql | sbtest4 | zone1 | leader | 192.168.18.28:2900 |

| obmysql | sbtest1 | zone1 | leader | 192.168.18.28:2900 |

| obmysql | sbtest6 | zone1 | leader | 192.168.18.28:2900 |

| obmysql | sbtest15 | zone2 | leader | 192.168.18.28:2901 |

| obmysql | sbtest7 | zone2 | leader | 192.168.18.28:2901 |

| obmysql | sbtest10 | zone2 | leader | 192.168.18.28:2901 |

| obmysql | sbtest3 | zone2 | leader | 192.168.18.28:2901 |

| obmysql | sbtest2 | zone2 | leader | 192.168.18.28:2901 |

| obmysql | sbtest14 | zone3 | leader | 192.168.18.28:2902 |

| obmysql | sbtest5 | zone3 | leader | 192.168.18.28:2902 |

| obmysql | sbtest12 | zone3 | leader | 192.168.18.28:2902 |

| obmysql | sbtest11 | zone3 | leader | 192.168.18.28:2902 |

| obmysql | sbtest9 | zone3 | leader | 192.168.18.28:2902 |

+-------------+------------+-------+--------+--------------------+

15 rows in set (0.096 sec)

在查询结果中显示15张表的主副本是平均分布到每个observer节点上的,符合预期。

–执行压测

[root@ob02 lua]# ./oltp_read_write.lua --mysql-host=10.0.14.22 --mysql-port=2883 --mysql-user=root@obcp_t1 --mysql-password='' --mysql-db=test --tables=15 --table-size=100000 --report-interval=2 --time=60 --threads=15 --auto_inc=off --mysql-ignore-errors --db-ps-mode=disable run

sysbench 1.0.20 (using bundled LuaJIT 2.1.0-beta2)

Running the test with following options:

Number of threads: 15

Report intermediate results every 2 second(s)

Initializing random number generator from current time

Initializing worker threads...

Threads started!

[ 2s ] thds: 15 tps: 0.00 qps: 52.17 (r/w/o: 45.24/0.00/6.92) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00

[ 4s ] thds: 15 tps: 0.00 qps: 33.18 (r/w/o: 33.18/0.00/0.00) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00

[ 6s ] thds: 15 tps: 0.00 qps: 29.66 (r/w/o: 17.60/7.04/5.03) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00

[ 8s ] thds: 15 tps: 5.53 qps: 33.65 (r/w/o: 8.54/10.05/15.07) lat (ms,95%): 7754.26 err/s: 0.00 reconn/s: 0.00

[ 10s ] thds: 15 tps: 0.99 qps: 61.84 (r/w/o: 59.37/0.49/1.98) lat (ms,95%): 8333.38 err/s: 0.00 reconn/s: 0.00

[ 12s ] thds: 15 tps: 0.00 qps: 37.12 (r/w/o: 28.09/6.02/3.01) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00

[ 14s ] thds: 15 tps: 4.01 qps: 39.12 (r/w/o: 11.54/11.54/16.05) lat (ms,95%): 6476.48 err/s: 0.00 reconn/s: 0.00

[ 16s ] thds: 15 tps: 2.99 qps: 64.85 (r/w/o: 56.37/2.00/6.49) lat (ms,95%): 14827.42 err/s: 0.00 reconn/s: 0.00

[ 18s ] thds: 15 tps: 0.50 qps: 39.64 (r/w/o: 30.61/5.52/3.51) lat (ms,95%): 16224.31 err/s: 0.00 reconn/s: 0.00

[ 20s ] thds: 15 tps: 1.93 qps: 36.66 (r/w/o: 15.44/11.58/9.65) lat (ms,95%): 6360.91 err/s: 0.00 reconn/s: 0.00

[ 22s ] thds: 15 tps: 4.13 qps: 42.33 (r/w/o: 30.46/3.10/8.78) lat (ms,95%): 7615.89 err/s: 0.00 reconn/s: 0.00

[ 24s ] thds: 15 tps: 1.44 qps: 42.32 (r/w/o: 35.59/2.89/3.85) lat (ms,95%): 8638.96 err/s: 0.00 reconn/s: 0.00

[ 26s ] thds: 15 tps: 1.55 qps: 40.32 (r/w/o: 28.43/7.24/4.65) lat (ms,95%): 5312.73 err/s: 0.00 reconn/s: 0.00

[ 28s ] thds: 15 tps: 1.02 qps: 36.12 (r/w/o: 20.86/9.67/5.60) lat (ms,95%): 5709.50 err/s: 0.00 reconn/s: 0.00

[ 30s ] thds: 15 tps: 4.47 qps: 47.63 (r/w/o: 29.28/5.46/12.90) lat (ms,95%): 10343.39 err/s: 0.00 reconn/s: 0.00

[ 32s ] thds: 15 tps: 2.02 qps: 46.43 (r/w/o: 39.87/1.01/5.55) lat (ms,95%): 7895.16 err/s: 0.00 reconn/s: 0.00

[ 34s ] thds: 15 tps: 0.50 qps: 51.29 (r/w/o: 38.72/5.03/7.54) lat (ms,95%): 5709.50 err/s: 0.00 reconn/s: 0.00

[ 36s ] thds: 15 tps: 1.94 qps: 24.69 (r/w/o: 9.68/7.75/7.26) lat (ms,95%): 7895.16 err/s: 0.00 reconn/s: 0.00

[ 38s ] thds: 15 tps: 4.58 qps: 52.97 (r/w/o: 38.20/4.07/10.70) lat (ms,95%): 7754.26 err/s: 0.00 reconn/s: 0.00

[ 40s ] thds: 15 tps: 0.51 qps: 59.79 (r/w/o: 44.97/8.69/6.13) lat (ms,95%): 8955.74 err/s: 0.00 reconn/s: 0.00

[ 42s ] thds: 15 tps: 3.43 qps: 39.65 (r/w/o: 22.03/6.36/11.26) lat (ms,95%): 11732.86 err/s: 0.00 reconn/s: 0.00

[ 44s ] thds: 15 tps: 3.04 qps: 53.15 (r/w/o: 43.03/3.54/6.58) lat (ms,95%): 6360.91 err/s: 0.00 reconn/s: 0.00

[ 46s ] thds: 15 tps: 1.46 qps: 47.25 (r/w/o: 32.64/7.31/7.31) lat (ms,95%): 7615.89 err/s: 0.00 reconn/s: 0.00

[ 48s ] thds: 15 tps: 2.07 qps: 34.21 (r/w/o: 20.21/6.74/7.26) lat (ms,95%): 8638.96 err/s: 0.00 reconn/s: 0.00

[ 50s ] thds: 15 tps: 2.99 qps: 61.72 (r/w/o: 49.28/5.48/6.97) lat (ms,95%): 6835.96 err/s: 0.00 reconn/s: 0.00

[ 52s ] thds: 15 tps: 1.98 qps: 43.50 (r/w/o: 26.69/8.90/7.91) lat (ms,95%): 9624.59 err/s: 0.00 reconn/s: 0.00

[ 54s ] thds: 15 tps: 3.49 qps: 57.41 (r/w/o: 38.94/6.99/11.48) lat (ms,95%): 7754.26 err/s: 0.00 reconn/s: 0.00

[ 56s ] thds: 15 tps: 2.03 qps: 32.42 (r/w/o: 21.28/4.56/6.59) lat (ms,95%): 7086.63 err/s: 0.00 reconn/s: 0.00

[ 58s ] thds: 15 tps: 1.94 qps: 63.03 (r/w/o: 51.88/4.36/6.79) lat (ms,95%): 5507.54 err/s: 0.00 reconn/s: 0.00

[ 60s ] thds: 15 tps: 1.00 qps: 42.58 (r/w/o: 24.04/11.02/7.51) lat (ms,95%): 7754.26 err/s: 0.00 reconn/s: 0.00

[ 62s ] thds: 12 tps: 5.61 qps: 23.45 (r/w/o: 10.70/5.61/7.14) lat (ms,95%): 7754.26 err/s: 0.00 reconn/s: 0.00

SQL statistics:

queries performed:

read: 1932

write: 365

other: 463

total: 2760

transactions: 138 (2.17 per sec.)

queries: 2760 (43.49 per sec.)

ignored errors: 0 (0.00 per sec.)

reconnects: 0 (0.00 per sec.)

General statistics:

total time: 63.4365s

total number of events: 138

Latency (ms):

min: 3832.97

avg: 6656.86

max: 16191.84

95th percentile: 8638.96

sum: 918647.29

Threads fairness:

events (avg/stddev): 9.2000/0.83

execution time (avg/stddev): 61.2432/1.20

清除数据

./oltp_read_write.lua --mysql-host=10.0.14.22 --mysql-port=2883 --mysql-user=root@obcp_t1 --mysql-password=root --mysql-db=sbtest --tables=15 --table-size=100000 --report-interval=2 --time=60 --threads=15 --mysql-ignore-errors --db-ps-mode=disable cleanup

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值