zoukankan      html  css  js  c++  java
  • MySQL binlog_format中sbr 和rbr(Statement-Based and Row-Based Replication)的优缺点

    Advantages of statement-based replication

    1 技术成熟
    
    2 对于大量的更新删除等操作,仅仅会写入少量的变更结果,加速日志获取或者备份的速度
    
    3 日志文件包含了所有更改的语句,可以用来做验证数据库

      Disadvantages of statement-based replication

    1.1 在UDF自定义函数中的语句
    1.2 在DELETE和UPATE中没有使用order by 进行限制的字句
    1.3 以下函数不能在语句格式中进行复制 load_file() uuid() user() found_rows() 等,now()函数除外
    1.4 相比行格式,insert ...select 需要更多的行级锁
    1.5 相比行格式,update语句需要锁住大量的行来进行表扫描
    1.6 对于InnoDB:使用AUTO_INCREMENT会阻塞其他不冲突的INSERT语句(这里大概是因为自增都是通过同一个锁来控制的,所以会阻塞叼其他insert语句)
    1.7 在复杂的语句中,行被更新或者插入之前,在从服务器上会对语句进行评估和执行。如果是行复制,从服务器只需要更改受影响的行而不需要去处理所有的表
    1.8 在从库执行复杂语句中,由于评估错误,随着时间的超时,会对行的影响慢慢增多
    1.9 存储函数使用跟调用函数相同的now()时候,并不是存储过程真实的情况
    2.1 确定性UDF必须应用在从属上。
    2.2 主和从的表的定义必须要一致

     Advantages of row-based replication

    1 所有的更改都可以被复制,是一种安全的复制
    2 对于主库而言只有少量的行锁,从而实现较高的并发性
        2.1 insert ...select 
        2.2 带有auto_increment的insert语句
        2.3 对于update或delete语句,使用where字句不使用键或者不会更改大多数已经检查的行
        2.4 在从库中任意使用insert ,update或delete语句只需要少量的行锁
        
        

    Disadvantages of row-based replication

    1 RBR格式在日志中会昌盛更多的数据记录,复制DML语句,语句格式仅仅是记录这条语句到二进制日志,二航个事,
      将每行的改变记录进去,如果更改的行数越多,就会产生的数据写入到二进制日志则越多,这样的话可以使回滚
      成为现实。由于记录每行的变更,锁住的时间将会更长,从而会引起并发的性能问题。可以使用binlog_row_image=minimal
      来减少这个并发问题
    2 确定性的UDF函数在基于航个事的复制情况下会产生大量的BLOB值从而是复制的时间变成。
    3 你不能在从库上查看从主库传输过来的的语句,但是你可以通过mysqlbinlog带上--base64-output=decode-rows 和--verbose参数来查看改变的数据
    4 对于使用MyISAM存储引擎的表,在将INSERT语句作为基于行的事件应用于二进制日志时,在将INSERT语句应用于语句时需要更强的锁定。
      这意味着在使用基于行的复制时不支持MyISAM表上的并发插入。

    以上为语句格式和行格式方面的优缺点,基于目前的复制和各个中间件的使用情况看,所有的数据库,都建议采用RBR的格式,而在5.7.7之后的版本,RBR也变成了默认的格式来支持生产的需求

  • 相关阅读:
    二级菜单
    侧面导航
    QFileDialog文件保存
    GitHub for window
    Qt学习事件/信号
    开始RTThread之旅
    Qt事件过滤器
    LPC1768开发板液晶问题解决
    用QSplitter分裂器实现QTextEdit窗口大小的变化
    Qt之串口编程使用事件驱动来触发接收数据
  • 原文地址:https://www.cnblogs.com/olinux/p/6520546.html
Copyright © 2011-2022 走看看