mysql刷盘命令_MySQL延迟问题和数据刷盘
导读
这篇文章主要介绍了MySQL延迟问题和数据刷盘策略流程分析,本文要给大家提到了mysql复制流程,需要的朋友可以参考下
一、MySQL复制流程
官方文档流程如下:
MySQL延迟问题和数据刷盘策略
1、绝对的延时,相对的同步
2、纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入。
二、MySQL延迟问题分析
1、主库DML请求频繁
原因:主库并发写入数据,而从库为单线程应用日志,很容易造成relaylog堆积,产生延迟。
解决思路:做sharding,打散写请求。考虑升级到MySQL5.7+,开启基于逻辑时钟的并行复制。
2、主库执行大事务
原因:类似主库花费很长时间更新了一张大表,在主从库配置相近的情况下,从库也需要花几乎同样的时间更新这张大表,此时从库延迟开始堆积,后续的events无法更新。
解决思路:拆分大事务,及时提交。
3、主库对大表执行DDL语句
原因:DDL未开始执行,被阻塞,检查到位点不变;DDL正在执行,单线程应用导致延迟增加,位点不变。
解决思路:找到被阻塞DDL或是写操作的查询,干掉该查询,让DDL正常在从库上执行;业务低峰期执行,尽量使用支持OnlineDDL的高版本MySQL。
4、主从实例配置不一致
原因:硬件上:主库实例服务器使用SSD,而从库实例服务器使用普通SAS盘、cpu主频不一致等;配置上:如RAID卡写策略不一致,OS内核参数设置不一致,MySQL落盘策略(innodb_flush_log_at_trx_commit和sync_binlog等)不一致等
解决思路:尽量统一DB机器的配置(包括硬件及选项参数);甚至对于某些OLAP业务,从库实例硬件配置高于主库等。
5、从库自身压力过大
原因:从库执行大量select请求,或业务大部分select请求被路由到从库实例上,甚至大量OLAP业务,或者从库正在备份等,此时可能造成cpu负载过高,io利用率过高等,导致SQLThread应用过慢。
解决思路:建立更多西安数据库培训从库,打散读请求,降低现有从库实例的压力。
也可以调整innodb_flush_log_at_trx_commit=0和sync_binlog=0刷盘参数来缓解IO压力来降低主从延迟。
三、大促期间CPU过高问题
现象:
高并发导致CPU负载过高,处理请求时间拉长,逐步积压,最终导致服务不可用;大量的慢SQL导致CPU负载过高。
解决思路:
基本上是禁止或是慎重考虑数据库主从切换,这个解决不了根本问题,需要研发配合根治SQL问题,也可以服务降级,容器的话可以动态扩容CPU;和业务协商启动pt-kill查杀只读慢SQL;查看是否可以通过增加一般索引或是联合索引来解决慢SQL问题,但此时要考虑DDL对数据库影响。
四、InnoDB刷盘策略
MySQL的innodb_flush_method这个参数控制着innodb数据文件及redolog的打开、刷写模式,对于这个参数,文档上是这样描述的:
有三个值:fdatasync(默认),O_DSYNC,O_DIRECT
默认是fdatasync,调用fsync()去刷数据文件与redolog的buffer
为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redolog,使用fsync()刷写数据文件
为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redolog
首先文件的写操作包括三步:open,write,flush
上面最常提到的fsync(intfd)函数,该函数作用是flush时将与fd文件描述符所指文件有关的buffer刷写到磁盘,并且flush完元数据信息(比如修改日期、创建日期等)才算flush成功。
使用O_DSYNC方式打开redo文件表示当write日志时,数据都write到磁盘,并且元数据也需要更新,才返回成功。
O_DIRECT则表示我们的write操作是从MySQLinnodbbuffer里直接向磁盘上写。
这三种模式写数据方式具体如下:
fdatasync模式:写数据时,write这一步并不需要真正写到磁盘才算完成(可能写入到操作系统buffer中就会返回完成),真正完成是flush操作,buffer交给操作系统去flush,并且文件的元数据信息也都需要更新到磁盘。
O_DSYNC模式:写日志操作是在write这步完成,而数据文件的写入是在flush这步通过fsync完成
O_DIRECT模式:数据文件的写入操作是直接从mysqlinnodbbuffer到磁盘的,并不用通过操作系统的缓冲,而真正的完成也是在flush这步,日志还是要经过OS缓冲。
MySQL延迟问题和数据刷盘策略
1、在类unix操作系统中,文件的打开方式为O_DIRECT会最小化缓冲对io的影响,该文件的io是直接在用户空间的buffer上操作的,并且io操作是同步的,因此不管是read()系统调用还是write()系统调用,数据都保证是从磁盘上读取的;所以IO方面压力最小,对于CPU处理压力上也最小,对物理内存的占用也最小;但是由于没有操作系统缓冲的作用,对于数据写入磁盘的速度会降低明显(表现为写入响应时间的拉长),但不会明显造成整体SQL请求量的降低(这有赖于足够大的innodb_buffer_pool_size)。
2、O_DSYNC方式表示以同步io的方式打开文件,任何写操作都将阻塞到数据写入物理磁盘后才返回。这就造成CPU等待加长,SQL请求吞吐能力降低,insert时间拉长。
3、fsync(intfiledes)函数只对由文件描述符filedes指定的单一文件起作用,并且等待写磁盘操作结束,然后返回。fdatasync(intfiledes)函数类似于fsync,但它只影响文件的数据部分。而除数据外,fsync还会同步更新文件的元信息到磁盘。
O_DSYNC对CPU的压力最大,datasync次之,O_DIRECT最小;整体SQL语句处理性能和响应时间看,O_DSYNC较差;O_DIRECT在SQL吞吐能力上较好(仅次于datasync模式),但响应时间却是最长的。
默认datasync模式,整体表现较好,因为充分利用了操作系统buffer和innodb_buffer_pool的处理性能,但带来的负面效果是free内存降低过快,最后导致页交换频繁,磁盘IO压力大,这会严重影响大并发量数据写入的稳定性。
总结
以上所述是小编给大家介绍的MySQL延迟问题和数据刷盘策略流程分析,希望对大家有所帮助!
mysql刷盘命令_MySQL延迟问题和数据刷盘相关推荐
- mysql部署策略_MySQL延迟问题和数据刷盘策略流程分析
一.MySQL复制流程 官方文档流程如下: MySQL延迟问题和数据刷盘策略 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.My ...
- mysql数据刷盘过程详解_MySQL延迟问题和数据刷盘策略流程分析
一.MySQL复制流程 官方文档流程如下: MySQL延迟问题和数据刷盘策略 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.My ...
- mysql数据刷盘_MySQL延迟问题和数据刷盘策略
一. MySQL 复制流程 官方文档流程图如下: 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.MySQL延迟问题分析 1.主库 ...
- mysql 开启引擎命令_MySql中启用InnoDB数据引擎的方法
1.存储引擎是什么? Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中的每一种技术都使用不同的存储机制.索引技巧.锁定水平并且最终提供广泛的不同的功能和能力.通过选择不同的技术, ...
- 怎么处理MySQL延迟问题和数据刷盘?
一.MySQL复制流程 官方文档流程图如下: 1.绝对的延时,相对的同步 2.纯写操作,线上标准配置下,从库压力大于主库,最起码从库有relaylog的写入. 二.MySQL延迟问题分析 1.主库DM ...
- mysql切换系统盘命令_mysql常用命令
一.连接MySQL 格式: mysql -h主机地址 -u用户名 -p用户密码 1.例1:连接到本机上的MYSQL. 首先在打开DOS窗口,然后进入目录 mysqlbin,再键入命令mysql -ur ...
- mysql查看连接数命令_Mysql 查看连接数,状态
命令: show processlist; 如果是root帐号,你能看到所有用户的当前连接.如果是其它普通帐号,只能看到自己占用的连接. show processlist;只列出前100条,如果想全列 ...
- mysql 复制 二进制文件命令_Mysql中复制详细解析
原标题:Mysql中复制详细解析 1.mysql复制概念 指将主数据库的DDL和DML操作通过二进制日志传到复制服务器上,然后在复制服务器上将这些日志文件重新执行,从而使复制服务器和主服务器的数据保持 ...
- mysql中 s命令_MySql常用命令总结
1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> CREATE DATABASE ...
最新文章
- k8s service type_k8s重器之Service
- swoole会合并到php吗,thinkphp整合swoole
- 《深入浅出WPF》笔记——绑定篇(一)
- Ubuntu 14.04 ThinkPad E431无线网卡驱动安装
- 我是这样分析Linux性能问题的
- 编写一个能够排序的函数模板。_LeetCode刷题——9.给出n对括号,请编写一个函数来生成所有的由n对括号组成的合法组合...
- java工程转maven工程_Java工程转换为Maven工程
- python自动化测试报告 之 allure_Pytest+ Allure + Jenkins 自动化测试报告
- 删除病毒ETH的方法 如何解密sql文件 恢复mdf数据库文件
- Asp.net服务器端控件替换客户端控件
- C# DevExpress组件 - ChartControl图表控件
- docker阿里云加速器
- 域名转移应该怎么做?域名转入是什么意思?手把手教你将阿里云备案域名转入到腾讯云
- WPS表格简单入门_我的笔记_一些常用操作
- python拼图游戏代码_Python图像处理——人物拼图游戏
- 初中数学题用计算机能算吗,[转载]初中数学使用科学计算器的利与弊(节选)...
- 网站优化策略有哪几种方法
- 文档多级列表_如何在Google文档中创建多级列表
- 人在江湖走,谁能不忘事
- 经典散文·1.地毯的那一端
热门文章
- 基于强化学习的空战辅助决策(2D)
- Android 中MeasureSpec的创建规则
- 哈尔滨工业大学ppt模板
- log4j ERROR setFile null true call failed
- IDEA插件问题备忘录:有关The Doki Theme和Background Image Plus 的问题
- RFID防伪溯源解决方案
- tableau获取筛选器值_Tableau操作筛选器(Tableau Action Filters)
- 小程序获取农历,阳历转农历,计算属相
- javaweb-青橙项目-10-85
- 微信小程序:想要点击图片时进行一个放大的功能,写完之后可以正常显示,但点击时图片加载不出来,在此想问一下各路大神有没有解决办法