前言

sysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。sysbench提供如下测试:

(1)CPU性能

(2)磁盘IO性能

(3)调度程序性能

(4)内存分配及传输速度

(5)POSIX线程性能

(6)数据库性能(OLTP基准测试)

sysbench支持 MySQL、PostgreSQL、Oracle 数据库。

安装

# centos7
yum install -y sysbench
# debian 11
apt install -y sysbench # 编译安装。step1:下载源码
git clone https://github.com/akopytov/sysbench.git
# 编译安装。step2:安装依赖(centos 7)
yum -y install make automake libtool pkgconfig libaio-devel mariadb-devel openssl-devel postgresql-devel
# 编译安装。step3:正式编译
cd sysbench
./autogen.sh
./configure
make
make install

帮助文档

sysbench --help

CPU测试

# 帮助
sysbench cpu help
# 示例。要计算的素数最大值20000,开启8线程
sysbench cpu --cpu-max-prime=20000 --threads=8 run

结果解释:

# 所有线程每秒完成5704.79次events
events per second: 5704.79
# 总耗时10.0026s
total time: 10.0026s
# 10秒内所有线程一共完成了57073次events
total number of events: 57073
# 完成1次event的最少耗时,单位毫秒
min: 3.03
# 所有event的平均耗时
avg:
# 完成1次event的最多耗时
max:
# 95%的event在2.81毫秒内完成
95th percentile: 2.81
# 平均每个线程完成3567.0625次event,标准差为9.33
events (avg/stddev): 3567.0625/9.33
# 每个线程平均耗时9.9997秒,标准差为0
execution time (avg/stddev): 9.9997/0.00

内存测试

# 帮助文档
sysbench memory help # –memory-block-size=SIZE:测试内存块的大小,默认为1K。
# –memory-total-size=SIZE:数据传输的总大小,默认为100G。
# –memory-scope=STRING:内存访问的范围,包括全局和本地范围,默认为global。
# –memory-hugetlb=[on|off]:是否从HugeTLB池分配内存的开关,默认为off。
# –memory-oper=STRING:内存操作的类型,包括read, write, none,默认为write
# –memory-access-mode=STRING:内存访问模式,包括seq,rnd两种模式,默认为seq。 # 示例。12线程,每个内存块大小8K,数据传输总大小100G(并不是占用100G),内存访问模式为seq
sysbench memory --threads=12 --memory-block-size=8K --memory-total-size=100G --memory-access-mode=seq run

硬盘IO测试

# 帮助文档
sysbench fileio help # –file-num=N:生成测试文件的数量,默认为128。
# –file-block-size=N:测试时所使用文件块的大小,如果想磁盘针对innodb存储引擎进行测试,可以将其设置为16384(innodb存储引擎页的大小),默认为16384。
# –file-total-size=SIZE:创建测试文件的总大小,默认为2G大小。
# –file-test-mode=STRING:文件测试模式,seqwr(顺序写)、seqrewr(顺序读写)、seqrd(顺序读)、rndrd(随机读)、rndwr(随机写)、rndrw(随机读写)。
# –file-io-mode=STRING:文件操作模式,sync(同步)、async(异步)、fastmmap(快速mmap)、slowmmap(慢速mmap),默认为sync。
# –file-async-backlog=N:对应每个线程队列的异步操作数,默认为128。
# –file-extra-flags=STRING:打开文件时的选项,与API相关的参数。
# –file-fsync-freq=N:执行fsync函数的频率。fsync主要是同步磁盘文件,0代表不使用fsync函数,默认值为100。
# –file-fsync-all=[on|off]:每执行完一次写操作,就执行一次fsync。默认为off。
# –file-fsync-end=[on|off]:测试结束时执行fsync函数,默认为on。
# –file-fsync-mode=STRING:文件同步函数选择,和API相关的参数,由于多个操作系统对于fdatasync支持不同,因此不建议使用fdatasync,默认为fsync。
# –file-merged-requests=N:大多情况下,合并可能的IO的请求数,默认为0。
# –file-rw-ratio=N:测试时的读写比例,默认时为1.5,即可3:2

示例

  1. 先准备测试文件
# 生成16个测试文件,测试文件总大小为2G
sysbench fileio --file-num=16 --file-total-size=2G prepare
  1. 执行测试
# 文件测试模式为随机读,直连不用缓存
sysbench fileio --file-total-size=2G --file-test-mode=rndrd --time=180 --threads=16 --file-num=16 --file-extra-flags=direct --file-fsync-freq=0 --file-block-size=16384 run
  1. 清理测试数据
sysbench fileio --file-num=16 --file-total-size=2G cleanup

OLTP基准测试(MySQL数据库测试)

# 命令选项
sysbench help

示例

  1. 准备测试数据
# --db-driver: 数据库驱动类型
# --time: 持续访问300秒
# --threads: 10线程并发
# --report-interval:每1秒报告一次
# --mysql-host port user password 数据库配置信息
# --mysql-db --tables --table_size 测试数据库为test_db,库里建20个表,每个表100万条数据。需要事先创建库
# oltp_read_write 执行oltp数据库的读写测试
# --db-ps-mode 禁止ps模式(prepared statements)
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable prepare
  1. 测试:综合读写
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable run
  1. 测试:只读
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_only --db-ps-mode=disable run
  1. 测试:删除
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=10 --report-interval=30 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_delete --db-ps-mode=disable run
  1. 清理测试数据
/usr/local/bin/sysbench --db-driver=mysql --time=300 --threads=64 --report-interval=1 --mysql-host=172.50.13.12 --mysql-port=3306 --mysql-user=root --mysql-password=dksj1312mysql --mysql-db=test_db --tables=20 --table_size=1000000 oltp_read_write --db-ps-mode=disable cleanup

