type
status
date
slug
summary
tags
category
icon
password
前言
简介
SysBench 是一个基于 LuaJIT 的可编写多线程基准测试工具。它最常用于数据库基准测试,但也可用于创建不涉及数据库服务器的任意复杂工作负载。并且提供多平台支持,如Linux、Windows(1.0版本后已删除支持)、Macos,Fedora、Debian等其他平台也可以通过源码编译安装。
特性:
- 提供大量的速率和延迟的统计数据,包括延迟的百分比和柱状图。
- 即使有成千上万的并发线程,开销也很低。sysbench能够每秒产生和跟踪数以亿计的事件。
- 通过在用户提供的Lua脚本中实现预定义的钩子,可以轻松创建新的基准。
- 也可以作为一个通用的Lua解释器,只需在你的脚本中用#!/usr/bin/sysbench替换#!/usr/bin/lua。
本次测试采用GitHub上的最新版安装包,版本号为1.0.20
操作系统版本采用 CentOs7.6 x86_64
测试的数据库:MySQL。
软件安装
Linux
网络安装(yum)
- RHEL/CentOS:
- Debian/Ubuntu:
离线安装(源码编译安装)
GitHub下载源码包:Tags · akopytov/sysbench · GitHub
依赖环境安装:
- RHEL/CentOS:
- Debian/Ubuntu:
编译安装:
使用方法介绍
sysbench测试三部曲:
prepare -> run -> cleanup
准备数据(prepare):
例:sysbench /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 --mysql-user=root --mysql-password=123123 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sysbench_test prepare
测试数据(run):
例:sysbench /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 --mysql-user=root --mysql-password=123123 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sysbench_test run
清理测试数据(cleanup):
例:sysbench /usr/share/sysbench/oltp_read_write.lua --tables=10 --table_size=100000 --mysql-user=root --mysql-password=123123 --mysql-host=127.0.0.1 --mysql-port=3306 --mysql-db=sysbench_test cleanup
参数解读
- -tables 生成的数据表数
- -table_size 表中数据行数
- -mysql-db 将要生成测试数据的数据库名
- -threads: 表示线程数
- -time: 表示执行时间
- -mysql-host: 指定数据库IP地址
- -report-interval: 表示间隔多少秒输出测试信息
- -mysql-db: 指定测试的数据库
run : 表示运行测试
prepare: 准备测试数据
cleanup: 清理测试数据
测试环境准备
MySQL 5.7
本次测试采用CentOS7.6系统,配置为1C 2G,安装MySQL5.7社区版测试。
测试环境准备
MySQL安装与配置
- 配置MySQL yum源
下载MySQL yum源安装包,执行 rpm -ivh mysql80-community-release-el7-3.noarch.rpm
即可成功添加源,编辑/etc/yum.repos.d/mysql-community.repo文件,将测试所需要版本的MySQL源启用,enabled=0为关闭状态,改为enabled=1即为启用。
- 安装
mysql -V 检验版本,以免误安装为mariadb。
- 启动、初始化配置
- 登录MySQL并创建测试库
sysbench生成测试数据
- 查找sysbench自带的数据生成脚本

各个脚本的测试用途:
oltp_read_write:测试数据库的总和读写tps
oltp_read_only:测试数据库的只读性能
oltp_delete: 测试数据库删除性能
oltp_update_index:测试数据库更新索引字段等的性能
oltp_insert: 测试数据库数据插入性能
oltp_write_only:测试数据库的写入性能
oltp_point_select:测试数据库的查询性能
- 生成测试数据库数据
执行测试任务
测试结果数值解读
主要参考结果参数:
transactions: 每秒事务总数(tps)
queries: 每秒查询总数 (qps)
95th percentile: 前95%的请求的最大响应时间
清除测试数据
测试方案
1. 线程数对TPS和QPS的影响
测试线程数对TPS和QPS的影响,所以将测试线程数定为1,2,4,8,16,32,64,128,256分别测试,测试结果绘制出折线图观察变化情况。
1.1 首先生成测试文件:
1.2 编写测试脚本:
1.3 正式测试将结果输出到 thread.log文件中,方便关键数据取出。
bash thread.sh > thread.log
!!!
发现测试进程在线程为256时终止报错,经查阅,是由于MySQL默认的最大线程数和最大连接数已经不满足我们的测试。
!!!
解决办法:
修改/etc/my.cnf 文件
添加如下参数:
max_connections=40960
max_prepared_stmt_count=199999
重启MySQL:systemctl restart mysqld
重试解决。
1.4 取出测试结果中的关键数据。
cat thread.log | grep transactions: | awk '{print $3}'
cat thread.log | grep queries: | awk '{print $3}'
1.5 结果图:

2. 长时间高负载数据库的稳定性
测试命令:
cat runtime.log | grep tps: | awk '{print $2}'
cat runtime.log | grep tps: | awk '{print $7}'
cat runtime.log | grep tps: | awk '{print $9}'
结果图:

结论:
3. 多表少数据和少表多数据对数据库性能是否有影响
创建多表少数据环境
工作的线程不能在30秒内初始化
测试命令:
测试环境准备
Oracle安装准备
安装准备:
配置epel源 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
- 将oracle-database-ee-19c-1.0-1.x86_64 .rpm上传至服务器
rpm -ivh oracle-database-ee-19c-1.0-1.x86_64\ (1).rpm
- 安装oracle-database-preinstall-19c包 执行:
/etc/init.d/oracledb_ORCLCDB-19c configure
- 经过漫长的等待

- Author:NotionNext
- URL:https://tangly1024.com/article/11140ef0-3786-803c-9b2a-c39a768823a4
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!
Relate Posts