• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • XCom缓存管理

    组复制的组通信引擎(XCom,一个Paxos变体)包括一个缓存,用于缓存作为共识协议一部分的消息(及其元数据)。在其他功能中,消息高速缓存用于成员在无法与其他组成员通信之后返回该组的成员进行恢复。

    从MySQL 8.0.16起,可以使用group_replication_message_cache_size系统变量为XCom的消息缓存设置缓存大小限制。该系统变量的默认和最小设置为1 GB,这是MySQL 8.0.16之前的MySQL Server版本中消息缓存的大小。如果达到缓存大小限制,则XCom会删除已决定并已交付的最旧的条目。考虑到MySQL Server其他缓存和对象池的大小,请确保系统上有足够的内存用于所选的缓存大小限制。

    如果尝试重新连接的无法访问的成员需要恢复消息,但是该消息已从消息缓存中删除,则该成员无法重新连接。如果您使用了group_replication_member_expel_timeout系统变量(在MySQL 8.0.13中引入),用于指定将可疑成员驱逐出组之前的额外延迟时间。当从消息缓存中删除当前无法访问的成员可能需要恢复的消息时,组复制的组通信系统(GCS)会通过警告消息向您发出警报。该警告消息记录在所有活动组成员上(每个不可达成员仅记录一次)。尽管组成员不能肯定知道什么消息是无法访问的成员看到的最后一条消息,但是警告消息表示缓存大小可能不足以支持您在驱逐成员之前选择的等待时间。在这个情况下,group_replication_member_expel_timeout系统变量,以便高速缓存包含成员成功返回所需的所有丢失的消息。如果您希望成员在不寻常的时间内无法访问,也可以考虑暂时增加缓存大小限制。

    如果您正在考虑减少缓存大小限制,则可以memory_summary_global_by_event_name使用以下语句查询“性能模式”表:

    SELECT * FROM performance_schema.memory_summary_global_by_event_name
      WHERE EVENT_NAME LIKE 'memory/group_rpl/GCS_XCom::xcom_cache';
    

    这将返回消息高速缓存的内存使用情况统计信息,包括当前高速缓存的条目数和高速缓存的当前大小。如果减小缓存大小限制,则XCom会删除已确定并交付的最旧的条目,直到当前大小低于该限制为止。XCom可能会暂时超过缓存大小限制,而此删除过程正在进行中。