MySQL · 功能介绍 · binlog拉取速度的控制

binlog拉取存在的问题

MySQL 主备之间数据同步是通过binlog进行的,当主库更新产生binlog时,备库需要同步主库的数据,通过binlog协议从主库拉取binlog进行数据同步,以达到主备数据一致性的目的。但当主库tps较高时会产生大量的binlog,以致备库拉取主库产生的binlog时占用较多的网络带宽,引起以下问题:

  1. 在MySQL中,写入与读取binlog使用的是同一把锁(Lock_log),频繁的读取binlog,会加剧Lock_log冲突,影响主库执行,进而造成TPS降低或抖动;
  2. 当备库数量较多时,备库拉取binlog会占用过多的带宽,影响应用的响应时间。

为了解决上面提到的问题,需要对binlog的拉取速度进行限制。

问题存在的原因

备库或应用通过binlog协议向主库发送消息,告诉主库要拉取binlog,主库经过权限认证后,以binlog_event为单位读取在本地的binlog,然后将这些binlog_event发送给应用,其过程简单描述如下:

  1. 从mysql-bin.index中找到用户消息中的指定文件,如果没有指定要拉取的binlog文件名称,则用第一个;
  2. 上Lock_log锁,从1)或4) 中的binlog file中读取一个binlog_event,释放Lock_log锁,判断binlog_event的类型;
  3. 如果是普通binlog_event,则将binlog_event发送到net 缓冲区;
  4. 如果是Rotate_log_event,则取出要Rotate到的文件,执行2);
  5. 如果当前读的文件是最后一个文件且已经读到了文件的结尾,则会释放Lock_log锁,并等待新的Log_event信号。

从以上过程可以看出,binlog的发送速度和IO、网络有很大的关系,只要这三者不受限制,程序会就尽力发送binlog而没有限制。

解决问题的方法

由3、4可以看出,程序在读取和发送之间是没有其它工作的,如果IO很强,读取的速度很快,那么binlog的发送速度就会很快且不受限制,进而造成本文开始所描述的问题;针对binlog发送速度的问题,rds_mysql 通过设置binlog发送线程的发送频率、休眠时间来调整binlog的发送速度,因此 rds_mysql 引入了两个新的参数:
1. binlog_send_idle_period binlog发送线程的每次休眠时间,单位微秒,默认值100;
2. binlog_send_limit_users binlog发送线程的速度配置,默认值”“。

举例如下:
set global binlog_send_limit_users=”rep1:3,rep2:10” 的作用是设置rep1拉取binlog的上限速度是3M/s, rep2拉取binlog的上限速度是10M/s,其中rep2、rep2指的是应用连接的用户名,对于binlog的拉取速度控制主要分为两个方面:

binlog 发送速度监控线程

速度监控线程随着mysqld的启动而启动,用于定时扫描限速列表,计算列表中的每一个binlog dump线程的binlog发送速度,并根据计算的速度调整binlog的发送频率,其工作过程描述如下:

  1. 速度监控线程随着mysqld的启动而启动,并初始化限速列表;
  2. 对限速列表进行依次扫描,如果取到的线程不为空,转2);
  3. 计算当前线程的发送速度,与用户设定的速度进行比较,大于设定的发送速度,转3),如果小于用户设定的发送速度,则转4)
  4. 通过调整当前线程的net_thread_frequency 成员,降低发送频率;
  5. 通过调整当前线程的net_thread_frequency 成员,增加发送频率;
  6. 遍历完限速列表后让出CPU 1毫秒,转1)

由以上描述可以看出,监控线程每毫秒执行一次,根据发送的字节数来计算binlog发送线程的发送速度是否超过设定的速度,并通过调整发送频率来调整binlog的发送速度,监控线程的限速列表是这样构造的:

  1. binlog dump 线程在拉取binlog前会先根据连接的用户名判断是否应该对该用户限速,如果需要限速,则需要将当前dump线程加入限速列表;
  2. 当binlog dump结束或断开连接时,从限速列表移除;
  3. 当设置参数binlog_send_limit_users时,会对当前所有线程进行遍历,将被限制的用户加入限速列表,对不受限制的用户移出限制列表,所有受影响的线程不需要重新连接,可以实时生效。

binlog dump 线程

dump 线程用于发送binlog,在发送过程中会根据监控线程设置的发送频率来调整binlog发送的速度,可以分为以下几步:
1. binlog dump 线程在拉取binlog前会先根据连接的用户名判断是否将本用户的线程加入限速列表;
2. 读取binlog,并查看是否需要休眠,需要休眠转3),否则转4);
3. 休眠binlog_send_idle_period;
4. 发送读取到的binlog event,转2。

因此可以通过设置binlog的发送频率及休眠时间精确调整binlog的发送速度

时间: 2024-10-29 10:13:27

MySQL · 功能介绍 · binlog拉取速度的控制的相关文章

Mysql日期类型大小比较---拉取给定时间段的记录

