怎么模仿磁盘 IO 慢的情况?并用于MySQL进行测试

今天给大家分享一篇在测试环境或者是自己想检验自己MySQL性能的文章
实验环境:
Rocky Linux 8
镜像:Rocky-8.6-x86_64-dvd.iso

1. 创建一个大文件作为虚拟磁盘

[root@localhost ~] dd if=/dev/zero of=/tmp/slowdisk.img bs=1M count=100
记录了100+0 的读入
记录了100+0 的写出
104857600 bytes (105 MB, 100 MiB) copied, 0.334391 s, 314 MB/s这将创建一个100MB的文件/tmp/slowdisk.img。

2. 使用losetup将文件虚拟成块设备

[root@localhost ~] losetup -f --show /tmp/slowdisk.img
/dev/loop0

这会输出一个类似于/dev/loopX(X是数字)的设备名,表示你的虚拟磁盘。
注意:确保/var/lib/mysql/目录有足够的空间,或者选择一个其他有足够空间的目录。

3. 创建文件系统并挂载

由于只是模拟,通常不会真正在这个设备上创建文件系统(因为后续我们要用特定的方式来模拟延迟,而不是真正的文件系统延迟)。但如果你真的想这么做,可以使用如下命令(以ext4为例):

[root@localhost ~] mkfs.ext4 /dev/loop0
mke2fs 1.45.6 (20-Mar-2020)
丢弃设备块: 完成                            
创建含有 102400 个块(每块 1k)和 25688 个inode的文件系统
文件系统UUID:7ea37143-3461-45a1-bbce-1b3008535be1
超级块的备份存储于下列块: 8193, 24577, 40961, 57345, 73729正在分配组表: 完成                            
正在写入inode表: 完成                            
创建日志(4096 个块)完成
写入超级块和文件系统账户统计信息: 已完成[root@localhost ~] mkdir -p /tmp/slowdisk && mount /dev/loop0 /tmp/slowdisk

4. 配置MySQL

将 binlog 的位置设置到 /tmp/slow,开启双 1 刷盘参数

vim /etc/my.cnf
log-bin=/tmp/slowdisk/binlog
innodb_flush log_at_trx_commit=1

5. 用 mysqlslap 进行压力测试

mysqlslap 使用方法介绍

通过mysqlslap –help可以获得可用的选项,这里列一些主要的参数,更详细的说明参考官方手册。

1) concurrency代表并发数量,多个可以用逗号隔开,例如:concurrency=10,50,100, 并发连接线程数分别是10、50、100个并发。2) --engines代表要测试的引擎,可以有多个,用分隔符隔开。3) --iterations代表要运行这些测试多少次。4) --auto-generate-sql 代表用系统自己生成的SQL脚本来测试。5)--auto-generate-sql-load-type 代表要测试的是读还是写还是两者混合的(read,write,update,mixed)6) --number-of-queries 代表总共要运行多少次查询。每个客户端运行的查询数量可以用查询总数/并发数来计算。7) --debug-info 代表要额外输出CPU以及内存的相关信息。8) --number-int-cols :创建测试表的 int 型字段数量9) --auto-generate-sql-add-autoincrement : 代表对生成的表自动添加auto_increment列,从5.1.18版本开始10) --number-char-cols 创建测试表的 char 型字段数量。11) --create-schema 测试的schema,MySQL中schema也就是database。12) --query  使用自定义脚本执行测试,例如可以调用自定义的一个存储过程或者sql语句来执行测试。13) --only-print 如果只想打印看看SQL语句是什么,可以用这个选项。

开始测试

[root@localhost ~] mysqlslap --user=root --password=lmx --host=127.0.0.1  
--concurrency=50 --iterations=200 
--query="insert into a1 values()" --create="create table a1(b int primary key AUTO_INCREMENT)"mysqlslap: [Warning] Using a password on the command line interface can be insecure.
BenchmarkAverage number of seconds to run all queries: 0.116 seconds #运行所有语句的平均秒数Minimum number of seconds to run all queries: 0.105 seconds #运行所有语句的最小秒数Maximum number of seconds to run all queries: 0.144 seconds #运行所有语句的最大秒数Number of clients running queries: 50 #客户端数量Average number of queries per client: 1 #每个客户端运行查询的平均数

通过 iostat 可以观察到 binlog 所在的块设备 IO 发生饱和:

  1. dm-0 (/dev/mapper/dm-slow) 设备的 IO 出现了排队(aqu-sz),使用率饱和。
  2. loop3 是 dm-0 背后的块设备,其 IO 还有充足的能力,可证明 dm-0 带有 IO 延迟。
