为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:
读写分离和数据守护归档ARCH_WAIT_APPLY疑问,生产环境大多是哪种?高性能还是事务一致?事务一致是否会把主库给hang死?
cat /dmdb8/dmdata/DAMENG/dmarch.ini
ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dmdb8/dmarch/DAMENG #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB
[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = top02 #实时归档目标实例名
● 事务一致模式 主库事务提交触发 Redo 日志刷盘和即时归档,备库收到主库发送的 Redo 日志,并重演完成后再响应主库。主库收到备库响应消息后,再响应用户的提交请求。事务一致模式下,同一个事务的 SELECT 语句无论是在主库执行,还是在备库执行,查询结果都满足 READ COMMIT 隔离级要求。
● 高性能模式 与实时归档一样,备库收到主库发送的 Redo 日志后,马上响应主库,再启动日志重演。高性能模式下,备库与主库的数据同步存在一定延时(一般情况下延迟时间非常短暂,用户几乎感觉不到),不能严格保证事务一致性。
无论是高性能模式还是事务一致性模式,数据库都不会存在卡死情况。
高性能主要在于,优先响应满足主库上各种事务,不用等备库完成日志重演, 而事务一致性模式,则需要等备库接收到日志,重演完成后,再响应主库,主库再提交用户的需求。
二者各有各适用的场景,如果对数据一致性要求不是特别严格,建议可以先采用高性能模式,发挥数据库最大性能,一般数据同步延迟也在秒级以内,基本够满足一般需求。
目前,在达梦数据库集群中,无论是读写分离还是数据守护集群,归档类型均要配置为实时归档(即ARCH_TYPE=REALTIME)
在生产环境中:
1.读写分离配置完实时归档(realtime)后,建议配置ARCH_WAIT_APPLY=1(即事务一致模式)
2.数据守护一般情况下,如果实时性要求不高,推荐配置ARCH_WAIT_APPLY=0(即高性能模式),效率会比较好。
事务一致不会把主库给夯死,甚至还可以在dmwatcher.ini中配置参数RLOG_SEND_THRESHOLD和RLOG_APPLY_THRESHOLD来加以辅助限制
在读写分离集群中,配置实时归档,默认采用ARCH_WAIT_APPLY=0(高性能模式)。如果应用系统对查询结果的实时性要求不太高,并且事务中修改数据的操作也不依赖同一个事务中的查询结果。配置为0的话可以大幅提高系统整体性能。事务一致模式也不会把主库夯住的。