Sysbench测试工具详解

文章目录

  • Sysbench
    • 安装
    • 准备测试数据
    • 使用yum安装的路径进行测试
    • 测试结果

Sysbench

Sysbench 是一个常用的多线程性能测试工具,可用于评估数据库系统和硬件的性能。它支持多种基准测试,包括 OLTP (Online Transaction Processing)、CPU、文件 I/O、内存等。

安装

去官方网站下mysql的repo文件
https://dev.mysql.com/downloads/repo/yum/

[root@localhost ~]# rpm -ivh mysql80-community-release-el7-8.noarch.rpm 
[root@localhost ~]# cd /etc/yum.repos.d/
[root@localhost yum.repos.d]# ls
CentOS-Base.repo       CentOS-Media.repo          mysql-community-debuginfo.repo
CentOS-CR.repo         CentOS-Sources.repo        mysql-community.repo
CentOS-Debuginfo.repo  CentOS-Vault.repo          mysql-community-source.repo
CentOS-fasttrack.repo  CentOS-x86_64-kernel.repo

出现问题:

即使下载了官网的repo源,也不行

        again or use --enablerepo for temporary usage:yum-config-manager --disable <repoid>orsubscription-manager repos --disable=<repoid>5. Configure the failing repository to be skipped, if it is unavailable.Note that yum will try to contact the repo. when it runs most commands,so will have to try and fail each time (and thus. yum will be be muchslower). If it is a very temporary problem though, this is often a nicecompromise:yum-config-manager --save --setopt=<repoid>.skip_if_unavailable=trueCannot find a valid baseurl for repo: base/7/x86_64

解决方法:

  1. 尝试其他镜像源:如果DNS配置正确,但 mirrorlist.centos.org 仍然无法解析,可以尝试使用其他镜像源。在 /etc/yum.repos.d/ 目录下,有一个名为 CentOS-Base.repo 的文件,尝试编辑这个文件,将 mirrorlist 相关的行注释掉,然后启用 baseurl 行,并使用一个可用的镜像URL,例如:
rubyCopy code
baseurl=http://mirror.centos.org/centos/7/os/x86_64/

注意:这只是一个示例URL,您可以根据需要使用其他可用的镜像源。

  1. 清除YUM缓存:运行以下命令可以尝试清除YUM缓存并重新生成:
cssCopy code
yum clean all

编译安装下载

yum -y install mysql-community-devel
yum -y install automake  libtool
wget https://github.com/akopytov/sysbench/archive/1.0.15.tar.gz
tar xf 1.0.15.tar.gz
cd sysbench-1.0.15
./autogen.sh
./configure
make -j
make install