我们知道,mysql里边,日期类型有很多表现形式,date, datetime,timestamp等类型.考虑这样一种场景: 按时间段拉取给定时间段的内容,这时,我们就得使用日期类型的比较了. 表结构:tablename_tbl +-----------------+--------------+------+-----+-------------------+----------------+| Field | Type | Null | Key | Default | Extra |+---

MySQL · 引擎介绍 · Sphinx源码剖析(三)

在本节中我会介绍Sphinx在构建索引之前做的一些事情,主要是从mysql拉取数据保存,然后分词排序保存到内存等等一系列的操作.下面是几个相关指令 sql_query = \ SELECT id, group_id, UNIX_TIMESTAMP(date_added) AS date_added, \ title, content \ FROM documents sql_query_range = SELECT MIN(id),MAX(id) FROM documents sql_range

Fiddler抓包使用教程-基本功能介绍

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/72932886 本文出自[赵彦军的博客] Fiddler 基本页面 会话列表功能介绍 标识符 含义 # Fiddler为Session生成的ID Result 响应状态码 Protocol 该Session使用的协议(HTTP/HTTPS/FTP) Host 接收请求的服务器的主机名和端口号 URL 请求URL的路径.文件和查询字符串 Body 响应体中包含的字节数 Caching

IE9新增了那些功能?IE9新功能介绍

IE9新功能介绍 简洁的设计 打开 Internet Explorer 9 时首先注意到的是紧凑的用户界面.大多数命令栏功能,如"打印"或"缩放",现在都可以通过单击"工具"按钮访问,单击"收藏夹"按钮时会显示您的收藏夹.此外,Internet Explorer 还为您提供了需要的基本控制,并让网页显示在正中.(如果要还原"命令"栏."收藏夹"栏和状态栏,请右键单击"新建选项卡

AJAX推送方式与拉取方式的比较

使用Ajax可以开发出基于浏览器的具有高用户交互性和几乎不易觉察到延迟的web应用.实时的动态数据比如新闻标题.证券报价和拍卖行情都需要尽快地发送给用户.然而,AJAX仍然受限于web请求/响应架构的弱点,使得服务器不能推送实时动态的web数据. Delft科技大学的Engin Bozdag.Ali Mesbah和Arie van Deursen一起讨论了下面这些可以实现基于web的实时事件通知的方法: 1.HTTP拉取方式:在这种传统的方法中,客户端以用户可定义的时间间隔去检查服务器上的最新数

Oracle压缩功能介绍

大家听到这个词,一定就想到了节省硬盘空间吧.没错,它就是用来干这个的,但是向外延伸一下,它不仅可以节省硬盘空间,更可以节省带宽以及内存的使用(cpu有一点点损耗因为需要更多的计算取值操作,但是鉴于大多数环境下cpu都有空闲,所以也可以忽略了). Basiccompression这个功能从9i开始就有提供,11gr1开始提供了新的压缩功能,即OLTP compression.Basic compression是包括在EE版本中的,不需要额外收费,但是OLTP compression则需要额外的Or

ps工具箱面板的基本功能介绍

对于一些ps初学者来说,首先要先对ps的操作界面有一定的了解,ps基本的界面包括菜单栏.工具箱工具选项栏.面板.画布窗口等.让大家熟悉ps工具箱面板的基本功能介绍.学会工具箱中每个工具的使用方法是photoshop入门的第一要素.这里就让初学者快速了解工具箱的一些工具的具体功能. photoshop上面的工具箱就显示在屏幕的左侧,如果左侧工具箱没有出现工具箱,那可能是被隐藏了.直接用鼠标点击菜单栏上的"窗口",然后出现一个下拉菜单,再下拉菜单上点击"工具"选项即可弹

百度首页新版功能介绍

  今日登录百度,发现百度首页全新改版了,如下图所示,出现了"百度首页震撼升级,为你带来全新体验"的窗口提示,往下拉可以看到新版的相关介绍. 看完了引导后,正式进入百度首页,搜索框下面新增了导航.新闻.世界杯和音乐菜单,当然,用户也可以自由定制属于您的专属百度首页,下面为大家介绍新版的百度首页该怎么玩吧. 百度首页新版功能介绍: 终于等来如此高大上的绚丽百度首页!不知道怎么玩?那就实在太浪费了,现在开始动手,美美的装扮你的百度首页吧!一点一点看太麻烦?点击目录链接,一步到位! 1.宝箱

1、solr包结构介绍,solrCore的安装配置,solr部署到Tomcat,多solrCore配置,配置中文分词器,界面功能介绍,Schema.xml的基本使用,数据导入

一.下载solr,下载地址是:http://archive.apache.org/dist/lucene/solr/,选择自己想要的solr的版本,本项目使用的版本是4.10.3 二.如果想下载Lucene,下载地址是: https://mirrors.tuna.tsinghua.edu.cn/apache/lucene/java/ 三.其中solr-4.10.3的包结构如下: bin solr的脚本 contrib solr为了增强自身的功能,所添加的扩展依赖包 dist Solr  buil