高性能mysql阅读笔记(二)mysql基准测试

高性能mysql阅读笔记(二)MySQL基准测试

测试指标

1.吞吐量

在数据库中,吞吐量指的是单位时间内的事务处理数,单位是TPS(每秒事务数)

2.响应时间

通常使用百分比响应时间,如95%5ms

3.并发性

并发性基准测试需要关注的是正在工作中的并发操作,或者是同时工作中的线程数或者连接数。当并发性增加时,需要测量吞吐量是否下降,响应时间是否变长,如果是这样,应用可能就无法处理峰值压力。

4.可拓展性

可拓展性指的是,可系统增加一倍的工作,在理想情况下能得到两倍的吞吐量,用于发现应用的瓶颈。

测试工具

测试工具分为两种:集成式测试和单组件测试,前者用于对整个应用进行测试,后者用对专门对mysql或其他组件进行单独测试。

集成式测试工具

ab

是一个Apache HTTP服务器基准测试工具。它可以测试HTTP服务器每秒最多可以处理多少请求。如果测试的是Web应用服务,这个结果可以转换成整个应用每秒可以满足多少请求。这是个非常简单的工具,用途也有限,只能针对单个URL进行尽可能快的压力测试。http://httpd.apache.org/docs/2.0/programs/ab.html。

http_load

比ab要更加灵活。可以通过一个输入文件提供多个URL,http_load在这些URL中随机选择进行测试。也可以定制http_load,使其按照时间比率进行测试,而不仅仅是测试最大请求处理能力。http://www.acme.com/software/http-load/。

JMeter

学java的小伙伴应该比较熟悉,JMeterkeyiyonglaiceshi进行web应用的性能测试,也可以用来测试ftp服务器和数据库查询测试等。

jmeter比以上两种复杂得多,可以自己创建数据集进行测试,其内还自带可视化功能。http://jakarta.apache.org/jmeter/

单组件测试工具

mysqlslap

可以模拟服务器的负载,并输出计时信息。它包含在MySQL 5.1的发行包中,应该在MySQL 4.1或者更新的版本中都可以使用。测试时可以执行并发连接数,并指定SQL语句(可以在命令行上执行,也可以把SQL语句写入到参数文件中)。如果没有指定SQL语句,mysqlslap会自动生成查询schema的SELECT语句。

MySQL Benchmark Suite

MySQL Benchmark Suite中也提供了基准测试套件,但它是单用户模式的,测试的数据集很小且用户无法使用指定的数据,并且同一个测试多次运行的结果可能会相差很大。

sysbench

是一款多线程系统压测工具。它可以根据影响数据库服务器性能的各种因素来评估系统的性能。例如,可以用来测试文件I/O、操作系统调度器、内存分配和传输速度、POSIX线程,以及数据库服务器等。

测试实战

sysbench

因为博主的环境跟书中的环境已经不一样了,所以这里我们自己来使用sysbench进行测试

  1. 安装

Ubuntu中可以直接apt安装sysbench

apt-get install sysbench
  1. 测试cpu
sysbench --test=cpu --cpu-max-prime=2000 run # cpu-max-prime为最大质数发生器数量。默认是10000
sysbench 0.4.12:  multi-threaded system evaluation benchmark

Running the test with following options:
Number of threads: 1

Doing CPU performance benchmark

Threads started!
Done.

Maximum prime number checked in CPU test: 2000


Test execution summary:
    total time:                          0.9848s // 花费时间
    total number of events:              10000   // 事件数量
    total time taken by event execution: 0.9839  // 事件执行花费的时间
    per-request statistics: // 请求的统计
         min:                                  0.09ms  
         avg:                                  0.10ms
         max:                                  0.15ms
         approx.  95 percentile:               0.10ms

Threads fairness:
    events (avg/stddev):           10000.0000/0.00
    execution time (avg/stddev):   0.9839/0.00

  1. 测试线程
sysbench  --test=threads --num-threads=500 --thread-yields=100 --thread-locks=4 run  # 500个线程 每个线程处理100个请求 每个线程有4个锁
Test execution summary:
    total time:                          1.1393s
    total number of events:              10000
    total time taken by event execution: 553.1746
    per-request statistics:
         min:                                  0.04ms
         avg:                                 55.32ms
         max:                                601.60ms
         approx.  95 percentile:             216.16ms

Threads fairness:
    events (avg/stddev):           20.0000/6.30
    execution time (avg/stddev):   1.1063/0.01
  1. 测试数据库

终于来到数据库的测试了,sysbench其实还提供了内存,IO,互斥的测试,这里就不一一测试了。

测试关系型数据库有三个阶段

1.准备生成测试表

sysbench --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=123 prepare 

请事先创建一个test数据库,然后我们可以看到test数据库中多了一个500000行的sbtest表。

2.测试

sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=123 run

可以看到测试结果:

OLTP test statistics:
    queries performed: // 进行的读写操作
        read:                            140000
        write:                           50000
        other:                           20000
        total:                           210000
    transactions:                        10000  (588.53 per sec.)  // 事务总数量(每秒执行的事务数)
    deadlocks:                           0      (0.00 per sec.)    // 死锁
    read/write requests:                 190000 (11181.99 per sec.)
    other operations:                    20000  (1177.05 per sec.)

Test execution summary:
    total time:                          16.9916s  // 花费的时间
    total number of events:              10000     
    total time taken by event execution: 271.7623
    per-request statistics:
         min:                                  4.10ms
         avg:                                 27.18ms
         max:                                114.43ms
         approx.  95 percentile:              66.86ms  // 95%的事件都花费了66.86ms以上的时间

Threads fairness:
    events (avg/stddev):           625.0000/7.91
    execution time (avg/stddev):   16.9851/0.00

3.清理测试表

sysbench --num-threads=16 --test=oltp --mysql-table-engine=innodb --mysql-host=127.0.0.1 --mysql-db=test --oltp-table-size=500000 --mysql-user=root --mysql-password=123 cleanup
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值