sysbench 压力测试

运行环境
查看操作系统
[tidb@dev10 ~]$ more /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[tidb@dev10 ~]$
查看 CPU
[tidb@dev10 ~]$ lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                8
On-line CPU(s) list:   0-7
Thread(s) per core:    1
Core(s) per socket:    4
座:                 2
NUMA 节点:         1
厂商 IDGenuineIntel
CPU 系列:          6
型号:              79
型号名称:        Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
步进:              1
CPU MHz2194.917
BogoMIPS4389.83
超管理器厂商:  VMware
虚拟化类型:     完全
L1d 缓存:          32K
L1i 缓存:          32K
L2 缓存:           256K
L3 缓存:           30720K
NUMA 节点0 CPU0-7
......
[tidb@dev10 ~]$

sysbench

github: https://github.com/akopytov/sysbench
sysbench 是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试
rpm仓库:http://www.rpmfind.net/linux/rpm2html/search.php?query=sysbench

它主要包括以下几种方式的测试:

  1. cpu 处理器性能
  2. threads 线程调度器性
  3. mutex 互斥锁性能
  4. memory 内存分配及传输速度
  5. fileio 文件IO性能
  6. oltp 数据库性能(OLTP基准测试)
添加数据库支持
建议使用 rpm的方式安装 数据库,这样就省去了很多的繁琐配置, sysbench 会自动去数据库的rpm安装目录去找到所需的文件
如果是 mysql数据库 则需要安装 mysql-devel
如果是 maria数据库 则需要安装 mariadb-devel
因为 sysbench 运行时会用到数据库的驱动,所以本地必须要安装同样的数据库
[tidb@dev10 srv]$ yum -y install make automake libtool pkgconfig libaio-devel
[tidb@dev10 srv]$
[tidb@dev10 srv]$ yum install mariadb-devel -y
使用 rpm安装的 sysbench
默认会安装到这个目录下: /usr/local/share/sysbench/
常用的测试脚本会在这里面:/usr/local/share/sysbench/oltp_read_write.lua
下载安装
[tidb@dev10 srv]$ pwd
/home/tidb/srv
[tidb@dev10 srv]$
[tidb@dev10 srv]$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
[tidb@dev10 srv]$
[tidb@dev10 srv]$ sudo yum -y install sysbench
[tidb@dev10 srv]$
[tidb@dev10 srv]$ sysbench --version
sysbench 1.0.16
[tidb@dev10 srv]$



开始压力测试
1 测试数据导入
1.1 创建配置文件
[tidb@dev10 srv]$ cat > config << eric
mysql-host=192.168.180.53
mysql-port=4000
mysql-user=root
mysql-password=q1w2E#R\$
# 指定数据库名
mysql-db=sbtest

# 限制最多能够创建 5个事务。默认为 0 表示没有限制
events=5

# 要创建的工作线程总数,客户端的并发连接数
threads=16

# 生成报告的时间间隔,单位是秒,如10
report-interval=10

#
db-driver=mysql
eric

[tidb@dev10 srv]$
1.2 导入数据
  • --tables=1 创建测试表数量,1等于 1张表
  • --table_size=10000 每张测试表的数据量,1等于 1条数据
[tidb@dev10 srv]$ sysbench --config-file=config /usr/local/share/sysbench/oltp_common.lua --tables=1 --table-size=10000 prepare
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Initializing worker threads...

Creating table 'sbtest1'...
Creating a secondary index on 'sbtest1'...
Inserting 10000 records into 'sbtest1'

[tidb@dev10 srv]$
1.3 开始压测
[tidb@dev10 srv]$ sysbench --config-file=config /usr/local/share/sysbench/oltp_common.lua --tables=1 --table-size=10000 run
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Running the test with following options:
Number of threads: 16
Report intermediate results every 10 second(s)
Initializing random number generator from current time


Initializing worker threads...

Threads started!

SQL statistics:
    queries performed:
        read:                            0                         # 读总数
        write:                           5000                      # 写总数
        other:                           0                         # 其他操作总数(增、删、改、查之外的操作,例如COMMIT等)
        total:                           5000                      # 全部总数
    transactions:                        5000   (579.22 per sec.)  # 总事务数(每秒事务数)
    queries:                             5000   (579.22 per sec.)
    ignored errors:                      0      (0.00 per sec.)
    reconnects:                          0      (0.00 per sec.)

General statistics:
    total time:                          8.6300s                   # 总耗时
    total number of events:              5000                      # 共发生多少事务数

Latency (ms):
         min:                                   15.15              # 最小耗时
         avg:                                   27.57              # 平均耗时
         max:                                   63.24              # 最大耗时
         95th percentile:                       33.72              # 超过95%平均耗时
         sum:                               137833.94

Threads fairness:
    events (avg/stddev):           312.5000/0.87
    execution time (avg/stddev):   8.6146/0.01

[tidb@dev10 srv]$
1.4 清除压测数据
[tidb@dev10 srv]$ sysbench --config-file=config /usr/local/share/sysbench/oltp_common.lua --tables=1 --table-size=10000 cleanup
sysbench 1.0.17 (using system LuaJIT 2.0.4)

Dropping table 'sbtest1'...
[tidb@dev10 srv]$

自定义 lua 压测脚本

使用sysbench的一些建议。

1、在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对MySQL的基准测试,还是二者都需要。
2、如果需要针对MySQL的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。
3、基准测试要进行多次才有意义。
4、测试时需要注意主从同步的状态。
5、测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。

你可能感兴趣的:(Sysbench,TiDB)