参考文章

压测工具sysbench的使用的更多相关文章

  1. MySQL 性能压测工具-sysbench,从入门到自定义测试项

    sysbench是一个开源的.基于LuaJIT(LuaJIT 是 Lua 的即时编译器,可将代码直接翻译成机器码,性能比原生 lua 要高) 的.可自定义脚本的多线程基准测试工具,也是目前用得最多的 ...

  2. mysql常用压测工具

    关键字:mysql压测工具 mysqlslap.sysbench  基准测试sysbench 压力测试 tpcc  具体怎么使用百度

  3. Http压测工具wrk使用指南

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  4. web压测工具http_load原理分析

    一.前言 http_load是一款测试web服务器性能的开源工具,从下面的网址可以下载到最新版本的http_load: http://www.acme.com/software/http_load/ ...

  5. [软件测试]网站压测工具Webbench源码分析

    一.我与webbench二三事 Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能.Webbench ...

  6. Http压测工具wrk使用指南【转】

    用过了很多压测工具,却一直没找到中意的那款.最近试了wrk感觉不错,写下这份使用指南给自己备忘用,如果能帮到你,那也很好. 安装 wrk支持大多数类UNIX系统,不支持windows.需要操作系统支持 ...

  7. python服务端多进程压测工具

    本文描述一个python实现的多进程压测工具,这个压测工具的特点如下: 多进程 在大多数情况下,压测一般适用于IO密集型场景(如访问接口并等待返回),在这种场景下多线程多进程的区分并不明显(详情请参见 ...

  8. 内存压测工具Memtester

    在做压力测试时,发现一个内存压测工具Memtester,可以随意设置内存占用大小,非常方便 下载地址:http://pyropus.ca/software/memtester/old-versions ...

  9. Http 压测工具 wrk 基本使用

    Http 压测工具 wrk 基本使用 Intro wrk 是一款现代HTTP基准测试工具,能够在单个多核CPU上运行时产生显着负载.它将多线程设计与可扩展事件通知系统(如epoll和kqueue)结合 ...

  10. 压测工具使用(vegeta)

    一.压测工具vegeta 1.介绍 Vegeta 是一个用 Go 语言编写的多功能的 HTTP 负载测试工具,它提供了命令行工具和一个开发库. 官方地址:https://github.com/tsen ...

随机推荐

  1. mapper中sql返回类型是integer,但是sql查询结果是null,报错

    1.出问题代码 当sql返回结果为null时报错    org.apache.ibatis.binding.BindingException: Mapper method 'com.yswl.scie ...

  2. 2022-12-03:部门工资最高的员工。以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高。sql语句如何写? 输出结果如下: department emp

    2022-12-03:部门工资最高的员工.以下数据Max 和 Jim 在 IT 部门的工资都是最高的,Henry 在销售部的工资最高.sql语句如何写? 输出结果如下: department empl ...

  3. 2022-07-10:以下go语言代码输出什么?A:A,B;B:A,C:A,fatal error;D:fatal error... func main() { var m sync.Mute

    2022-07-10:以下go语言代码输出什么?A:A,B:B:A,C:A,fatal error:D:fatal error- func main() { var m sync.Mutex fmt. ...

  4. 2022-02-11:单词缩写。 给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写。 初始缩写由起始字母+省略字母的数量+结尾字母组成。 若存在冲突,亦即多于一个单

    2022-02-11:单词缩写. 给定一个由n个不重复非空字符串组成的数组,你需要按照以下规则为每个单词生成最小的缩写. 初始缩写由起始字母+省略字母的数量+结尾字母组成. 若存在冲突,亦即多于一个单 ...

  5. 2021-10-28:打家劫舍 II。你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装

    2021-10-28:打家劫舍 II.你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金.这个地方所有的房屋都 围成一圈 ,这意味着第一个房屋和最后一个房屋是紧挨着的.同时,相邻的房屋装 ...

  6. [ARC114D] Moving Pieces on Line 解题报告

    AT题面 简要题意 有一个红色的数轴,相邻两个整点之间连有一条边,所有边初始为红色.数轴上有 \(n\) 个棋子,将一个棋子从 \(a\) 位置移到 \(b\) 位置,可以将 \((a,b)\) 之间 ...

  7. 基于electron25+vite4创建多窗口|vue3+electron25新开模态窗体

    在写这篇文章的时候,查看了下electron最新稳定版本由几天前24.4.0升级到了25了,不得不说electron团队迭代速度之快! 前几天有分享一篇electron24整合vite4全家桶技术构建 ...

  8. 玩转服务器之数据传输篇:如何快速搭建FTP文件共享服务器

    FTP 文件共享服务器介绍 FTP服务(File Transfer Protocol,FTP)是最早应用于主机之间数据传输的基本服务之一,是目前使用最广泛的文件传送协议.FTP文件共享服务器在日常办公 ...

  9. 10 款 VS Code 插件神器,第 7 款超级实用!

    VS Code 是这两年非常热门的一款 IDE,它不仅有提升开发体验的界面.轻量化的编辑器,还有丰富而强大的插件,这些优秀的插件使得 VS Code 生态体系更加吸引人,让开发效率大大提升.本文来介绍 ...

  10. Java 实战介绍 Cookie 和 Session 的区别

    HTTP 是一种不保存状态的协议,即无状态协议,HTTP 协议不会保存请求和响应之间的通信状态,协议对于发送过的请求和响应都不会做持久化处理. 无状态协议减少了对服务压力,如果一个服务器需要处理百万级 ...