建议实验epel下载sysbench(yum安装

yum install epel-release -y
yum install sysbench -y

准备测试数据

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

mysqladmin -h127.0.0.1 -uroot -p123456 -P3306 create sbtest;

这是yum安装对应的

sysbench --mysql-host=192.168.2.25 --mysql-port=7002 --mysql-user=write --mysql-password='123456' /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=10000 prepare

这是编译安装对应的

sysbench --mysql-host=192.168.2.25 --mysql-port=7002 --mysql-user=write --mysql-password='123456' /root/sysbench-1.0.15/src/lua
/oltp_common.lua  --tables=10 --table_size=10000 prepare

使用yum安装的路径进行测试

[root@localhost bin]# sysbench --mysql-host=192.168.2.25 --mysql-port=7002 --mysql-user=write --mysql-password='123456' /usr/share/sysbench/oltp_common.lua --tables=10 --table_size=10000 prepare
sysbench 1.0.17 (using system LuaJIT 2.0.4)Creating table 'sbtest1'...
Inserting 10000 records into 'sbtest1'
Creating a secondary index on 'sbtest1'...
Creating table 'sbtest2'...
Inserting 10000 records into 'sbtest2'
Creating a secondary index on 'sbtest2'...
Creating table 'sbtest3'...
Inserting 10000 records into 'sbtest3'
Creating a secondary index on 'sbtest3'...
Creating table 'sbtest4'...
Inserting 10000 records into 'sbtest4'
Creating a secondary index on 'sbtest4'...
Creating table 'sbtest5'...
Inserting 10000 records into 'sbtest5'
Creating a secondary index on 'sbtest5'...
Creating table 'sbtest6'...
Inserting 10000 records into 'sbtest6'
Creating a secondary index on 'sbtest6'...
Creating table 'sbtest7'...
Inserting 10000 records into 'sbtest7'
Creating a secondary index on 'sbtest7'...
Creating table 'sbtest8'...
Inserting 10000 records into 'sbtest8'
Creating a secondary index on 'sbtest8'...
Creating table 'sbtest9'...
Inserting 10000 records into 'sbtest9'
Creating a secondary index on 'sbtest9'...
Creating table 'sbtest10'...
Inserting 10000 records into 'sbtest10'
Creating a secondary index on 'sbtest10'...
root@sbtest 11:32 mysql>show tables;
+------------------+
| Tables_in_sbtest |
+------------------+
| sbtest1          |
| sbtest10         |
| sbtest2          |
| sbtest3          |
| sbtest4          |
| sbtest5          |
| sbtest6          |
| sbtest7          |
| sbtest8          |
| sbtest9          |
+------------------+
10 rows in set (0.00 sec)

测试结果

基准测试命令: 使用 Sysbench 运行 MySQL 基准测试时,常见的命令格式如下:

cssCopy code
sysbench [options] --threads=[num_threads] --mysql-host=[mysql_host] --mysql-port=[mysql_port] --mysql-user=[mysql_user] --mysql-password=[mysql_password] --mysql-db=[mysql_database] [test_name]
  • [options]:可选的 Sysbench 选项,用于配置测试的参数,例如运行时间、请求率等。
  • --threads=[num_threads]:指定并发线程数,即同时运行的线程数。
  • --mysql-host=[mysql_host]:指定 MySQL 服务器的主机名或 IP 地址。
  • --mysql-port=[mysql_port]:指定 MySQL 服务器的端口号。
  • --mysql-user=[mysql_user]:指定连接 MySQL 服务器所使用的用户名。
  • --mysql-password=[mysql_password]:指定连接 MySQL 服务器所使用的密码。
  • --mysql-db=[mysql_database]:指定要进行测试的数据库名称。
  • [test_name]:指定要运行的具体测试,例如 OLTP、CPU、文件 I/O 等。
sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=192.168.2.25 --mysql-port=7001 --mysql-user=write --mysql-password=123456 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table-size=100000 run
[root@localhost sysbench]# sysbench --threads=4 --time=20 --report-interval=5 --mysql-host=192.168.2.25 --mysql-port=7001 --mysql-user=write --mysql-password=123456 /usr/share/sysbench/oltp_read_write.lua --tables=10 --table-size=100000 run
sysbench 1.0.17 (using system LuaJIT 2.0.4)Running the test with following options:
Number of threads: 4
Report intermediate results every 5 second(s)
Initializing random number generator from current timeInitializing worker threads...Threads started![ 5s ] thds: 4 tps: 191.49 qps: 3850.57 (r/w/o: 2698.03/201.67/950.86) lat (ms,95%): 31.37 err/s: 0.60 reconn/s: 0.00
[ 10s ] thds: 4 tps: 209.08 qps: 4181.87 (r/w/o: 2927.17/242.93/1011.77) lat (ms,95%): 26.68 err/s: 0.00 reconn/s: 0.00
[ 15s ] thds: 4 tps: 198.05 qps: 3960.59 (r/w/o: 2772.09/254.12/934.37) lat (ms,95%): 30.81 err/s: 0.00 reconn/s: 0.00
[ 20s ] thds: 4 tps: 192.85 qps: 3858.26 (r/w/o: 2701.95/262.43/893.88) lat (ms,95%): 33.72 err/s: 0.00 reconn/s: 0.00
SQL statistics:queries performed:read:                            55510write:                           4812other:                           18972total:                           79294transactions:                        3962   (197.75 per sec.)queries:                             79294  (3957.64 per sec.)ignored errors:                      3      (0.15 per sec.)reconnects:                          0      (0.00 per sec.)General statistics:total time:                          20.0346stotal number of events:              3962Latency (ms):min:                                    9.20avg:                                   20.20max:                                 1010.5195th percentile:                       30.81sum:                                80041.23Threads fairness:events (avg/stddev):           990.5000/34.51execution time (avg/stddev):   20.0103/0.01

根据sysbench的输出,这是一次OLTP读写测试的结果。让我对输出进行解析,以便您更好地了解测试的性能表现:

  1. 系统信息:
  • sysbench版本:1.0.17
  • 使用的LuaJIT版本:2.0.4
  1. 测试参数:
  • 线程数:4
  • 报告中间结果的间隔:每5秒报告一次
  • 使用的MySQL主机:192.168.2.25
  • 使用的MySQL端口:7001
  • 使用的MySQL用户:write
  • 使用的MySQL密码:123456
  • 测试脚本路径:/usr/share/sysbench/oltp_read_write.lua
  • 使用的表数:10
  • 每个表的大小:100,000行
  1. 测试过程:
  • 初始化随机数生成器。
  • 初始化工作线程。
  • 启动4个线程进行测试。
  1. 测试结果:
    在测试进行了20秒后,以下是测试的结果统计:
  • 在第5秒时,每秒处理事务数(tps)约为191.49,每秒查询数(qps)约为3850.57。
  • 在第10秒时,tps约为209.08,qps约为4181.87。
  • 在第15秒时,tps约为198.05,qps约为3960.59。
  • 在第20秒时,tps约为192.85,qps约为3858.26。
  1. SQL统计:
  • 读取查询数量:55510
  • 写入查询数量:4812
  • 其他查询数量:18972
  • 总查询数量:79294
  • 完成的事务数量:3962 (平均每秒197.75个事务)
  • 总查询数:79294 (平均每秒3957.64个查询)
  • 忽略的错误数:3 (平均每秒0.15个错误)
  • 重新连接数:0 (平均每秒0.00个重新连接)
  1. 总体统计:
  • 总耗时:20.0346秒
  • 总事件数:3962
  1. 延迟(以毫秒为单位):
  • 最小延迟:9.20ms
  • 平均延迟:20.20ms
  • 最大延迟:1010.51ms
  • 第95百分位延迟:30.81ms
  • 总延迟:80041.23ms
  1. 线程公平性:
  • 事件数量(平均/标准差):990.5000/34.51
  • 执行时间(平均/标准差):20.0103/0.01

解析结果表明,测试运行了20秒,使用4个线程,在给定的配置下,每秒处理的事务数在190到210之间浮动。请注意,性能结果还受到MySQL服务器和系统硬件等因素的影响,因此,如果要获得更精确的性能指标,可能需要在多个不同配置下运行测试,并进行更详细的分析。

清除建立的测试表

sysbench --mysql-host=192.168.2.25 \--mysql-port=7002 \--mysql-user=write \--mysql-password='123456' \/usr/share/sysbench/oltp_common.lua \--tables=10 \cleanup

效果

| 59741 | 50095 | 94054036382-30666175964-93983866440-82198879802-79178088086-626860264174919 |
| 60074 | 50328 | 71234724885-22289811426-29663594026-43624298282-65444509716-502104939320899 |
| 63215 | 49852 | 69814563728-47986046934-75862954779-06559782038-51838414177-222236416566077 |
| 65881 | 49778 | 74995573852-31949172824-75320100772-28469702486-62705248269-933810682682159 |
+-------+-------+-----------------------------------------------------------------------------+
10177 rows in set (0.13 sec)root@sbtest 11:42 mysql>select * from sbtest1;
ERROR 1146 (42S02): Table 'sbtest.sbtest1' doesn't exist

删除成功了

当然也可以在master服务器上手动删除

出现问题,删除后如果我新建再次会出现数据库存在的问题

[root@localhost sysbench]# mysqladmin -h127.0.0.1 -uroot -p123456 -P3306 create sbtest;
mysqladmin: [Warning] Using a password on the command line interface can be insecure.
mysqladmin: CREATE DATABASE failed; error: 'Can't create database 'sbtest'; database exists'

原因:

有其他MySQL连接正在使用sbtest数据库,导致你无法删除。可以用show processlist;命令查看是否有进程在占用sbtest数据库。

*************************** 4. row ***************************Id: 12User: writeHost: 192.168.2.25:35132db: sbtest
Command: SleepTime: 1704State: Info: NULL
4 rows in set (0.00 sec)ERROR: 
No query specifiedroot@(none) 11:57 mysql>

解决:

最简单的方法是:在master服务器上重新创建一个sbtest数据库

  • 识别占用连接的线程id,然后使用kill命令终止该连接线程:
kill [线程id];
  • 如果不确定是哪个连接占用了sbtest数据库,可以直接杀死所有连接线程:
kill connection for database sbtest;
  • 使用disconnect命令 disconnect指定的线程:
disconnect [线程id];
  • 修改该连接的用户权限,禁用其访问sbtest数据库的权限:
revoke all privileges on sbtest.* from [用户名]@[主机名]; 
  • 设置sbtest数据库为只读模式,禁止写入操作:
flush tables with read lock;
  • 直接重启MySQL服务,关闭所有连接线程。

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

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

相关文章

代码随想录| 图论04 查并集 ●查并集理论知识 ●1971.寻找图中是否存在路径 ●684.冗余连接 ●685.冗余连接II

#查并集理论知识 并查集用处&#xff1a;解决连通性问题 将两个元素添加到一个集合中。判断两个元素在不在同一个集合 思路&#xff1a;将三个元素A&#xff0c;B&#xff0c;C &#xff08;分别是数字&#xff09;放在同一个集合&#xff0c;其实就是将三个元素连通在一起&a…

Python 算法基础篇:插入排序和希尔排序

Python 算法基础篇&#xff1a;插入排序和希尔排序 引言 1. 插入排序算法概述2. 插入排序算法实现实例1&#xff1a;插入排序 3. 希尔排序算法概述4. 希尔排序算法实现实例2&#xff1a;希尔排序 5. 插入排序与希尔排序的对比总结 引言 插入排序和希尔排序是两种常用的排序算法…

017-从零搭建微服务-系统服务(四)

写在最前 如果这个项目让你有所收获&#xff0c;记得 Star 关注哦&#xff0c;这对我是非常不错的鼓励与支持。 源码地址&#xff08;后端&#xff09;&#xff1a;https://gitee.com/csps/mingyue 源码地址&#xff08;前端&#xff09;&#xff1a;https://gitee.com/csps…

【实战】 七、Hook,路由,与 URL 状态管理(下) —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(十三)

文章目录 一、项目起航&#xff1a;项目初始化与配置二、React 与 Hook 应用&#xff1a;实现项目列表三、TS 应用&#xff1a;JS神助攻 - 强类型四、JWT、用户认证与异步请求五、CSS 其实很简单 - 用 CSS-in-JS 添加样式六、用户体验优化 - 加载中和错误状态处理七、Hook&…

el-upload将上传的图片转为base64

el-upload将上传的图片转为base64 文章目录 el-upload将上传的图片转为base641. el-upload属性设置2. 图片转base64格式方法3. 在绑定的方法中调用 elementui使用el-upload时将选择的图片转为base64格式,然后再上传 1. el-upload属性设置 使用组件&#xff0c;然后on-change绑定…

【NLP】如何使用Hugging-Face-Pipelines?

一、说明 随着最近开发的库&#xff0c;执行深度学习分析变得更加容易。其中一个库是拥抱脸。Hugging Face 是一个平台&#xff0c;可为 NLP 任务&#xff08;如文本分类、情感分析等&#xff09;提供预先训练的语言模型。 本博客将引导您了解如何使用拥抱面部管道执行 NLP 任务…

代码随想录算法训练营day45 70.爬楼梯(进阶) 322.零钱兑换 279.完全平方数

题目链接70.爬楼梯(进阶) class Solution {public int climbStairs(int n) {int[] dp new int[n1];int m 2;dp[0] 1;for(int i 1; i < n; i){for(int j 1; j < m; j){if(i > j)dp[i] dp[i-j];}}return dp[n];} }题目链接322.零钱兑换 class Solution {public …

超详细图文教程:3DS Max 中创建低多边形游戏长剑模型

推荐&#xff1a; NSDT场景编辑器助你快速搭建可二次开发的3D应用场景 在此&#xff0c;由两部分组成的教程的第一部分中&#xff0c;我将向您展示如何&#xff1a; 对剑柄进行建模剑的护手模型剑刃建模 1. 如何制作剑柄 步骤 1 在本教程中使用正交视图。要更改视图&#x…

python安装OpenCV

安装OpenCV pip install opencv-pythonpython OpenCV 打开摄像头 import cv2WIDTH 1080 HEIGHT 720cap cv2.VideoCapture(0, cv2.CAP_DSHOW) cap.set(cv2.CAP_PROP_FRAME_WIDTH, WIDTH) cap.set(cv2.CAP_PROP_FRAME_HEIGHT, HEIGHT)while True:ok,frame cap.read()# pri…

阿里巴巴前端开发规范

前言 规范的目的是为了编写高质量的代码&#xff0c;让你的团队成员每天的心情都是愉悦的&#xff0c;大家在一起是快乐的。 现在软件架构的复杂性需要协同开发完成&#xff0c;如何高效地协同呢&#xff1f;无规矩不成方圆&#xff0c;无规范难以协同&#xff0c;比如&#xf…

机器学习概念

文章目录 一、机器学习概念1. 机器学习基本概念2. 基于规则的学习3. 基于模型学习4. 机器学习数据集描述二、机器学习分类1. 监督学习1.1 分类问题1.2 回归问题2. 无监督学习2.1 聚类问题2.2 数据降维3. 半监督学习4. 强化学习三、拟合问题1. 欠拟合2. 过拟合3. 奥卡姆剃刀原则…

Android:aidl简单应用

创建aidl文件&#xff1a;IMyAidlInterface.aidl Build-> Clean Project 重新编译下项目 生成IMyAidlInterface.class文件 interface IMyAidlInterface { void basicTypes(int jk); } --MyService public class MyService extends Service { //定义音乐…

AI时代带来的图片造假危机,该如何解决

一、前言 当今&#xff0c;图片造假问题非常泛滥&#xff0c;已经成为现代社会中一个严峻的问题。随着AI技术不断的发展&#xff0c;人们可以轻松地通过图像编辑和AI智能生成来篡改和伪造图片&#xff0c;使其看起来真实而难以辨别&#xff0c;之前就看到过一对硕士夫妻为了骗…

uni-app:页面跳转

uni.navigateTo: 不关闭当前页面&#xff0c;跳转到一个新页面。 uni.redirectTo: 关闭当前页面&#xff0c;跳转到应用中的某个页面。 uni.reLaunch: 关闭所有页面&#xff0c;打开应用中的某个页面。 uni.switchTab: 跳转到应用的底部选项卡页面。 uni.navigateBack: 返回上一…

Flink-端到端精确一次(End-To-End Exactly-Once)

1.总结 目的&#xff1a;想要在故障恢复后不丢数据 输入端 保证可以重复发送数据如果是kafka&#xff0c;Flink负责维护offset&#xff0c;不用kafka维护设置kafka的隔离级别为&#xff1a;读已提交flink 开启检查点采用对齐或者不对齐的精确一次输出端 kafka 幂等事务两阶段…

一文了解Python中的while循环语句

目录 &#x1f969;循环语句是什么 &#x1f969;while循环 &#x1f969;遍历猜数字 &#x1f969;while循环嵌套 &#x1f969;while循环嵌套案例 &#x1f990;博客主页&#xff1a;大虾好吃吗的博客 &#x1f990;专栏地址&#xff1a;Python从入门到精通专栏 循环语句是什…

Mysql表锁与行锁

Mysql锁实战 前言&#xff1a;什么是锁一&#xff1a;全局锁1.1 概念1.2 作用1.3 使用1.4 特点 二&#xff1a;表级锁2.1 概念2.2 分类2.2.1 表锁2.2.2 元数据锁 MDL2.2.3 意向锁 三&#xff1a;行级锁3.1 行锁(Record Lock)3.2 间隙锁(Gap Lock)3.3 临键锁(Next-Key Lock): 四…

C# 委托详解

一.委托的概念 C#中委托也叫代理&#xff0c;委托提供了后期绑定机制(官方解释)&#xff0c;功能类似于C中的函数指针&#xff0c;它存储的就是一系列具有相同签名和返回类型的方法的地址&#xff0c;调用委托的时候&#xff0c;它所包含的所有方法都会被执行。 二.委托的用法…

自然语言处理基础详解入门

1、自然语言的概念 自然语言是指人类社会约定俗成的&#xff0c;并且区别于人工语言&#xff08;如计算机程序&#xff09;的语言&#xff0c;&#xff0c;是自然而然的随着人类社会发展演变而来的语言&#xff0c;它是人类学习生活的重要工具。 2、自然语言处理概述 自然语言…

Redis【实践篇】之RedisTemplate基本操作

Redis 从入门到精通【应用篇】之RedisTemplate详解 文章目录 Redis 从入门到精通【应用篇】之RedisTemplate详解0. 前言1. RedisTemplate 方法1. 设置RedisTemplate的序列化方式2. RedisTemplate的基本操作 2. 源码浅析2.1. 构造方法2.2. 序列化方式2.3. RedisTemplate的操作方…