MYSQL压力基准测试

1,608 阅读5分钟

测试服务器:ECS服务器 CentOS8.0 4核8G
测试数据库:PolarDB-MYSQL8.0 4核16GB
测试工具:sysbench 1.0

测试目标:
一、主键索引
二、唯一索引
三、普通索引
四、单表插入
五、分表插入
六、混合读写 (读写不分离)
七、混合读(从库)
八、混合写(主库)

安装sysbench:

curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash 
yum -y install sysbench 
sysbench --version : sysbench 1.0.19 

压测脚本目录: /usr/share/sysbench/

一、主键索引

测试脚本 描述
oltp_point_select.lua 点查语句的Lua脚本,主键查询SELECT c FROM sbtest? WHERE id = ?

为了避免mysql查询缓存的影响,把oltp_common.lua中的SELECT c FROM sbtest%u WHERE id=? 改为 SELECT SQL_NO_CACHE c FROM sbtest%u WHERE id=?

准备数据:
sysbench /usr/share/sysbench/oltp_point_select.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=40 prepare
执行测试:
sysbench /usr/share/sysbench/oltp_point_select.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=40 run
清理环境:
sysbench /usr/share/sysbench/oltp_point_select.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=40 cleanup
百万数据测试平均结果:
transactions: 3606156 (120179.15 per sec.)
queries:      3606156 (120179.15 per sec.)
千万数据测试平均结果:
transactions: 3290528 (109661.01 per sec.)
queries:      3290528 (109661.01 per sec.)

二、唯一索引

测试脚本 描述
oltp_point_select.lua 点查语句的Lua脚本,把k的索引类型改为unique,主键查询SELECT c FROM sbtest? WHERE k = ?
执行测试:
sysbench /usr/share/sysbench/oltp_point_select.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=40 run
百万数据测试平均结果:
transactions: 2802633 (93399.75 per sec.)
queries:      2802633 (93399.75 per sec.)
千万数据测试平均结果:
transactions: 2344666 (78138.84 per sec.)
queries:      2344666 (78138.84 per sec.)

三、普通索引

测试脚本 描述
oltp_point_select.lua 修改oltp_common.lua中的SELECT c FROM sbtest%u WHERE id=? 改为 SELECT SQL_NO_CACHE c FROM sbtest%u WHERE k=?
执行测试:
sysbench /usr/share/sysbench/oltp_point_select.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=40 run
百万数据测试平均结果:
transactions: 425081 (14165.14 per sec.)
queries:      425081 (14165.14 per sec.)
千万数据测试平均结果:
transactions: 24869  (828.10 per sec.)
queries:      24869  (828.10 per sec.)

四、单表插入

测试脚本 描述
oltp_insert.lua INSERT语句的Lua脚本,INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)
执行测试:
sysbench /usr/share/sysbench/oltp_insert.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=1 --table-size=1000000 --threads=40 run
百万数据测试平均结果:
transactions: 453486 (15112.61 per sec.)
queries:      453486 (15112.61 per sec.)
千万数据测试平均结果:
transactions: 398125 (13267.82 per sec.)
queries:      398125 (13267.82 per sec.)

五、分表插入

测试脚本 描述
oltp_insert.lua INSERT语句的Lua脚本,INSERT INTO sbtest%u (id, k, c, pad) VALUES (?, ?, ?, ?)
执行测试:
sysbench /usr/share/sysbench/oltp_insert.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=40 run
百万数据测试平均结果:
transactions: 1046036 (34860.27 per sec.)
queries:      1046036 (34860.27 per sec.)
千万数据测试平均结果:
transactions: 977969 (32591.03 per sec.)
queries:      977969 (32591.03 per sec.)

五、混合读写 (读写不分离)

测试脚本 描述
oltp_read_write.lua 读写混合测试的Lua脚本,读写比例14:4
执行测试:
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=80 run
百万数据测试平均结果:
transactions: 93957  (3128.87 per sec.)
queries:      1879140 (62577.43 per sec.)
千万数据测试平均结果:
transactions: 278725  (2622.40 per sec.)
queries:      1574500 (52448.00 per sec.)

七、混合读(从库)

测试脚本 描述
oltp_read_only.lua 混合读的Lua脚本
执行测试:
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-user= --mysql-password= --mysql-host= --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=80 run
百万数据测试平均结果:
transactions: 127203 (4234.28 per sec.)
queries:      2035248 (67748.40 per sec.)
千万数据测试平均结果:
transactions: 111450 (3712.66 per sec.)
queries:      1783200 (59402.49 per sec.)

八、混合写(主库)

测试脚本 描述
oltp_write_only.lua 混合读的Lua脚本
执行测试:
sysbench /usr/share/sysbench/oltp_write_only.lua --mysql-user= --mysql-password= --mysql-host=pc- --mysql-port=3306 --mysql-db=sysbench --time=30 --max-requests=0 --tables=10 --table-size=1000000 --threads=80 run
百万数据测试平均结果:
transactions: 297581 (9912.75 per sec.)
queries:      1785486 (59476.50 per sec.)
千万数据测试平均结果:
transactions: 232814 (7755.41 per sec.)
queries:      1396884 (46532.47 per sec.)

CentOS8yum安装MySQL8:

yum localinstall -y https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
yum install -y mysql-server
mysqladmin --version
启动mysql服务:
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
mysql 登录(不用密码登录)
mysql -uroot
重置 root 密码
use mysql; //选择数据库
alter user 'root'@'localhost' identified by 'admin'; //修改密码
flush privileges; //刷新权限表
备注:mysql8.0修改用户密码命令(新的修改方式)
重新登陆:
mysql -uroot -p

//  允许远程访问
CREATE USER 'root'@'%' IDENTIFIED BY 'admin';
GRANT ALL ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;