0°

MySQL性能测试

数据库属于核心主键,上线之前,肯定是要性能测试一下,这样到时候出问题心里也有个数,最主要的压力还是在IO上。

测试场景

1、 表结构


1
2
3
4
5
6
7
8
9
10
1CREATE TABLE `sbtest100` (
2  `id` int(11) NOT NULL AUTO_INCREMENT,
3  `k` int(11) NOT NULL DEFAULT '0',
4  `c` char(120) NOT NULL DEFAULT '',
5  `pad` char(60) NOT NULL DEFAULT '',
6  PRIMARY KEY (`id`),
7  KEY `k_100` (`k`)
8) ENGINE=InnoDB AUTO_INCREMENT=25001 DEFAULT CHARSET=utf8
9
10

2、OLTP读写混合场景

point_selects
10
SELECT
simple_ranges
1
SELECT
sum_ranges
1
SELECT
order_ranges
1
SELECT
distinct_ranges
1
SELECT
index_updates
1
UPDATE
non_index_updates
1
UPDATE
deletes
1
DELETE
inserts_ignore
1
INSERT

测试工具

SysBench工具介绍

SysBench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。

1、安装方法


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
1yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql
2git clone https://github.com/akopytov/sysbench.git
3##从git中下载sysbench
4cd sysbench
5##打开sysbench目录
6git checkout 1.0.18
7##切换到sysbench 1.0.18版本
8./autogen.sh
9##运行autogen.sh
10./configure --prefix=/usr --mandir=/usr/share/man
11make
12##编译
13make install
14
15

2、执行如下命令配置SysBench Client,使内核可以使用所有的CPU处理数据包(默认设置为使用2个CPU),同时减少CPU之间的上下文切换。


1
2
3
4
5
6
1sudo sh -c 'for x in /sys/class/net/eth0/queues/rx-*; do echo ffffffff>$x/rps_cpus; done'
2sudo sh -c "echo 32768 > /proc/sys/net/core/rps_sock_flow_entries"
3sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-0/rps_flow_cnt"
4sudo sh -c "echo 4096 > /sys/class/net/eth0/queues/rx-1/rps_flow_cnt"
5
6

说明 ffffffff表示使用32个CPU(1个f表示4个CPU)。请根据实际配置修改,例如ECS为8核CPU,则输入ff。

测试方法

使用SysBench测试 MySQL 5.7 的读写混合性能。

1、准备数据。


1
2
3
1sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600  oltp_read_write prepare
2
3

2、运行workload。


1
2
3
1sysbench --db-driver=mysql  --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run
2
3

3、清理数据。


1
2
3
1sysbench --db-driver=mysql  --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600   --threads=XXX --percentile=95  oltp_read_write cleanup
2
3

测试指标

测试指标

  • 每秒执行事务数TPS(Transactions Per Second)

数据库每秒执行的事务数,以COMMIT成功次数为准。SysBench标准OLTP读写混合场景中一个事务包含18个读写SQL。

  • 每秒执行请求数QPS(Queries Per Second)

数据库每秒执行的SQL数,包含INSERT、SELECT、UPDATE、DETELE等。

分场景测试(本次测试以MySQL 5.7 测试32C64G)

场景一:内存命中型

SysBench参数:–table_size=25000 –tables=250。
在这里插入图片描述

场景一:磁盘IO型

SysBench参数:–table_size=800000 –tables=150。
在这里插入图片描述

测试输出结果说明


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1....
2[ 300s ] thds: 32 tps: 3792.99 qps: 75842.76 (r/w/o: 53083.83/15172.95/7585.98) lat (ms,95%): 9.91 err/s: 0.00 reconn/s: 0.00
3###  r/w/o          r 包括 select ,w 包括 insert update delete, o 包括 begin commit  百分之95的语句耗时 9.91ms
4SQL statistics:
5    queries performed:
6        read:                            15908312
7        write:                           4545232
8        other:                           2272616
9        total:                           22726160
10    transactions:                        1136308 (3786.99 per sec.)
11    queries:                             22726160 (75739.90 per sec.)
12    ignored errors:                      0      (0.00 per sec.)
13    reconnects:                          0      (0.00 per sec.)
14
15General statistics:
16    total time:                          300.0536s
17    total number of events:              1136308
18
19Latency (ms):
20         min:                                    5.86
21         avg:                                    8.45
22         max:                                   38.01
23         95th percentile:                        9.91
24         sum:                              9598548.67
25
26Threads fairness:
27    events (avg/stddev):           35509.6250/831.44
28    execution time (avg/stddev):   299.9546/0.00
29
30
31
「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!