性能测试工具-sysbench

网友投稿 846 2022-08-23

性能测试工具-sysbench

Sysbench是一款基于LuaJIT的,模块化多线程基准测试工具,常用于数据库基准测试。通过内置的数据库测试模型,采用多线程并发操作来评估数据库的性能。了解Sysbench更多详情,请访问​​ install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysqlyum install glibc-headers ; yum install gcc-c++

开始安装

@解压sysbenchunzip sysbench-1.0.18.zipcd sysbench-1.0.18./autogen.sh./configure --prefix=/usr --mandir=/usr/share/manmakemake install

测试步骤

请根据实际信息,替换数据库、连接IP与用户密码。

步骤 1     导入数据。

1.  使用mysql命令登录数据库,并创建测试数据库“loadtest”。

mysql-u root -P 3306 -h -p -e "createdatabase loadtest"

使用sysbench命令导入测试背景数据到“loadtest”数据库。

sysbench--test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua--db-driver=mysql --mysql-db=loadtest --mysql-user=root --mysql-password= --mysql-port=3306--mysql-host= --num-threads=20 prepare

步骤 2     压测数据。

sysbench--test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua--db-driver=mysql --mysql-db=loadtest --mysql-user=root --mysql-password= --mysql-port=3306--mysql-host= --forced-shutdown=1run

步骤 3     清理数据。

sysbench--test=/usr/local/share/sysbench/tests/include/oltp_legacy/oltp.lua--db-driver=mysql --mysql-db=loadtest --mysql-user=root --mysql-password= --mysql-port=3306--mysql-host= --oltp-tables-count=64 --oltp-table-size=10000000 --max-time=3600 --max-requests=0--num-threads=200 cleanup

----结束

测试模型

1. 表结构

CREATETABLE `sbtest` (`id`INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,`k`INTEGER UNSIGNED DEFAULT '0' NOT NULL,`c`CHAR(120) DEFAULT '' NOT NULL,`pad`CHAR(60) DEFAULT '' NOT NULL,PRIMARYKEY (`id`))ENGINE=InnoDB

2. 读写比

Sysbench默认提交的事务中包含18条SQL语句,具体执行语句和条数如下:

1、主键SELECT语句,10条:

SELECT c FROM ${rand_table_name} where id=${rand_id};

2、范围SELECT语句,4条:

SELECT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start}AND ${rand_id_end};SELECT SUM(K) FROM ${rand_table_name} WHERE id BETWEEN${rand_id_start} AND ${rand_id_end};SELECT c FROM ${rand_table_name} WHERE id BETWEEN ${rand_id_start}AND ${rand_id_end} ORDER BY c;SELECT DISTINCT c FROM ${rand_table_name} WHERE id BETWEEN${rand_id_start} AND ${rand_id_end} ORDER BY c;

3、UPDATE语句,2条:

UPDATE ${rand_table_name} SET k=k+1 WHERE id=${rand_id}UPDATE ${rand_table_name} SET c=${rand_str} WHERE id=${rand_id}

4、DELETE语句,1条:

DELETE FROM ${rand_table_name} WHERE id=${rand_id}

5、INSERT语句,1条:

INSERT INTO ${rand_table_name} (id, k, c, pad) VALUES (${rand_id},${rand_k},${rand_str_c},${rand_str_pad})

测试指标

TPS

Transaction Per Second,数据库每秒执行的事务数,每个事务中包含18条SQL语句。

QPS

Query Per Second,数据库每秒执行的SQL数,包含insert、select、update、delete等。

IOPS

和数据库实例的存储空间(单位:GB)强相关,详细计算公式如下:

IOPS=min{3500 + (实例的存储空间-40)*50, 33000} 。

例如:数据库实例“rds-test01”的存储空间为400GB,则其对应的IOPS=min{3500 + (400-40)*50, 33000} =min{21500, 33000} =21500。

#######################################################

以下是脚本自动完成测试,

编写运行脚本

test.sh会自动跑完并存放到相应的文件中,需要修改如下:

#!/bin/bashUSER="root"PASSWORD="Test@123"HOST="172.30.0.24"################################################################################################################LOGLOG_PATH=/root/test_result_8u32g_c6_testMAX_REQUEST=0LUA_PATH="/root/sysbench-1.0.18/tests/include/oltp_legacy/oltp.lua"WO_PATH="/root/sysbench-1.0.18/src/lua/oltp_write_only.lua"#TABLE_SIZE=800000#TABLE_COUNT=150SYSBENCH_PATH="/root/sysbench-1.0.18"PREPARE_THREAD=16TABLE_SIZE=10000000TABLE_COUNT=64RECORD_TIME=1THREADS="1 8 16 32 64 100 200 500 1000 2000"WARMUP_THREADS="400 400 400"RUNTIME=600DBNAME='dbtest'PORT=3306################################################################################################################ulimit -n 65535后面的省略………………………

4,5行修改成你测的对应的RDS的host和密码 9行是跑的结果存放路径,每次跑新的改一下,不然会放到一个路径下,找起数据来麻烦、 11,12,15是sysbench的lua脚本地址,注意下你环境下实际存放路径 16是预热数据的并发数,比如你测8u的机器就用8个并发 17,18代表的是测试数据量,多少张表格*每一张表格多少行,自己酌情修改 20是sysbench跑的并发数目,每一个并发跑22行代表的时间 21是预热的并发数,一般预热半个小时,这边一个并发跑10分钟,所以预热了三个并发也就是半个小时的量。

-----------------------------------------------------------------------------------------------

运行与查看结果

跑的命令:

nohup bash -x test.sh run & #加载数据,预热,再run,一气呵成(一般第一次用这个,因为还没数据)nohup bash -x test.sh run rw & # 数据已经存在,不需要加载,不需要预热,只run 读写模式 nohup bash -x test.sh run ro & # 数据已经存在,不需要加载,不需要预热,只run 读写模式nohup bash -x test.sh run wo & # 数据已经存在,不需要加载,不需要预热,只run 读写模式 nohup bash -x test.sh prewarm run rw & # 数据已经存在,不需要加载,但是需要预热(重启实例需要预热),再run 读写模式

跑的过程会输出到nohup.out中跑完用getdata.sh获取结果,​​getdata.sh​​ 会帮你整理好结果:

例如这样,getdata参数的路径到rw_putout(ro_putout/wo_putout)这一层

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:细数10个隐藏在Python中的彩蛋(python彩蛋是什么意思)
下一篇:vi命令
相关文章

 发表评论

暂时没有评论,来抢沙发吧~