# 18.7.6 XCom 缓存管理

18.7.6.1 增加缓存大小

18.7.6.2 减小缓存大小

组复制的组通信引擎(XCom,Paxos 变体)包括一个缓存,用于在组成员之间交换的消息(及其元数据)作为共识协议的一部分。在其他功能中,消息缓存用于恢复在一段时间无法与其他组成员通信后重新连接到组的成员丢失的消息。

从 MySQL 8.0.16 开始,可以使用以下命令为 XCom 的消息缓存设置缓存大小限制group_replication_message_cache_size系统变量。如果达到缓存大小限制,XCom 将删除已确定并交付的最旧条目。应该对所有组成员设置相同的缓存大小限制,因为尝试重新连接的无法访问的成员会随机选择任何其他成员来恢复丢失的消息。因此,每个成员的缓存中都应该有相同的消息。

在 MySQL 8.0.16 之前,缓存大小为 1 GB,与 MySQL 8.0.16 的缓存大小的默认设置相同。考虑到 MySQL 服务器的其他缓存和对象池的大小,确保您的系统上有足够的内存来满足您选择的缓存大小限制。请注意,使用设置的限制group_replication_message_cache_size仅适用于存储在缓存中的数据,并且缓存结构需要额外的 50 MB 内存。

选择A.group_replication_message_cache_size设置,请参考成员被驱逐前的时间段内的预期消息量。此时间段的长度由group_replication_member_expel_timeout系统变量,它决定了除了最初的 5 秒检测时间之外,允许成员返回组而不是被驱逐的等待时间(最多一个小时)。注意,在 MySQL 8.0.21 之前,这个时间段默认为从成员变为不可用的 5 秒,这只是产生怀疑之前的检测时间,因为由group_replication_member_expel_timeout系统变量默认为零。从 8.0.21 开始,驱逐超时默认为 5 秒,因此默认情况下,成员在缺席至少 10 秒之前不会被驱逐。