死磕数据库系列(三十四):MySQL 性能测试工具 sysbench 详解

1b4ea9c747dca3123bcaa2ba806f3b27.gif关注公众号,回复“1024”获取2TB学习资源!

前面给大家介绍了:死磕数据库系列(三十三):MySQL 性能分析与相关工具的使用。今天我将详细的为大家介绍 MySQL 数据库的性能测试工具 sysbench 的相关知识 ,希望大家能够从中收获多多!如有帮助,请点在看、转发支持一波!!!

简介和安装

sysbench 是一个很不错的数据库性能测试工具。

  • 官方站点:https://github.com/akopytov/sysbench/

  • rpm包下载:https://packagecloud.io/akopytov/sysbench/packages/el/7/sysbench-1.0.15-1.el7.centos.x86_64.rpm

  • 源码包下载:https://github.com/akopytov/sysbench/archive/1.0.15.tar.gz

如果是编译安装,需要先安装好 mysql 的开发包(尽管编译错误时提示的是缺少 Mysql 库文件)。

yum -y install mysql-community-develtar xf 1.0.15.tar.gz
cd sysbench-1.0.15
./autogen.sh
./configure
make -j
make install

安装后,只有一个二进制文件sysbench,还提供了很多个lua脚本。

[root@s1 ~]# rpm -ql sysbench | grep 'bin\|lua'  
/usr/bin/sysbench
/usr/share/sysbench/bulk_insert.lua
/usr/share/sysbench/oltp_common.lua
/usr/share/sysbench/oltp_delete.lua
/usr/share/sysbench/oltp_insert.lua
/usr/share/sysbench/oltp_point_select.lua
/usr/share/sysbench/oltp_read_only.lua
/usr/share/sysbench/oltp_read_write.lua
/usr/share/sysbench/oltp_update_index.lua
/usr/share/sysbench/oltp_update_non_index.lua
/usr/share/sysbench/oltp_write_only.lua
/usr/share/sysbench/select_random_points.lua
/usr/share/sysbench/select_random_ranges.lua
/usr/share/sysbench/tests/include/inspect.lua
/usr/share/sysbench/tests/include/oltp_legacy/bulk_insert.lua
/usr/share/sysbench/tests/include/oltp_legacy/common.lua
/usr/share/sysbench/tests/include/oltp_legacy/delete.lua
/usr/share/sysbench/tests/include/oltp_legacy/insert.lua
/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua
/usr/share/sysbench/tests/include/oltp_legacy/oltp_simple.lua
/usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua
/usr/share/sysbench/tests/include/oltp_legacy/select.lua
/usr/share/sysbench/tests/include/oltp_legacy/select_random_points.lua
/usr/share/sysbench/tests/include/oltp_legacy/select_random_ranges.lua
/usr/share/sysbench/tests/include/oltp_legacy/update_index.lua
/usr/share/sysbench/tests/include/oltp_legacy/update_non_index.lua

