测试服务器: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;