sysbench mysql_通过sysbench工具实现MySQL数据库的性能测试

article/2025/9/27 12:56:51

1.背景

sysbench是一款压力测试工具,可以测试系统的硬件性能,也可以用来对数据库进行基准测试。sysbench 支持的测试有CPU运算性能测试、内存分配及传输速度测试、磁盘IO性能测试、POSIX线程性能测试、互斥性测试测试、数据库性能测试(OLTP基准测试)。目前支持的数据库主要是MySQL数据库和PG数据库。

在新服务器上线时,建议对服务器的性能做一次测试,最好与既往的同类型的服务器的性能测试报表做一个横线比较,发现潜在问题。及新机器上线前,对服务器做一次体检。

对数据库而言,我们可以通过sysbench工具实现对数据库的基准测试。在现在的系统架构中,前端都比较容易弹性水平拓展,数据库相对较难,因此,基准测试对数据库具有很重要的作用。而对数据库的基准测试的作用,就是分析在当前的配置下(包括硬件配置、OS、数据库设置等),数据库的性能表现,从而找出MySQL的性能阈值,并根据实际系统的要求调整配置。

2.sysbench的安装

1)安装命令

yum -y install sysbench

2)查看安装的版本

sysbench --version

e9e45bf75e8579b94c1b219d6a8e1df6.png

3)查看已安装软件的信息(主要是通 rpm 命令)。

查询sysbench的安装信息,主要是测试mysql时,需要使用sysbench自带的lua脚本进行测试。如果使用快速安装的方式,默认的脚本路径为:/usr/share/sysbench。

如果不在这个命令,我们我们执行以下命令查看,查找已安装在本机Linux系统上面的所有的sysbench软件的程序:

rpm -qa sysbench

列出该软件所有的文件与目录所在完整文件名(list):

rpm -ql sysbench

b068d2e19109a7d9b7a6d677859424a9.png

3.sysbench 语法

sysbench --help

Usage:

sysbench [options]... [testname] [command]

Commands implemented by most tests: prepare run cleanup help

General options:--threads=N number of threads to use [1]--events=N limit for total number of events [0]--time=N limit for total execution time in seconds [10]--forced-shutdown=STRING number of seconds to wait after the --time limit before forcing shutdown, or 'off'to disable [off]--thread-stack-size=SIZE size of stack per thread [64K]--rate=N average transactions rate. 0 for unlimited rate [0]--report-interval=N periodically report intermediate statistics with a specified interval in seconds. 0 disables intermediate reports [0]--report-checkpoints=[LIST,...] dump full statistics and reset all counters at specified points in time. The argument is a list of comma-separated values representing the amount of time inseconds elapsed from start of test when report checkpoint(s) must be performed. Report checkpoints are off by default. []--debug[=on|off] print more debugging info[off]--validate[=on|off] perform validation checks where possible [off]--help[=on|off] print help and exit [off]--version[=on|off] print version and exit [off]--config-file=FILENAME File containing command line options--tx-rate=N deprecated alias for --rate [0]--max-requests=N deprecated alias for --events [0]--max-time=N deprecated alias for --time [0]--num-threads=N deprecated alias for --threads [1]

Pseudo-Random Numbers Generator options:--rand-type=STRING random numbers distribution {uniform,gaussian,special,pareto} [special]--rand-spec-iter=N number of iterations used for numbers generation [12]--rand-spec-pct=N percentage of values to be treated as 'special' (for special distribution) [1]--rand-spec-res=N percentage of 'special' values to use (for special distribution) [75]--rand-seed=N seed for random number generator. When 0, the current time is used as a RNG seed. [0]--rand-pareto-h=N parameter h for pareto distribution [0.2]

Log options:--verbosity=N verbosity level {5 - debug, 0 - only critical messages} [3]--percentile=N percentile to calculate in latency statistics (1-100). Use the special value of 0 to disable percentile calculations [95]--histogram[=on|off] print latency histogram inreport [off]

General database options:--db-driver=STRING specifies database driver to use ('help'to get list of available drivers) [mysql]--db-ps-mode=STRING prepared statements usage mode {auto, disable} [auto]--db-debug[=on|off] print database-specific debug information [off]

