全部产品
Search
文档中心

云数据库 RDS:调整RDS MySQL WRITESET相关参数

更新时间:Jul 02, 2024

您可以通过开启WRITESET模式,设置binlog_transaction_dependency_trackingtransaction_write_set_extraction参数来控制事务的冲突检测机制,以便提高备库回放并行度,降低主从延迟。

WRITESET简介

MySQL默认的基于主库组提交来判断事务冲突的COMMIT_ORDER模式,在一定程度上会受到主库并发度的影响。WRITESET模式解决了这个问题,当该模式开启时,每个事务提交时,会将当前事务修改的数据行与其他事务修改的数据行比较,只要事务修改的数据行互相不冲突,就可以在备库并行回放,能够解决大部分的备库回放并发度不够的问题。

开启条件

支持开启WRITESET的版本如下:

  • RDS MySQL 5.7小版本在20211231及以上。

  • RDS MySQL 8.0小版本在20210930及以上。

说明

在DDL,大事务,修改外键表和无主键表这几种业务场景中,事务的冲突检测会从WRITESET退化到COMMIT_ORDER模式,此时备库的可并发度不会比COMMIT_ORDER差,建议备库和只读有复制延迟问题的用户主动开启WRITESET模式。

开启配置

开启WRITESET需要完成如下参数设置,详细操作请参见设置实例参数

  • transaction_write_set_extraction = XXHASH64

  • binlog_transaction_dependency_tracking = WRITESET

  • binlog_transaction_dependency_history_size = 500000

说明

binlog_transaction_dependency_history_size是内存中保存的做冲突检测的数据行数量的上限值,该值越大,保存的数据行越多,事务间冲突检测后并发度越高。

参数取值规则

警告

binlog_transaction_dependency_tracking参数与transaction_write_set_extraction参数存在关联关系,不正确的对应关系不允许设置,会被拦截。需要按照以下规则设置参数值。

binlog_transaction_dependency_tracking

transaction_write_set_extraction

COMMIT_ORDER

OFFXXHASH64

WRITESETWRITESET_SESSION

XXHASH64

参数解释

重要

binlog_transaction_dependency_trackingtransaction_write_set_extraction参数支持的内核小版本范围为:

  • RDS MySQL 5.7:[20211231, 99999999)

  • RDS MySQL 8.0:[20210930, 99999999)

  • binlog_transaction_dependency_tracking

    • 含义:在多线程并行回放(replica_parallel_workersslave_parallel_workers大于0)中,binlog_transaction_dependency_tracking用于决定如何计算事务之间的冲突和依赖关系,让备库能够并行回放Binlog中的事务。

    • 默认值:WRITESET

    • 可选值及含义:

      • COMMIT_ORDER:依赖主库组提交判断事务之间的依赖关系。如果两个事务在主库能够并行提交,表示这两个事务没有冲突,能够在备库并行回放。此模式容易受到主库并发度的影响。

      • WRITESET:用行级别粒度判断事务之间的依赖关系。在有主键或唯一键的表中,只要两个事务没有更新同一行,那么这两个事务就能在备库并行回放。不受主库并发的影响。

      • WRITESET_SESSION:同一SESSION的事务在备库串行回放,不同SESSION的事务按照WRITESET的规则在备库回放。

  • transaction_write_set_extraction

    • 含义:用于决定WRITESET使用何种哈希算法计算数据行的哈希值。开启WRITESET后,将使用此算法计算出的数据行哈希值,判断事务之间是否修改了相同的数据行。

    • 默认值:XXHASH64

    • 可选值及含义:

      • OFF:不计算数据行的哈希值,要求WRITESET处于关闭状态。

      • XXHASH64:使用64位的Hash算法计算数据行的哈希值。

相关文档