一、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延迟问题和数据刷盘策略流程分析相关推荐

  1. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

  2. 简述mysql完全备份过程_【SQL】MySQL之使用mysqldump全备份及恢复过程详解_MySQL

    mysqldump bitsCN.com [SQL]MySQL之使用mysqldump全备份及恢复过程详解 [目标]使用mysqldump做全备,结合mysql自带的binlog功能实现增量备份 为了 ...

  3. 网络数据包转发过程详解

    本片文章详解了两台终端跨网段通信时数据包转发的过程,包含第一次转发数据包ARP工作的过程以及详细配置,下面是本次实验的拓扑图,在华为ENSP模拟器上实现. 简单介绍一下实验环境,在本次实验中包含两个区 ...

  4. mysql的分区和索引详解_Mysql分区和索引记录

    分区 前提:当数据量达到800w的时候,用create_date进行设置索引查询,也需要花费5s以上,所以还得进行分区操作,达到更快的效果.设置好分区后,查询就是0.5s. 开始操作:用create_ ...

  5. PackageManagerService启动详解(七)之扫描系统应用安装目录阶段流程分析

    PKMS启动详解(七)之BOOT_PROGRESS_PMS_SYSTEM_SCAN_START阶段流程分析 Android PackageManagerService系列博客目录: PKMS启动详解系 ...

  6. HBase 与Hive数据交互整合过程详解

    Hive和Hbase整合理论 1.为什么hive要和hbase整合 2.整合的优缺点 优点: (1).Hive方便地提供了Hive QL的接口来简化MapReduce的使用, 而HBase提供了低延迟 ...

  7. mysql+url的配置参数详解_MySql链接url参数详解

    mysql URL格式如下:jdbc:mysql://[host:port],[host:port].../[database][?参数名1][=参数值1][&参数名2][=参数值2]... ...

  8. mysql极限_SQL极限函数limit()详解分页必备

    limit含义: limit英语中的含义是限制,限定的意思.小日本曾上映过一个电影就是叫limit是由漫画改编的电影,剧情很变态,但不可否认小日本由于地狭人稠的原因,在观念上的资源危机意识还是很强的哈 ...

  9. JSON数据构造及解析详解

    JSON数据构造及解析详解 1.JSON格式数据长啥样? 2.JSON简介 JSON(Javascript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和 ...

最新文章

  1. python字符串endswith,Python字符串| 具有示例的endswith()方法
  2. python3报错处理:UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in position 0-1
  3. 电脑看书软件_能全平台阅读的图书软件,是kindle? No!大公司低调出品
  4. 模拟windows任务管理器列举系统进程,并关闭进程......
  5. SQL 查找是否存在,别再 COUNT 了,很耗费时间的
  6. 730阵列卡支持多大硬盘_凯捷月销破2万,配6座头等舱空间,到底有多舒服?试驾了才知道...
  7. 思维导图,流程图模板整合
  8. 韩寒近期【雷人】语录
  9. 11月女性时尚行业动态:浏览热度走势曲折 起伏大
  10. python生成字符画_通过python将图片生成字符画
  11. 游戏开发之静态成员实现单列设计模式(C++基础)
  12. 比较好的文章地址收集
  13. 卡巴斯基离线升级方法图解
  14. 基于Python实现的基金交易系统
  15. 计算机动画原理课程设计选题,组成原理课程设计设计一台模型计算机.pdf
  16. 涛思数据与优锘科技达成战略合作,可视化携手大数据引领物联网科技创新
  17. 7个高清图片素材网,免费/可商用
  18. 驱动仿真物品移动乌龟\Gazebo\cmd_vel和/gazebo/set_model_state
  19. 性能测试之nmon对linux服务器的监控 侵删
  20. OSChina 周六乱弹 —— 啊,谢谢好心的先生

热门文章

  1. word的xml 转换为 docx
  2. 2012年的中国移动互联网
  3. android签名打包发布到应用市场
  4. 关于读论文和标注小技巧(不断更新)
  5. 世间什么才是最珍贵的
  6. 微服务之间如何共享数据
  7. Power-One电源维修Bel power电源维修PFC500-1024
  8. 系统集成项目管理工程师学习经验集【60,59】
  9. DELL XPS 13 9370 CAZ60 Compal LA-E671P Rev1.0 戴尔笔记本点位图+电路图
  10. 隐藏windows 登录_如何在Windows 10登录屏幕上隐藏您的个人信息