MySQL数据库测压
工具
这里使用的是sysbench这一工具,用于模拟SQL请求,来对数据库进行测压,并且可以随自己的需求来调整测压时候的参数。
工具的安装
- 更新yum repo仓库,否则的可能出现安装失败的情况
curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
- 使用yum进行sysbench的安装
//选择下面其中一个即可,第二个是针对权限不够时使用的
yum -y install sysbench
sudo yum -y install sysbench
- 检查是否安装成功
sysbench --version
//如果出现版本号说明安装成功
测压前的准备工作
首先需要自己先创建一个数据库,名字叫 test_db,并且创建好对应的测试账号和密码,可以都叫test_user
,在做完这些之后执行下面的命令来进行表的创建
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
解释这条sysbench命令的意思:
- –db-driver=mysql:数据库的驱动为mysql
- –time=300:连续访问时长,时间是300s
- –threads=10:线程数量,这里是用10个线程模拟并发访问
- –report-interval=1:输出结果的间隔,这里是1s间隔
- –mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user:这里的参数是连接数据库使用的ip,端口,用户名以及密码
- mysql-db=test_db --tables=20 --table_size=1000000:用于测压的目标数据库的名字,以及创建的表的数量20个,每个表里构造100万条数据,表名类似于sbtest1,sbtest2这个样子
- oltp_read_write:测试模式,这里表示执行读写模式
- –db-ps-mode=disable:禁用ps模式
正式开始测压
测压的类型由如下几种方式:
- read_write
sysbench命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
读写模式测压结果:
- read_only
sysbench命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run
只读模式测压结果:
- delete
sysbench命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_delete --db-ps-mode=disable run
删除模式测压结果
- update_index
sysbench命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_update_index --db-ps-mode=disable run
跟新索引数据模式:
- update_non_index
sysbench命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_update_non_index --db-ps-mode=disable run
更新非索引字段模式:
- inser
sysbench命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_insert --db-ps-mode=disable run
插入模式:
- write_only
sysbencs命令:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-user=test_user --mysql-password=test_user --mysql-db=test_db --tables=20 --table_size=1000000 oltp_write_only --db-ps-mode=disable run
只读模式:
在进行完上面的压力测试之后,就可以清理之前所创建的表了,命令如下:
sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.17.0.1 --mysql-port=3306 --mysql-user=root --mysql-password=123456 --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable cleanup
测压结果分析
每次测压结束后都会出现如下结果:
SQL statistics:
queries performed:
read: 0
write: 667992
other: 807208
total: 1475200
transactions: 245862 (819.44 per sec.)
queries: 1475200 (4916.73 per sec.)
ignored errors: 7 (0.02 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 300.0354s
total number of events: 245862
Latency (ms):
min: 0.79
avg: 12.20
max: 3244.74
95th percentile: 26.68
sum: 2999665.19
Threads fairness:
events (avg/stddev): 24586.2000/81.86
execution time (avg/stddev): 299.9665/0.01
这里解释一下这些数据的含义:
read: 在测压期内一共执行了多少次读请求
write:在测压期内一共执行了多少次写请求
othor:在测压期内一共执行了多少次其他请求
total:在测压期内一共执行了多少次请求
transactions:总共执行的事务数量,括号内是每秒执行的事务的数量
queries:一共处理的请求数量,括号内是每秒执行的请求数量
ignored errors:忽略的错误
reconnects:重连的次数
//执行了300.0354,一共处理了24万+的事务
General statistics:
total time: 300.0354s
total number of events: 245862
Latency (ms):
min: 0.79 //请求中的最小延迟0.79ms
avg: 12.20 //请求中的平均延迟是12.20ms
max: 3244.74 //请求中的最大延迟是3244.74ms
95th percentile: 26.68 //95%的请求都在26.28ms内
sum: 2999665.19 //总计耗时2999665.19ms
延迟是12.20ms
max: 3244.74 //请求中的最大延迟是3244.74ms
95th percentile: 26.68 //95%的请求都在26.28ms内
sum: 2999665.19 //总计耗时2999665.19ms