Compiled-indatabase drivers:

mysql-MySQL driver

pgsql-PostgreSQL driver

mysql options:--mysql-host=[LIST,...] MySQL server host [localhost]--mysql-port=[LIST,...] MySQL server port [3306]--mysql-socket=[LIST,...] MySQL socket--mysql-user=STRING MySQL user [sbtest]--mysql-password=STRING MySQL password []--mysql-db=STRING MySQL database name [sbtest]--mysql-ssl[=on|off] use SSL connections, if available inthe client library [off]--mysql-ssl-cipher=STRING use specific cipher forSSL connections []--mysql-compression[=on|off] use compression, if available inthe client library [off]--mysql-debug[=on|off] trace all client library calls [off]--mysql-ignore-errors=[LIST,...] list of errors to ignore, or "all" [1213,1020,1205]--mysql-dry-run[=on|off] Dry run, pretend that all MySQL client API calls are successful without executing them [off]

pgsql options:--pgsql-host=STRING PostgreSQL server host [localhost]--pgsql-port=N PostgreSQL server port [5432]--pgsql-user=STRING PostgreSQL user [sbtest]--pgsql-password=STRING PostgreSQL password []--pgsql-db=STRING PostgreSQL database name [sbtest]

Compiled-intests:

fileio- File I/O test

cpu-CPU performance test

memory-Memory functions speed test

threads-Threads subsystem performance test

mutex- Mutex performance test

基本语法如下:

sysbench [options]... [testname] [command]

command是sysbench要执行的命令,包括prepare、run和cleanup。prepare是为测试提前准备数据,run是执行正式的测试,cleanup是在测试完成后对数据库进行清理

testname指定了要进行的测试,在老版本的sysbench中,可以通过--test参数指定测试的脚本;而在新版本中,--test参数已经声明为废弃,可以不使用--test,而是直接指定脚本。测试时使用的脚本为lua脚本,可以使用sysbench自带脚本,也可以自己开发。

options关于MySQL的主要包括MySQL 连接信息参数 和 MySQL 执行相关的参数。

4 测试

Step 1 准备压测数据

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='textpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 prepare

1bd8915a45ed23fe35c4a51a8d250e67.png

step 2  压测

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='textpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 run

也可以将测试结果导出到文件中,便于后续分析。

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='testpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 run >> ./mysysbench.log

2072ce17e6302716e0b561601baab46e.png

step 3 清理压测数据

sysbench /usr/share/sysbench/oltp_insert.lua --mysql-host=XXX.XXX.XXX.XXX --mysql-port=3306 --mysql-user=testsbuser --mysql-password='testpwd' --mysql-db=tssysbench --db-driver=mysql --tables=15 --table-size=500000 --report-interval=10 --threads=128 --time=120 cleanup

ca0940d66bc5e59c0be684b137bde17f.png

补充

OLTP基准测试模拟了一个简单的事务处理系统的工作负载。若要对数据库性能进行测试就要使用OLTP相关的脚本。

在/usr/share/sysbench/目录下有相关的lua脚本:

85aa6e0bf6fe08827809732b56265c8a.png

压测结果中包含了很多的信息,其中重点需要我们关注的信息是:

A:总的事务数 (total number of events);

B:每秒事务数;

C:时间统计信息(最小,平均,最大响应时间,以及95%百分比响应时间);

D:线程公平性统计信息,表示负载的公平性(thread-fairness)。

5.注意事项

(1) 测试数据库需要提前创建,及时测试账号拥有创建数据库的权限。

--mysql-db 参数指定了测试的数据,默认是sbtest。

不提前创建,报错信息如下;

FATAL: `sysbench.cmdline.call_command'function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed

(last message repeated 3times)

FATAL: error1049: Unknown database 'sysbench_db'FATAL: `sysbench.cmdline.call_command'function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed

FATAL: unable to connect to MySQL server on host 'XXX.XXX.XXX.XXX', port 3306, aborting...

(last message repeated 1times)

FATAL: error1049: Unknown database 'sysbench_db'(last message repeated 1 times)

或是(不指定数据库)

