47
47
- ` --debug-info ` 代表要额外输出 CPU 以及内存的相关信息。
48
48
- ` --only-print ` 打印压力测试的时候 mysqlslap 到底做了什么事,通过 sql 语句方式告诉我们。
49
49
50
+ -------------------------------------------------------------------
51
+
50
52
51
53
## sysbench 工具
52
54
@@ -148,6 +150,8 @@ Threads fairness:
148
150
events (avg/stddev): 2748.6000/132.71 --总处理事件数/标准偏差
149
151
execution time (avg/stddev): 119.9907/0.00 --总执行时间/标准偏差
150
152
153
+ -------------------------------------------------------------------
154
+
151
155
## QPS 和 TPS 和说明
152
156
153
157
### 基本概念
@@ -171,6 +175,157 @@ Threads fairness:
171
175
- 每天300wPV的在单台机器上,这台机器需要多少QPS?对于这样的问题,假设每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间。( 3000000 * 0.8 ) / (3600 * 24 * 0.2 ) = 139 (QPS).
172
176
- 如果一台机器的QPS是58,需要几台机器来支持?答:139 / 58 = 3
173
177
178
+ -------------------------------------------------------------------
179
+
180
+ ## Percona TPCC-MySQL 测试工具(优先推荐)
181
+
182
+ - 可以较好地模拟真实测试结果数据
183
+ - 官网主页:< https://github.com/Percona-Lab/tpcc-mysql >
184
+
185
+ ```
186
+ TPC-C 是专门针对联机交易处理系统(OLTP系统)的规范,一般情况下我们也把这类系统称为业务处理系统。
187
+ TPC-C是TPC(Transaction Processing Performance Council)组织发布的一个测试规范,用于模拟测试复杂的在线事务处理系统。其测试结果包括每分钟事务数(tpmC),以及每事务的成本(Price/tpmC)。
188
+ 在进行大压力下MySQL的一些行为时经常使用。
189
+ ```
190
+
191
+ ### 安装
192
+
193
+ - 先确定本机安装过 MySQL
194
+ - 并且安装过:` yum install mysql-devel `
195
+
196
+ ```
197
+ git clone https://github.com/Percona-Lab/tpcc-mysql
198
+ cd tpcc-mysql/src
199
+ make
200
+
201
+ 如果make没报错,就会在tpcc-mysql 根目录文件夹下生成tpcc二进制命令行工具tpcc_load、tpcc_start
202
+ ```
203
+
204
+ ### 测试的几个表介绍
205
+
206
+ ```
207
+ tpcc-mysql的业务逻辑及其相关的几个表作用如下:
208
+ New-Order:新订单,主要对应 new_orders 表
209
+ Payment:支付,主要对应 orders、history 表
210
+ Order-Status:订单状态,主要对应 orders、order_line 表
211
+ Delivery:发货,主要对应 order_line 表
212
+ Stock-Level:库存,主要对应 stock 表
213
+
214
+ 其他相关表:
215
+ 客户:主要对应customer表
216
+ 地区:主要对应district表
217
+ 商品:主要对应item表
218
+ 仓库:主要对应warehouse表
219
+ ```
220
+
221
+ ### 准备
222
+
223
+ - 测试阿里云 ECS 与 RDS 是否相通:
224
+ - 记得在 RDS 添加账号和给账号配置权限,包括:配置权限、数据权限(默认添加账号后都是没有开启的,还要自己手动开启)
225
+ - 还要添加内网 ECS 到 RDS 的白名单 IP 里面
226
+ - 或者在 RDS 上开启外网访问设置,但是也设置 IP 白名单(访问 ip.cn 查看自己的外网 IP 地址,比如:120.85.112.97)
227
+
228
+ ```
229
+ ping rm-wz9066qo44wn500t55o.mysql.rds.aliyuncs.com
230
+
231
+ mysql -h rm-wz9066qo44wn500t55o.mysql.rds.aliyuncs.com -P 3306 -u myaccount -p
232
+
233
+ 输入密码:Aa123456
234
+ ```
235
+
236
+
237
+
238
+ ```
239
+ 创库,名字为:TPCC:
240
+ CREATE DATABASE TPCC DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
241
+
242
+
243
+ 导入项目中的出初始化数据脚本:
244
+ 创建表:create_table.sql
245
+ 创建索引和外键:add_fkey_idx.sql
246
+ ```
247
+
248
+
249
+ ### 测试
250
+
251
+ - 数据库:阿里云 RDS-MySQL-5.7-2C4G
252
+ - 测试机:阿里云 ECS-4C8G-CentOS7.6
253
+
254
+ - 需要注意的是 tpcc 默认会读取 /var/lib/mysql/mysql.sock 这个 socket 文件。因此,如果你的socket文件不在相应路径的话,可以做个软连接,或者通过TCP/IP的方式连接测试服务器
255
+ - 准备数据:
256
+
257
+ ```
258
+ cd /opt/tpcc-mysql
259
+ ./tpcc_load -h rm-wz9066qo44wn500t55o.mysql.rds.aliyuncs.com -P 3306 -d TPCC -u myaccount -p Aa123456 -w 100
260
+ -w 100 表示创建 100 个仓库数据
261
+ 这个过程花费时间还是挺长的,我这台 ECS 结果是这样:
262
+ 差不多 9s == 5000 个数据。
263
+ 也就是:
264
+ 10W 个数据需要 == 20 X 9s == 180s == 3min
265
+ 1000W == 5h
266
+ 一共差不多花了 10h 左右。
267
+
268
+ 插入过程 RDS-2C4G 的监控情况:
269
+ CPU利用率 4%
270
+ 内存 18% ~ 40% (随着数据增加而增大)
271
+ 连接数:1%
272
+ IOPS:4%
273
+ 已使用存储空间:5.5G ~ 10G
274
+
275
+ 要模拟出够真实的数据,仓库不要太少,一般要大于 100,
276
+ 当然你也可以 select count(*) from 上面的各个表,看下 100 个库生成的数据,是不是跟你预期数据差不多,是的话就够了。
277
+
278
+ select count(*) from customer;
279
+ 10s X 10 X 100 = 10000s
280
+
281
+ select count(*) from district;
282
+ select count(*) from history;
283
+ select count(*) from item;
284
+ 100 个仓库 == 1000 X 100 == 100000 == 10W
285
+ select count(*) from new_orders;
286
+ select count(*) from order_line;
287
+ select count(*) from orders;
288
+ select count(*) from stock;
289
+ 100 个仓库 == 100000 X 100 == 10000000 = 1000W
290
+ select count(*) from warehouse;
291
+ ```
292
+
293
+ - 开始测试:
294
+
295
+ ```
296
+
297
+ tpcc_start -h rm-wz9066qo44wn500t55o.mysql.rds.aliyuncs.com -P 3306 -d TPCC -u myaccount -p Aa123456 -w 100 -c 200 -r 300 -l 2400 -f /opt/mysql_tpcc_100_20190324
298
+
299
+ -w 100 表示 100 个仓库数据
300
+ -c 200 表示并发 200 个线程
301
+ -r 300 表示预热 300 秒
302
+ -l 2400 表示持续压测 2400 秒
303
+
304
+ ```
305
+
306
+
307
+ ### 报表
308
+
309
+
310
+ ```
311
+ 行数据表示:10, 1187(0):1.682|2.175, 1187(0):0.336|0.473, 118(0):0.172|0.226, 118(0):1.864|2.122, 119(0):6.953|8.107
312
+
313
+ 10:时间戳,每十秒产生一条数据。
314
+ 1187(0):1.682|2.175:表示10秒内完成1187笔新订单业务。
315
+ 1187(0):0.336|0.473: 支付业务,
316
+ 118(0):1.864|2.122:查询业务,
317
+ 118(0):0.172|0.226: 发货业务,
318
+ 119(0):6.953|8.107: 库存查询业务
319
+
320
+
321
+
322
+ <TpmC>
323
+ 188.000 TpmC
324
+ TpmC结果值(每分钟事务数,该值是第一次统计结果中的新订单事务数除以总耗时分钟数,例如本例中是:372/2=186)
325
+ tpmC值在国内外被广泛用于衡量计算机系统的事务处理能力
326
+ ```
327
+
328
+
174
329
175
330
176
331
## 资料
@@ -181,3 +336,4 @@ Threads fairness:
181
336
- < http://blog.chinaunix.net/uid-25723371-id-3498970.html >
182
337
- < http://nsimple.top/archives/mysql-sysbench-tool.html >
183
338
- < https://dearhwj.gitbooks.io/itbook/content/test/performance_test_qps_tps.html >
339
+ - < https://www.hi-linux.com/posts/38534.html >
0 commit comments