[root@localhost ~] yum -y install sysstat
[root@localhost ~]iostat -x 1 -p dm-0 -p loop3

在这里插入图片描述
通过 pt-ioprofile 观察 MySQL 的 IO 消耗时间

[root@localhost ~] tar -zxvf percona-toolkit-3.7.0_x86_64.tar.gz 
[root@localhost ~] cd percona-toolkit-3.7.0/bin/
[root@localhost bin]./pt-ioprofile

在这里插入图片描述

  • read:从文件中读出数据。要读取的文件用文件描述符标识,数据读入一个事先定义好的缓冲区。
  • write:把缓冲区的数据写入文件中。
  • pread:由于lseek和read调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,
    调用pread相当于顺序调用了lseek和read,这两个操作相当于一个捆绑的原子操作。
  • pwrite:由于lseek和write调用之间,内核可能会临时挂起进程,所以对同步问题造成了问题,
    调用pwrite相当于顺序调用了lseek 和write,这两个操作相当于一个捆绑的原子操作。
  • fsync:确保文件所有已修改的内容已经正确同步到硬盘上,该调用会阻塞等待直到设备报告IO完成。
  • filename:与磁盘交互的文件名称

结果:
我们制造了一个慢 IO 的设备,将 MySQL binlog 放在其中,制造了 binlog IO 慢的场景。有了这个手段,之后我们可以分析 MySQL 在局部文件 IO 慢时,哪些状态量会发生变化,以及 MySQL 会发生什么行为。

下篇给大家详细的讲解 DBA如何使用pt-ioprofile

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

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

相关文章

1.微服务灰度发布(方案设计)

前言 微服务架构中的灰度发布(也称为金丝雀发布或渐进式发布)是一种在不影响现有用户的情况下,逐步将新版本的服务部署到生产环境的策略。通过灰度发布,你可以先将新版本的服务暴露给一小部分用户或特定的流量,观察其…

【开源免费】基于SpringBoot+Vue.JS安康旅游网站(JAVA毕业设计)

本文项目编号 T 098 ,文末自助获取源码 \color{red}{T098,文末自助获取源码} T098,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

YOLOv9-0.1部分代码阅读笔记-assigner.py

assigner.py utils\tal\assigner.py 目录 assigner.py 1.所需的库和模块 2.def select_candidates_in_gts(xy_centers, gt_bboxes, eps1e-9): 3.def select_highest_overlaps(mask_pos, overlaps, n_max_boxes): 4.class TaskAlignedAssigner(nn.Module): 1.所需的库…

安装k8s涉及命令(方便放到txt离线使用)

查看操作系统信息 uname -a # 查看所有操作系统信息 uname -s # 查看内核名称 uname -r # 查看内核版本号 uname -m # 查看机器硬件名称 cat /etc/os-release # 查看所有操作系统信息 配置hosts cat >> /etc/hosts << EOF 172.171.16.147 crawler-k8s-mast…

基于SpringBoot的4S店汽车销售管理系统的设计与实现

一、课题背景 为汽车销售公司设计了一个汽车管理系统 技术&#xff1a;前台采用网页技术&#xff0c;后端采用SpringBoottMybatistvue 项目 描述&#xff1a;随着人们生活水平的不断提高&#xff0c;人们对汽车的消费和需求也越来越旺盛。多汽车销售公司仍然采用人工记账的传…

【ES6复习笔记】模板字符串(3)

介绍 模板字符串是 ES6 引入的一种新的字符串声明方式&#xff0c;它使用反引号&#xff08;&#xff09;来定义字符串&#xff0c;而不是单引号&#xff08;&#xff09;或双引号&#xff08;"&#xff09;。模板字符串可以包含变量、表达式和换行符&#xff0c;这使得它…

电子应用设计方案72:智能扫地机器人系统设计

智能扫地机器人系统设计 一、引言 智能扫地机器人作为现代智能家居的重要组成部分&#xff0c;旨在为用户提供便捷、高效的地面清洁服务。本设计方案将详细阐述智能扫地机器人的系统架构、功能模块及实现方式。 二、系统概述 1. 系统目标 - 自主规划清扫路径&#xff0c;覆盖…

RabbitMQ中的普通Confirm模式:深入解析与最佳实践

在分布式系统中&#xff0c;消息队列&#xff08;Message Queue&#xff09;是实现异步通信和解耦的重要组件。RabbitMQ作为一种广泛使用的消息中间件&#xff0c;提供了多种消息确认机制&#xff08;Confirm Mode&#xff09;&#xff0c;以确保消息的可靠传递。本文将深入探讨…