FATAL: `sysbench.cmdline.call_command'function failed: /usr/share/sysbench/oltp_common.lua:83: connection creation failed

FATAL: error 1049: Unknown database 'sbtest'FATAL: unable to connect to MySQL server on host'XXX.XXX.XXX.XXX', port 3306, aborting...

(2)不要在MySQL服务器运行的机器上进行测试,一方面可能无法体现网络(哪怕是局域网)的影响,另一方面,sysbench的运行(尤其是设置的并发数较高时)会影响MySQL服务器的表现.

(3)逐步增加客户端的并发连接数(--thread参数),观察在连接数不同情况下,MySQL服务器的表现。

(4)如果连续进行多次测试,注意确保之前测试的数据已经被清理干净。

(5)如果生成的报告,图形化分析,可以通过gnuplot工具进行分析。


http://chatgpt.dhexx.cn/article/uxmEKIqG.shtml

相关文章

sysbench 压测 mysql_sysbench压测

一:sysbench的安装遇到的几个问题: 解决办法: yum install automake 解决办法:yum install libtool sysbench 的一些常用参数低版本和高版本是有点区别的大家在测试的时候稍微注意一下: 以下这个版本是0.5版本的但是我…

Sysbench常用命令

1 Sysbench 安装 requirements yum -y install make automake libtool pkgconfig libaio-devel# For MySQL support, replace with mysql-devel on RHEL/CentOS 5yum -y install mariadb-devel openssl-devel mysql-devel# For PostgreSQL supportyum -y install postgresql-…

sysbench性能测试

sysbench的官网地址是:http://sysbench.sourceforge.net Step 1: 下载安装: sysbench-0.5.tar.gz 解压后展开目录如下 [rootlocalhost mnt]# cd sysbench-0.5 [rootlocalhost sysbench-0.5]# ls aclocal.m4 autom4te.cache c…

mysql sysbench_MySQL sysbench基准测试

一、基准测试 参考《高性能 MySQL》第二章。 二、Sysbench sysbench 是开源的跨平台多线程基准测试工具,主要用于测试各种不同系统参数下的 CPU/内存/线程/IO/数据库等方面的性能,数据库目前支持 MySQL/Oracle/PostgreSQL。具体的参数设置,应…

sysbench mysql图表_sysbench_mysql

ref 测试 当执行下面这个sysbench测试mysql的时候,你不知道的可能可能是: 这到底是在测试读写?还是 读? 答: 只读 --num-threads12 啥意思? 答:就是说有12个线程在同时链接 你可以看到&#xff…

性能测试之sysbench

本期是写的测试mysql的性能测试,本人也是第一次接触mysql的性能,拿到这个任务时也是多方1查询资料, sysbench压力测试工具简介: sysbench是一个开源的、模块化的、跨平台的多线程性能测试工具,可以用来进行CPU、内存…

sysbench数据库压测工具详解与实战

sysbench是一个基于LuaJIT脚本的多线程基准测试工具。2004年由Peter Zaitsev(Percona公司创始人)开发,在其0.5版本中可以使用Lua脚本实现OLTP测试。2016年重构了sysbench代码,并在2017年2月针对新的硬件环境发布了1.0版本&#xf…

sysbench 介绍

sysbench介绍 参考博客: sysbench - 老僧观天下 - 博客园 sysbench 压测 详解_俗人linux_51CTO博客 sysbench工具使用 - ZhenXing_Yu - 博客园 |QQ:327488733qq.com sysbench使用指南 - AhaoMu - 博客园 MySql性能测试工具-sysbench_oahz4699092zhao的专栏-CS…

Linux性能优化(二)——sysbench压力测试工具

一、sysbench简介 1、sysbench简介 sysBench是一个模块化的、跨平台、多线程基准测试工具,主要用于评估测试各种不同系统参数下的数据库负载情况。sysbench提供如下测试: (1)CPU性能 (2)磁盘IO性能 &…

CScope for programmer

http://bbs.sjtu.edu.cn/bbs0an,path,%2Fgroups%2FGROUP_3%2FGNULinux%2FSoftware%2FD95E89182%2FD5277E56B.html8、Cscope 的使用这下更厉害了, 用Cscope自己的话说 - "你可以把它当做是超过频的ctags", 其功能和强大程度可见一斑吧, 关于它的介绍我就不详细说了, …

CSP安全策略

介绍 内容安全策略 (CSP) 是一个附加的安全层&#xff0c;用于帮助检测和缓解某些类型的攻击&#xff0c;包括跨站脚本 (XSS) 和数据注入等攻击。 这些攻击可用于实现从数据窃取到网站破坏或作为恶意软件分发版本等用途。 启动方式 1. 浏览器客户端启动 <meta http-equi…

seccompptcl(pwn出题)

详细细节看这篇 https://www.anquanke.com/post/id/208364#h2-2 沙箱可以禁用一些系统调用&#xff0c;还是比较常见的感觉。 seccomp 下面这段代码用seccomp沙箱来禁用 安装相应库 sudo apt-get install libseccomp-dev具体参数啥的就不多讲了。。。看大佬的博客就行。 …

CSplitterWnd

MFC支持两种类型的拆分窗口&#xff1a;静态的和动态的。 静态拆分窗口的行列数在拆分窗口被创建时就设置好了&#xff0c;用户不能更改。但是用户可以缩放各行各列。一个静态拆分窗口最多可以包含16行16列。 要找一个使用了静态拆分窗口的应用程序&#xff0c;只要看一下windo…

【UNIX网络编程】|【07】SCTP协议探究

文章目录 1、概述2、接口模型2.1 一到一形式2.2 一到多形式 3、sctp_bindx函数4、sctp_connectx函数5、sctp_getpaddrs函数6、sctp_freepaddrs函数7、sctp_getladdrs函数8、sctp_freelpaddrs9、sctp_sendmsg10、sctp_recvmsg11、sctp_opt_info12、sctp_peeloff函数13、shudown1…

C++网络编程-tcpip协议

目录 1 tcp/ip协议族 1.1 体系结构以及主要协议 1.2 封装 1.3 分用 1.4 测试网络 1.5 arp协议工作原理 1.6 dns工作原理 1.7 socket和tcp/ip协议族的关系 2 ip协议详解 2.1 ip服务特点 2.2 ipv4头部结构 2.3 ip分片 2.4 ip路由 3 tcp协议详解 3.1 tcp服务的特点…

CSP绕过

01 比赛中常见的绕过CSP csp例子&#xff1a; <meta http-equiv"Content-Security-Policy" content"script-src self; object-src none; style-src cdn.example.org third-party.org; child-src https:">目前在比赛中常见的绕过 CSP 一般是: scri…

CS的使用

1&#xff09;首先创建服务端 命令&#xff1a;teamserver 192.168.71.130(主机IP) 123456&#xff08;随便设&#xff09; teamserver 192.168.71.130 123456 >/dev/null 2>&1 & (命令隐藏后台&#xff0c;jobs查看后台&#xff0c;客户端同理&#xff0c;在st…

C/C++Unix网络编程-IPC简介

IPC是进程间通信的简称。 进程、线程与信息共享 Unix进程间的信息共享的方式&#xff1a; (1) 左边的两个进程共享存留于文件系统中某个文件上的某些信息。为访问这些信息、每个进程都得穿越内核(例如read、write、lseek等)。当一个文件有待更新时&#xff0c;某种形式的同步…

CTP For Python

GitHub地址&#xff1a;https://github.com/shizhuolin/PyCTP 这是程序化期货交易上期ctp接口版本.将其包装为python版本. 支持python3 编译需求:vs2010/gcc 编译方法 python setup.py build PyCTP 编译方法 开发环境&#xff1a;windows 10 64bit, python 3.4.3 32bit, Visu…

CSP-S 2021

[CSP-S 2021] 括号序列 题目描述 小 w 在赛场上遇到了这样一个题&#xff1a;一个长度为 n n n 且符合规范的括号序列&#xff0c;其有些位置已经确定了&#xff0c;有些位置尚未确定&#xff0c;求这样的括号序列一共有多少个。 身经百战的小 w 当然一眼就秒了这题&#x…