本文介绍的是新版本 sysbench oltp lua脚本的用法( /usr/share/sysbench/*.lua ),所以不涉及传统的lua( tests/include/oltp_legacy/*.lua ),如果想要了解这些传统Lua脚本的用法,网上随便找。更多关于MySQL学习的文章,请参阅:死磕数据库系列之 MySQL ,本系列持续更新中。

sysbench 使用方法

以下列出了sysbench对测试mysql时常用的选项。

[root@xuexi ~]# sysbench --help
Usage:sysbench [options]... [test_lua] [lua_options] [command]Commands implemented by most tests: prepare run cleanup help

通用选项:以下中括号中的值表示默认值

--threads=N     #指定线程数[1]
--events=N      #限制最大请求数,0表示不限制[0]
--time=N        #限制最长执行时间,0表示不限制[10]#--events和--time 二者选一即可
--forced-shutdown=STRING      #达到最长执行时间后还需等待多久关闭sysbench  off表示禁用该功能[off]
--thread-stack-size=SIZE     #每个线程使用的栈空间大小[64K]
--rate=N                     #平均事务处理速率,0表示不限制[0]
--report-interval=N          #每隔几秒报告一次结果,0表示禁用间隔报告[0]
--config-file=FILENAME     #从文件中读取命令行选项
--tx-rate=N                #已废弃,是--rate的别名[0]
--max-requests=N           #已废弃,是--events的别名[0]
--max-time=N               #已废弃,是--time的别名[0]
--num-threads=N            #已废弃,是--threads的别名[1]
--db-ps-mode=STRING        #是否使用prepare模式的语句 {auto, disable} [auto]

mysql相关选项:

--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-ignore-errors=[LIST,...] 要忽略的错误代码,值可为"all" [1213,1020,1205]Compiled-in tests:fileio - File I/O testcpu - CPU performance testmemory - Memory functions speed testthreads - Threads subsystem performance testmutex - Mutex performance test

其中,command部分有4类:prepare run cleanup和help:

prepare:#准备数据的命令。例如,在sysbench压力测试之前,需要先准备好测试库、测试表以及测试表中的数据。具体用法见后文。
run:#表示进行压力测试。
cleanup:#清除测试时产生的数据。
help:#输出给定lua脚本的帮助信息。

test_lua是想要使用的lua脚本,如果是rpm包安装的sysbench,则这些脚本都是/usr/share/sysbench目录下。对于一般的数据库测试,只需使用和oltp有关的lua脚本就足够。更多关于MySQL学习的文章,请参阅:死磕数据库系列之 MySQL ,本系列持续更新中。

options和lua_options是不同的,options是sysbench的选项,lua_options是lua脚本的选项,lua_options应该要放在test_lua的后面(非必需,但建议)。

例如,要查看oltp_common.lua的用法,可以:

sysbench /usr/share/sysbench/oltp_common.lua help

准备测试数据

首先创建sysbench所需数据库sbtest(这是sysbench默认使用的库名,必须创建测试库)。

mysqladmin -h127.0.0.1 -uroot -pP@ssword1! -P3306 create sbtest;

然后,准备测试所用的表,这些测试表放在测试库sbtest中。这里使用的lua脚本为/usr/share/sysbench/oltp_common.lua

sysbench --mysql-host=127.0.0.1 \--mysql-port=3306 \--mysql-user=root \--mysql-password=P@ssword1! \/usr/share/sysbench/oltp_common.lua \--tables=10 \--table_size=100000 \prepare

其中--tables=10表示创建10个测试表,--table_size=100000表示每个表中插入10W行数据,prepare表示这是准备数的过程。

mysql> show tables from sbtest;
+------------------+
| Tables_in_sbtest |
+------------------+
| sbtest1          |
| sbtest10         |
| sbtest2          |
| sbtest3          |
| sbtest4          |
| sbtest5          |
| sbtest6          |
| sbtest7          |
| sbtest8          |
| sbtest9          |
+------------------+
mysql> select count(*) from sbtest.sbtest1;
+----------+
| count(*) |
+----------+
|   100000 |
+----------+

如果想要清除这10个表,可使用cleanup命令。

sysbench --mysql-host=127.0.0.1 \--mysql-port=3306 \--mysql-user=root \--mysql-password=P@ssword1! \/usr/share/sysbench/oltp_common.lua \--tables=10 \cleanup

数据库测试和结果分析

稍微修改下之前准备数据的语句,就可以拿来测试了。

需要注意的是,之前使用的lua脚本为oltp_common.lua,它是一个通用脚本,是被其它lua脚本调用的,它不能直接拿来测试。

所以,我这里用oltp_read_write.lua脚本来做读、写测试。还有很多其它类型的测试,比如只读测试、只写测试、删除测试、大批量插入测试等等。可找到对应的lua脚本进行调用即可。更多关于MySQL学习的文章,请参阅:死磕数据库系列之 MySQL ,本系列持续更新中。

sysbench --threads=4 \--time=20 \--report-interval=5 \--mysql-host=127.0.0.1 \--mysql-port=3306 \--mysql-user=root \--mysql-password=P@ssword1! \/usr/share/sysbench/oltp_read_write.lua \--tables=10 \--table_size=100000 \run

以下是测试返回的结果:

Initializing worker threads...Threads started!####以下是每5秒返回一次的结果,统计的指标包括:
#### 线程数、tps(每秒事务数)、qps(每秒查询数)、
#### 每秒的读/写/其它次数、延迟、每秒错误数、每秒重连次数
[ 5s ] thds: 4 tps: 130.16 qps: 2606.30 (r/w/o: 1824.51/520.66/261.13) lat (ms,95%): 104.84 err/s: 0.00 reconn/s: 0.00
[ 10s ] thds: 4 tps: 126.74 qps: 2539.17 (r/w/o: 1778.17/507.52/253.47) lat (ms,95%): 108.68 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 4 tps: 136.54 qps: 2736.34 (r/w/o: 1915.25/548.01/273.07) lat (ms,95%): 102.97 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 107.44 qps: 2148.65 (r/w/o: 1505.60/428.17/214.89) lat (ms,95%): 132.49 err/s: 0.00 reconn/s: 0.00SQL statistics:queries performed:read:          35098   # 执行的读操作数量write:         10028   # 执行的写操作数量other:         5014    # 执行的其它操作数量total:         50140transactions:      2507   (124.29 per sec.)    # 执行事务的平均速率queries:           50140  (2485.82 per sec.)   # 平均每秒能执行多少次查询ignored errors:    0      (0.00 per sec.)reconnects:        0      (0.00 per sec.)General statistics:total time:                  20.1694s     # 总消耗时间total number of events:      2507         # 总请求数量(读、写、其它)Latency (ms):min:                            2.32avg:                           32.13max:                          575.7895th percentile:              118.92    # 采样计算的平均延迟sum:                        80554.96Threads fairness:events (avg/stddev):           626.7500/2.49execution time (avg/stddev):   20.1387/0.04

cpu/io/内存等测试

sysbench内置了几个测试指标。

Compiled-in tests:fileio - File I/O testcpu - CPU performance testmemory - Memory functions speed testthreads - Threads subsystem performance testmutex - Mutex performance test

可直接help输出测试方法。例如,fileio测试。

[root@xuexi ~]# sysbench fileio help
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)fileio options:--file-num=N                  number of files to create [128]--file-block-size=N           block size to use in all IO operations [16384]--file-total-size=SIZE        total size of files to create [2G]--file-test-mode=STRING       test mode {seqwr, seqrewr, seqrd, rndrd, rndwr, rndrw}--file-io-mode=STRING         file operations mode {sync,async,mmap} [sync]--file-async-backlog=N        number of asynchronous operatons to queue per thread [128]--file-extra-flags=[LIST,...] list of additional flags to use to open files {sync,dsync,direct} []--file-fsync-freq=N           do fsync() after this number of requests (0 - don't use fsync()) [100]--file-fsync-all[=on|off]     do fsync() after each write operation [off]--file-fsync-end[=on|off]     do fsync() at the end of test [on]--file-fsync-mode=STRING      which method to use for synchronization {fsync, fdatasync} [fsync]--file-merged-requests=N      merge at most this number of IO requests if possible (0 - don't merge) [0]--file-rw-ratio=N             reads/writes ratio for combined test [1.5]

例如,创建5个文件,总共1G,每个文件大概200M。

sysbench fileio --file-num=5 --file-total-size=1G prepare[root@xuexi ~]# ls -lh test*
-rw------- 1 root root 205M Jul  8 12:15 test_file.0
-rw------- 1 root root 205M Jul  8 12:15 test_file.1
-rw------- 1 root root 205M Jul  8 12:15 test_file.2
-rw------- 1 root root 205M Jul  8 12:15 test_file.3
-rw------- 1 root root 205M Jul  8 12:15 test_file.4

然后,运行测试。

sysbench --events=5000 \--threads=16 \fileio \--file-num=5 \--file-total-size=1G \--file-test-mode=rndrw \--file-fsync-freq=0 \--file-block-size=16384 \run

结果:

File operations:reads/s:                      98.67writes/s:                     66.85fsyncs/s:                     6.26Throughput:     # 吞吐量read, MiB/s:                  1.54  # 表示读的带宽written, MiB/s:               1.04  # 表示读的带宽General statistics:total time:                   12.7426stotal number of events:       2117Latency (ms):min:                          0.00avg:                         86.66max:                       2919.4195th percentile:            646.19sum:                     183460.80Threads fairness:events (avg/stddev):          132.3125/24.19execution time (avg/stddev):  11.4663/1.09

再比例cpu性能测试:

[root@xuexi ~]# sysbench cpu --threads=40 --events=10000 --cpu-max-prime=20000 run
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)Running the test with following options:
Number of threads: 40
Initializing random number generator from current timePrime numbers limit: 20000Initializing worker threads...Threads started!CPU speed:events per second:  2127.81General statistics:total time:                          4.6986stotal number of events:              10000Latency (ms):min:                                    1.72avg:                                   18.16max:                                  302.1795th percentile:                      110.66sum:                               181628.49Threads fairness:events (avg/stddev):           250.0000/30.81execution time (avg/stddev):   4.5407/0.10

出处:https://www.cnblogs.com/f-ck-need-u/

p/9279703.html

邀你加入技术交流群,2023 我们一起卷!

4726660229059fd9fff5a096e43a3fbb.png

9702756b261b8a15509d96c245b7914e.png

推荐阅读 点击标题可跳转

文心一言的魔性作图,我愣住了。。。

TCP连接数最大不能超过65535?那服务器是如何应对百万千万并发的?

root 与 sudo 的用法与区别,居然这么多人搞不清楚

ChatGPT 团队阵容揭秘!太强了。。。

Docker 翻脸,不再开源!

戴尔 PC 将完全退出中国!完整时间表曝光

看了这篇文章!我才知道mv命令真正使用方法

5bbd09e4eb59ad445808ca8f6890c7b8.png

PS:因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下在看,加个星标,这样每次新文章推送才会第一时间出现在你的订阅列表里。点在看支持我们吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/17704.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Access denied You do not have access to chat.openai.com 【Error reference number: 1020】

使用自己的魔法无法访问chatgpt:Access denied You do not have access to chat.openai.com 【Error reference number: 1020】 1.原因2. 解决办法(2023 4.6 有效)下面是具体的操作步骤: 3. 可能出现的问题安装问题 4. 转载 1.原因…

chatgpt赋能python:Python转换成数字:从字符串到整数的完整指南

Python 转换成数字:从字符串到整数的完整指南 在Python编程中,经常需要将字符串转换成数字类型,例如整数,浮点数或复数。字符串是由字符组成的序列,而数字是用于数学计算的数据类型。因此,了解如何正确地将…

CSDN账号注销问题

在CSDN网站https://www.csdn.net/右下脚的QQ图标,点击联系客服弹出QQ对话框,直接问怎么注销账号。 客服需要你提供用户名、绑定邮箱、手机号、注册时间及地点来核验信息,通过后就会注销,其实也没注销账号,只是解绑了然…

当我们在谈论ChatGPT时,我们在谈论什么?

当我们在谈论ChatGPT时,我们在谈论什么? 文章目录 当我们在谈论ChatGPT时,我们在谈论什么?一、介绍GPT-4相比GPT-3.5有何不同呢1.交谈能力2.多语言翻译精确度3.视觉输入 二、应用领域1.小镇做题家 (学术研究)2.Cosplay&#xff0c…

【人工智能】xAI——“X宇宙”又增添了一位新成员

个人主页:【😊个人主页】 🌞热爱编程,热爱生活🌞 文章目录 前言xAI团队成员做解开宇宙本质的AI 前言 有人问他,xAI公司是干啥的?马斯克的回答引用了其偶像、科幻作家道格拉斯・亚当斯的话&…

html静态网站基于游戏网站设计与实现共计10个页面 (仿地下城与勇士游戏网页)

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

谷歌dns服务器未响应,“DNS服务器未响应”怎么办? - 爱绿豆

网络连接不上原因有很多,其中“DNS服务器未响应”这个问题让不少人受到困扰。当联网出现异常,诊断出结果显示“DNS服务器未响应”怎么办? 什么是DNS服务器? DNS服务器是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器。DNS中保存了一张域名(domain n…

安全运营场景下的机器学习算法应用

观测到一个有意思的现象: 假设把安全划分为 基础安全 和 业务安全,PR类的议题中,会出现分级:基础安全领域,喜欢讲纵深防御,给出一个炫酷的架构图,然后各种技术关键字往上标;业务安全…

人工智能时代,普通的我们如何提升自己的核心竞争力

今天这篇文章,麒麟子不聊技术,想聊聊大家都在关心的问题:人工智能时代,普通的我们如何提升自己的核心竞争力。 看着社区的开发者们都在讨论 ChatGPT,麒麟子也试用了一下,已经成功让它参与到了下面的工作&a…

Python+Yolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别

PythonYolov5跌倒检测 摔倒检测 人物目标行为 人体特征识别 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonYolov5跌倒摔倒人体特征识别>>编写代码&#xff0c;代码整洁&a…

ArcGISPRO 和 ChatGPT集成思路

“我们如何一起使用 ArcGIS PRO 和 ChatGPT&#xff1f;”ArcGIS Pro 是一款功能强大的桌面 GIS 软件&#xff0c;用于制图、空间分析和数据管理。ChatGPT 是一种 AI 语言模型&#xff0c;可用于自然语言处理任务&#xff0c;例如文本生成和响应。 结合使用 ArcGIS Pro 和 Chat…

可真刑!两高中生用 AI 生成涩图,疯狂变现

&#x1f447;&#x1f447;关注后回复 “进群” &#xff0c;拉你进程序员交流群&#x1f447;&#x1f447; 转自&#xff1a;新智元 【导读】生成式AI火了以后&#xff0c;限制输出内容的就只剩人们的想象力了。这不&#xff0c;两个高中生用AI生成裸照&#xff0c;疯狂在道…

滥用GPT,被抓了.....

程序员的成长之路 互联网/程序员/技术/资料共享 关注 阅读本文大概需要 2.8 分钟。 来自&#xff1a;IT之家 IT之家 5 月 7 日消息&#xff0c;IT之家从甘肃公安官方获悉&#xff0c;近日&#xff0c;甘肃省平凉市公安局网安大队成功侦破了一起利用人工智能技术制造虚假新闻的…

基于GPT API开发的软硬件产品的合规风险分析

随着OpenAI提供的ChatGPT产品在国内爆火&#xff0c;目前国内很多企业都已开始研究基于ChatGPT引擎为用户提供AIGC内容。ChatGPT背后的运营公司OpenAI也非常贴心的提供了GPT-3.5、GPT-4等模型的API供开发者调用&#xff0c;笔者预计国内接下来会有很多基于GPT-3.5、GPT-4模型的…

大数据技术闲侃之岗位选择解惑

前言 写下这篇文章是因为五一节前给群友的承诺&#xff0c;当然按照以往的惯例&#xff0c;也是我背后看到的这个现象&#xff0c;我发现大部分同学在投递岗位的时候都是投递数据分析岗位&#xff0c;其实背后并不是很清楚背后的岗位是做啥的&#xff0c;想想我自己的工作生涯…

给AI降温!多国机构出手开启ChatGPT调查,立法、监管一个不落

自从硅谷科技大佬们公开呼吁暂停AI训练的提议之后&#xff0c;人类与超强AI之间的争议直接被摆上了台面。 围绕着支持与反对的态度&#xff0c;多方展开了激烈辩论&#xff0c;这一网络论战甚至惊动了各国的监管部门。 3月底&#xff0c;意大利数据保护局率先行动下线了当地的…

chatgpt赋能python:Python破解wifi:真相与方法探讨

Python破解wifi&#xff1a;真相与方法探讨 作为一种通用、易学、灵活的编程语言&#xff0c;Python已经在各种领域得到了广泛应用&#xff0c;其中一项重要应用是网络安全。在网络安全方面&#xff0c;Python可以被用来进行许多操作&#xff0c;包括破解wifi密码。本文将探讨…

开发者-ChatGPT meets Web3.0 用AI赋能去中心化应用

ChatGPT meets Web3.0: 用AI赋能去中心化应用 随着Web3.0的到来&#xff0c;去中心化应用&#xff08;dApps&#xff09;正在成为新的热点。与传统的Web2.0应用相比&#xff0c;Web3.0应用具有更高的安全性、更好的隐私保护、更好的用户掌控和更广阔的应用场景等优势。作为一种…

GPT能给审计带来什么

ChatGPT的出现&#xff0c;让人工智能再次站在了聚光灯下&#xff0c;引发持续性的热议和关注。GPT模型作为重要的支撑&#xff0c;国内外近段时间密集性地发布了众多的大语言模型&#xff0c;OpenAI推出GPT-4、谷歌推出LaMDA和PaLM等大模型、Meta推出开源大模型LLaMA&#xff…

一次小破站JS代码审计出XSS漏洞思路学习

今天看了小破站一个大佬的分析&#xff0c;感觉思路很有意思&#xff0c;感兴趣的xdm可以到大佬视频下提供的链接进行测试&#xff08;传送门&#xff09;这类社交平台的XSS漏洞利用起来其实危害是特别大的&#xff0c;利用XSS能在社交平台上呈现蠕虫式的扩散&#xff0c;大部分…