跳到主要内容

StoneDB性能测试方法(OLTP)

SysBench工具介绍

SysBench是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。

测试说明

CREATE TABLE `sbtest1` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k` int(11) NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_1` (`k`)
) ENGINE=StoneDB AUTO_INCREMENT=800001 DEFAULT CHARSET=utf8

SQL请求比例(只读测试方案下所有的请求都是读操作,不涉及写操作)

SQL类型执行比例SQL语句示例
point_selects10SELECT c FROM sbtest%u WHERE id=?
simple_ranges1SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ?
sum_ranges1SELECT SUM(k) FROM sbtest%u WHERE id BETWEEN ? AND ?
order_ranges1SELECT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
distinct_ranges1SELECT DISTINCT c FROM sbtest%u WHERE id BETWEEN ? AND ? ORDER BY c
index_updates(StoneDB无需二级索引,所以不用添加二级索引,等同于
non_index_updates)1UPDATE sbtest%u SET k=k+1 WHERE id=?
non_index_updates1UPDATE sbtest%u SET c=? WHERE id=?

测试指标

  • 每秒执行事务数TPS(Transactions Per Second)数据库每秒执行的事务数,以COMMIT成功次数为准。
  • 每秒执行请求数QPS(Queries Per Second)数据库每秒执行的SQL数,包含INSERT、SELECT、UPDATE、DETELE等。
  • SysBench标准OLTP读写混合场景中一个事务包含18个读写SQL(由于暂不支持delete操作,所以去除一条deleteSQL)。
  • SysBench标准OLTP只读场景中一个事务包含14个读SQL(10条主键点查询、4条范围查询)
  • SysBench标准OLTP写场景中一个事务包含4个写SQL(2条UPDATE、1条DETELE(去除)、1条INSERT(和delete绑定去除))

安装工具-Sysbench

yum install gcc gcc-c++ autoconf automake make libtool bzr mysql-devel git mysql
git clone https://github.com/akopytov/sysbench.git
##从Git中下载SysBench
cd sysbench
##打开SysBench目录
git checkout 1.0.18
##切换到SysBench 1.0.18版本
./autogen.sh
##运行autogen.sh
./configure --prefix=$WROKSPACE/sysbench/ --mandir=/usr/share/man
make
##编译
make install

测试语句示例

cd $WROKSPACE/sysbench/
# 准备数据
bin/sysbench --db-driver=mysql --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=xxx --mysql-password=xxxxxx --mysql-db=sbtest --table_size=800000 --tables=230 --time=600 --mysql_storage_engine=StoneDB --create_secondary=false --test=src/lua/oltp_read_only.lua prepare

# 运行workload
bin/sysbench --db-driver=mysql --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=xxx --mysql-password=xxxxxx --mysql-db=sbtest --table_size=800000 --tables=230 --events=0 --time=600 --mysql_storage_engine=StoneDB --threads=8 --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 --test=src/lua/oltp_read_only.lua run

# 清理压测数据
bin/sysbench --db-driver=mysql --mysql-host=xx.xx.xx.xx --mysql-port=3306 --mysql-user=xxx --mysql-password=xxxxxx --mysql-db=sbtest --table_size=800000 --tables=230 --events=0 --time=600 --mysql_storage_engine=StoneDB --threads=8 --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 --test=src/lua/oltp_read_only.lua cleanup

SysBench参数说明

参数说明
db-driver数据库驱动。
mysql-host测试实例连接地址。
mysql-port测试实例连接端口。
mysql-user测试实例账号。
mysql-password测试实例账号对应的密码。
mysql-db测试实例数据库名。
table_size测试表大小。
tables测试表数量。
events测试请求数量。
time测试时间。
threads测试线程数。
percentile需要统计的百分比,默认值为95%,即请求在95%的情况下的执行时间。
report-interval表示N秒输出一次测试进度报告,0表示关闭测试进度报告输出,仅输出最终的报告结果。
skip-trx是否跳过事务。1:跳过;0:不跳过
mysql-socket本地的实例可以指定socket文件
create_secondary是否创建二级索引,默认true