C++ 面向对象编程:关系运算符重载、函数调用运算符重载

对 、<、> 三个运算符分别进行重载&#xff0c;可见以下代码&#xff1a; #include<iostream> using namespace std;class location { public:location(int x1, int y1) :x(x1), y(y1){};bool operator(const location& l1) const{return x l1.x && …

路由策略

控制层流量 --- 路由协议传递路由信息时产生的流量 数据层流量 --- 设备访问目标地址时产生的流量 所谓的路由策略----在控制层面转发流量的过程中&#xff0c;截取流量&#xff0c;之后修改流量再转发或不转发的技术&#xff0c;最终达到影响路由器路由表的生成&#xff0c…

【CSS in Depth 2 精译_095】16.3:深入理解 CSS 动画(animation)的性能

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第五部分 添加动效 ✔️【第 16 章 变换】 ✔️ 16.1 旋转、平移、缩放与倾斜 16.1.1 变换原点的更改16.1.2 多重变换的设置16.1.3 单个变换属性的设置 16.2 变换在动效中的应用 16.2.1 放大图标&am…

基础组件:

基础组件&#xff1a; RichText 富文本组件&#xff0c;解析并显示HTML格式文本。 适用场景&#xff1a; RichText组件适用于加载与显示一段HTML字符串&#xff0c;且不需要对显示效果进行较多自定义的应用场景。RichText组件仅支持有限的通用属性和事件。具体见属性与事件…

数据之林的守护者:二叉搜索树的诗意旅程

文章目录 前言一. 二叉搜索树的概念1.1 二叉搜索树的定义1.1.1 为什么使用二叉搜索树&#xff1f; 二. 二叉搜索树的性能分析2.1 最佳与最差情况2.1.1 最佳情况2.1.2 最差情况 2.2 平衡树的优势 三.二叉搜索树的基本操作实现3.1.1 详细示例3.1.2 循环实现插入操作3.1.2.1 逻辑解…

【Apache Paimon】-- 11 -- Flink 消费 kakfa 写 S3 File

目录 1、项目构建 2、项目新增和修改 2.1 pom.xml 新增依赖 2.2 本地测试或者 flink on k8s 时,新增 S3FileSystemFactory.java 第一步:创建包=org.apache.flink.fs.s3hadoop 第二步:新增 java 类 S3FileSystemFactory 特别注意 (1)本地测试时需要新增以下内容 (…

利索能及 ▏外观专利相似度多少算侵权?

判断是否侵权前提&#xff1a; 双方产品属于同类产品&#xff0c;不属于同类产品的不能比较。 判定同类产品不仅仅要依据《国际外观设计分类表》&#xff0c;还要依据一般商品商品的分类标准来却确定。 简单概括来说&#xff0c;判定侵权前提就是被控侵权产品和外观设计专利…

【编译原理】往年题汇总(山东大学软件学院用)

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;编译原理_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …

Java重要面试名词整理(八):RabbitMQ

MQ对比 MQ&#xff1a;MessageQueue&#xff0c;消息队列。这东西分两个部分来理解&#xff1a;队列&#xff0c;是一种FIFO 先进先出的数据结构。消息&#xff1a;在不同应用程序之间传递的数据。将消息以队列的形式存储起来&#xff0c;并且在不同的应用程序之间进行传递&am…

Android U 多任务启动分屏——system_server流程(更新中)

前文 Android U 多任务启动分屏——SystemUI流程 前文说到Transitions的startTransition方法中&#xff0c;通过mOrganizer.startNewTransition(type, wct);提交WindowContainerTransaction相关事务到system_server侧&#xff0c;继续跟踪其流程。 system_server侧分屏处理流…

适用于Synology NAS的在线办公套件:ONLYOFFICE安装指南

使用 Synology NAS 上的 ONLYOFFICE 文档&#xff0c;您能在私有云中直接编辑文本文档、电子表格、演示文稿和 PDF&#xff0c;确保工作流程既安全又高效。本指南将分步介绍如何在 Synology 上安装 ONLYOFFICE 文档。 关于 Synology Synology NAS&#xff08;网络附加存储&…

SharpDX 从入门到精通:全面学习指南

摘要&#xff1a; 本文旨在为想要深入学习 SharpDX 的开发者提供一份全面的指南。从 SharpDX 的基础概念入手&#xff0c;逐步深入探讨其在不同场景下的应用&#xff0c;包括图形渲染、音频处理等&#xff0c;并结合大量详细的代码案例帮助读者更好地理解和掌握 SharpDX 的使用…