暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

作为DBA,你不得不掌握的压测工具

3000
mysqlslap

    mysqlslapMySQL自带的一个用于实现负载性能测试和压力测试的工具。它可以模拟多个客户端对数据库进行施压,并生成报告来了解数据库的性能状况。
mysqlslap的运行过程主要分三步:
  1. 创建库、表,导入数据用于测试。此过程由单线程完成。

  2. 开始进行压力测试。该步骤可以使用多线程完成。

  3. 清理测试数据。此过程由单线程完成。

下面举几个例子来说明下如何使用mysqlslap
1. 自动生成测试表,其中会生成自增列,采用单线程进行测试。
    [root@node1 ~]# mysqlslap -uroot -p --auto-generate-sql --auto-generate-sql-load-type=mixed --auto-generate-sql-add-autoincrement
    Enter password:
    Benchmark
    #运行所有语句的平局时间,单位秒
    Average number of seconds to run all queries: 0.018 seconds
    #运行所有语句的最小秒数
    Minimum number of seconds to run all queries: 0.018 seconds
    #运行所有语句的最大秒数
    Maximum number of seconds to run all queries: 0.018 seconds
    #客户端数量
    Number of clients running queries: 1
    #每个客户端运行查询的平均数
    Average number of queries per client: 0
    参数解释:

    --auto-generate-sql:自动生成测试表和数据,mysqlslap工具自己生成sql脚本进行测试。

    --auto-generate-sql-load-type:指定测试语句的类型。取值包括:read,key,write,update和mixed(默认)。

    --auto-generate-sql-add-autoincrement:生成的表中会添加自增列。

    2. 指定客户端的数量以及总的查询次数
      mysqlslap -uroot -p --auto-generate-sql --auto-generate-sql-load-type=mixed --concurrency=100 --number-of-queries=1000

      --concurrency=100:指定同时有100个客户端连接--number-of-queries=1000:指定总的测试查询次数,该值除以concurrency的值就是每个客户端执行的查询次数。

      3. 自定义表结构以及SQL语句,指定50个客户端,运行测试200次
        mysqlslap --delimiter=";" --create="CREATE TABLE a (b int);INSERT INTO a VALUES (23)" --query="SELECT * FROM a" --concurrency=50 --iterations=200
        --iterations代表要运行测试多少次。
        4. 使用参数指定列的数量和类型,比如int类型的字段两列,varchar类型的字段3列。
          mysqlslap -uroot -p --concurrency=5 --iterations=20 --number-int-cols=2 --number-char-cols=3 --auto-generate-sql
          5. 从指定文件中加载create、insert、和select语句,当文件中有多条语句时用”;”隔开。
            mysqlslap --concurrency=5 --iterations=5 --query=query.sql --create=create.sql --delimiter=";"
            sysbench

                sysbench是一款非常强大的数据库测试工具,它可以执行多种类型的基准测试,目前主要支持MySQLPostgreSQLOracle3种数据库。
            它可以从https://github.com/akopytov/sysbench下载源码包。
            安装
              cd sysbench-0.5
              ./autogen.sh
              ./configure --prefix=/usr/local/sysbench --build=x86_64
              make && make install
              cp /usr/local/sysbench/bin/sysbench /usr/bin/
              验证sysbench安装是否成功。
              [root@node1 ~]# sysbench --version
              sysbench 0.5
              针对CPU的基准测试
              测试计算素数直到某个最大值所需要的时间。
                [root@node1 ~]# sysbench --test=cpu --cpu-max-prime=2000 run
                sysbench 0.5: multi-threaded system evaluation benchmark
                Running the test with following options:
                Number of threads: 1
                Random number generator seed is 0 and will be ignored
                …………………………
                General statistics:
                total time: 1.1302s
                …………………………….
                针对内存的基准测试
                  sysbench --test=memory --memory-block-size=8k --memory-total-size=100G run
                  针对文件IO的基准测试
                  1. 首先生成测试文件:随机写128个文件,共计2G
                    sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw prepare
                    2. 随机读取测试⽂件,查看耗费的时间
                      sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw run
                      其中--file-test-mode的选项如下:
                      seqwr:顺序写入
                      seqrewr:顺序重写
                      seqrd:顺序读取
                      rndrd:随机读取
                      rndwr:随机写入
                      rndrw:混合随机读写
                      3. 测试完成,清理测试数据
                        sysbench --test=fileio --num-threads=20 --file-total-size=2G --file-test-mode=rndrw cleanup
                        针对OLTP的基准测试
                        1. 首先生成测试数据,下面生成一张数据量百万行记录的表。
                          sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root prepare
                          查询生成的测试数据:
                            mysql> select count(*) from sbtest1;
                            +----------+
                            | count(*) |
                            +----------+
                            | 1000000 |
                            +----------+
                            2. 进行读取验证,采用8个并发线程,开启只读模式
                              sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root --max-time=60 --oltp-read-only=on --max-requests=0 --num-threads=8 run
                              测试结果如下:
                                OLTP test statistics:
                                queries performed:
                                read: 407498
                                write: 0
                                other: 58214
                                total: 465712
                                transactions: 29107 (485.07 per sec.)
                                read/write requests: 407498 (6790.91 per sec.)
                                other operations: 58214 (970.13 per sec.)
                                ignored errors: 0 (0.00 per sec.)
                                reconnects: 0 (0.00 per sec.)
                                General statistics:
                                total time: 60.0064s
                                total number of events: 29107
                                total time taken by event execution: 479.9865s
                                response time:
                                min: 1.55ms
                                avg: 16.49ms
                                max: 539.30ms
                                approx. 95 percentile: 25.98ms
                                Threads fairness:
                                events (avg/stddev): 3638.3750/42.84
                                execution time (avg/stddev): 59.9983/0.00
                                其中transactions代表了测试结果的主要评判标准,即TPS,上述测试结果中的tps485.7response time中展示了响应时间的统计信息,展示了最小、最大、平均响应时间,以及95%百分比的响应时间。
                                3. 清理测试数据
                                  sysbench --test=oltp --oltp-table-size=1000000 --mysql-db=test --mysql-user=root --mysql-password=root cleanup
                                  最后修改时间:2020-09-09 09:37:13
                                  文章转载自MySQL数据库技术栈,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                  评论