1, 测试MYSQL 5.6,5.7和8.0的他们性能随着并并发数变化情况;
2, 本测试主要测试性能,功能不在测试之列
3, 根据性能曲线,知道多少并发数下性能最好,可以以此为依据设置线上DB的告警阈值;
4, 根据性能曲线,以此判断哪个版本最适用于线上的业务;
5, 由于线上业务读写分离,所以需要分别测试不同场景下的性能情况
mysqlslap
优点:简单,容易使用;
缺点:无法生成指定规模数据;
适用场景:适合对既有数据库单个sql进行优化测试;
TPCC-C
模拟了一个比较具有代表意义的OLTP环境:在线订单处理系统。假设一个大型的商品批发公司,拥有N个位于不同区域仓库,每个仓库10个销售点供货,每个销售点有3000客户,每个客户平均一个订单10件产品。由于一个仓库不可能存储所有货物,一些请求必须发往其他仓库,因为逻辑上是分布的;N是可变参数;
优点:符合TPCC标准,模拟真实的交易活动;
缺点:无法单独测试特定增删改查操作的性能QPS;而线上环境都是读写分离
适用场景: 机器选型的时候使用TPCC测试报告
SYSBENCH
1, Sysbench内嵌lua脚本,可以灵活根据需要选用不同的测试脚本,根据自己需要灵活修改lua脚本,而无需修改源代码
2,可以造数,生成指定规模的数据
3,主流厂商(Oracle/Percona)发布性能数据的时候采用的是Sysbench
https://www.mysql.com/why-mysql/benchmarks/
机器配置和MYSQL参数配置
服务器配置 |
|||
IP 地址 |
11.7.152.67 |
11.7.152.67 |
11.7.152.67 |
CPU核数 |
32 |
32 |
32 |
内存 |
256G |
256G |
256G |
数据硬盘 |
SSD |
SSD |
SSD |
数据盘数量 |
8块 |
8块 |
8块 |
数据盘RAID设置 |
RAID 10 |
RAID 10 |
RAID 10 |
OS |
CentOS Linux release 7.2.1511 |
CentOS Linux release 7.2.1511 |
CentOS Linux release 7.2.1511 |
MYSQL 参数信息 |
|||
MySQL版本 |
5.6.36 |
5.7.19 |
8.0.12 |
Innodb buffer pool |
175G |
175G |
175G |
innodb_buffer_pool_instances |
8 |
8 |
8 |
innodb_flush_log_at_trx_commit |
1 |
1 |
1 |
binlog-format |
ROW |
ROW |
ROW |
transaction-isolation |
RR |
RR |
RR |
sync_binlog |
1 |
1 |
1 |
SYSBENCH参数
测试工具 |
SysBench 1.0 |
测试类型 |
OLTP |
数据规模 |
10W |
表的数量 |
1024 |
单次测试时间 |
600s |
预热时间 |
300s |
并发数 |
2,4,8,16,32,64,128,256,512,1024 |
测试场景
压测场景 |
脚本 |
1、只读操作,包含BETWEEN/SUM/ORDER BY/DISTINCT等操作 |
oltp_read_only.lua |
2、只读操作,条件为主键 |
oltp_point_select.lua |
3、纯写入操作 |
oltp_insert.lua |
4、批量写入 |
bulk_insert.lua |
5、更新操作,通过主键更新索引字段 |
oltp_update_index.lua |
6、更新操作,通过主键更新非索引字段 |
oltp_update_non_index.lua |
7、删除操作 |
oltp_delete.lua |
8、纯写操作,包括insert update delete |
oltp_write_only.lua |
9、读写混合操作 |
oltp_read_write.lua |
只读操作,包含聚合、DISTINCT、SUM等操作作
"SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?",
"SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?"
"SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c"
"SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c"
只读操作,条件为主键
"SELECT c FROM sbtest%u WHERE id=?"
纯写入操作, 单条insertI
INSERT INTO %s (id, k, c, pad) VALUES " (%d, %d, '%s', '%s')"
批量写入,bulk insert
更新操作,通过主键更新索引字段
UPDATE sbtest1 SET k=k+1 WHERE id=?
更新操作,通过主键更新非索引字段
UPDATE sbtest1 SET c=? WHERE id=?
删除操作, delete
"DELETE FROM sbtest%u WHERE id=?"
读写混合操,
包含 update_index, update_non_index, delete, point select, read only等
oltp_update_index.lua
oltp_update_non_index.lua
oltp_delete.lua
oltp_point_select.lua
oltp_read_only.lua
纯写入操作
oltp_update_index.lua
oltp_update_non_index.lua
oltp_delete.lua
说明:
1, mysql8.0优化了很多并发的算法,导致在低并发的时候,效率上显得反而没有5.6和5.7那么高;毕竟多出了更多的计算;但是当Thread_running达到一定程度的时候,5.6和5.7性能会瞬间下降,而8.0表现就会好很多
2, update 非索引字段比update索引字段性能要高一些,是因为update索引字段的时候,MYSQL会同时去做更新索引的操作,而update一个非索引字段,不用去更新索引;