[tidb@dev10 ~]$ more /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[tidb@dev10 ~]$
[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
厂商 ID: GenuineIntel
CPU 系列: 6
型号: 79
型号名称: Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
步进: 1
CPU MHz: 2194.917
BogoMIPS: 4389.83
超管理器厂商: VMware
虚拟化类型: 完全
L1d 缓存: 32K
L1i 缓存: 32K
L2 缓存: 256K
L3 缓存: 30720K
NUMA 节点0 CPU: 0-7
......
[tidb@dev10 ~]$
github: https://github.com/akopytov/sysbench
sysbench 是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试
rpm仓库:http://www.rpmfind.net/linux/rpm2html/search.php?query=sysbench
它主要包括以下几种方式的测试:
建议使用 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
默认会安装到这个目录下: /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]$
开始压力测试
[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]$
--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]$
[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]$
[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]$
1、在开始测试之前,应该首先明确:应采用针对整个系统的基准测试,还是针对MySQL的基准测试,还是二者都需要。
2、如果需要针对MySQL的基准测试,那么还需要明确精度方面的要求:是否需要使用生产环境的真实数据,还是使用工具生成也可以;前者实施起来更加繁琐。如果要使用真实数据,尽量使用全部数据,而不是部分数据。
3、基准测试要进行多次才有意义。
4、测试时需要注意主从同步的状态。
5、测试必须模拟多线程的情况,单线程情况不但无法模拟真实的效率,也无法模拟阻塞甚至死锁情况。