Documentation Home
MySQL 8.0 参考手册  / 第 23 章 MySQL NDB Cluster 8.0  / 23.6 NDB Cluster的管理  / 23.6.2 NDB Cluster 日志消息  /  21.6.2.3 集群日志中的事件缓冲区报告

21.6.2.3 集群日志中的事件缓冲区报告

NDB为从数据节点接收的事件使用一个或多个内存缓冲区。每个订阅表事件的对象都有一个这样的缓冲区Ndb,这意味着每个执行二进制日志记录的mysqld通常有两个缓冲区(一个用于模式事件的缓冲区,一个用于数据事件的缓冲区)。每个缓冲区都包含由事件组成的纪元。这些事件包括操作类型(插入、更新、删除)和行数据(图像前后加上元数据)。

NDB在集群日志中生成消息来描述这些缓冲区的状态。尽管这些报告出现在集群日志中,但它们指的是 API 节点上的缓冲区(与大多数其他由数据节点生成的集群日志消息不同)。这些消息及其底层的数据结构在 NDB 7.5.1 中发生了重大变化,增加了NDB_LE_EventBufferStatus2事件类型和ndb_logevent_EventBufferStatus2数据结构(请参阅Ndb_logevent_type 类型)。本讨论的其余部分将重点放在基于NDB_LE_EventBufferStatus2.

集群日志中的事件缓冲区日志记录报告使用此处显示的格式:

Node node_id: Event buffer status (object_id):
used=bytes_used (percent_used% of alloc)
alloc=bytes_allocated (percent_alloc% of max) max=bytes_available
latest_consumed_epoch=latest_consumed_epoch
latest_buffered_epoch=latest_buffered_epoch
report_reason=report_reason

此处列出了构成此报告的字段及其说明:

  • node_id:生成报告的节点的 ID。

  • object_idNdb生成报告的对象的 ID。

  • bytes_used:缓冲区使用的字节数。

  • percent_used:使用的已分配字节的百分比。

  • bytes_allocated:分配给此缓冲区的字节数。

  • percent_alloc:已使用的可用字节百分比;ndb_eventbuffer_max_alloc 如果等于 0(无限制) 则不打印 。

  • bytes_available:可用字节数;如果 ndb_eventbuffer_max_alloc为 0(无限制),则为 0。

  • latest_consumed_epoch:最近消耗完成的纪元。(在 NDB API 应用程序中,这是通过调用完成的 nextEvent()。)

  • latest_buffered_epoch:事件缓冲区中最近缓冲(完全)的纪元。

  • report_reason: 举报的原因。可能的原因将在本节后面显示。

latest_consumed_epochlatest_buffered_epoch字段分别对应于 NDB 7.5.1 之前使用的旧式事件缓冲区日志消息 的apply_gci和 字段。latest_gci

报告的可能原因如下表所述:

  • ENOUGH_FREE_EVENTBUFFER:事件缓冲区有足够的空间。

    LOW_FREE_EVENTBUFFER:事件缓冲区可用空间不足。

    可以通过设置 ndb_report_thresh_binlog_mem_usage 服务器变量来调整触发这些报告的阈值免费百分比级别。

  • BUFFERED_EPOCHS_OVER_THRESHOLD: 缓冲的epoch数是否超过了配置的阈值。此数字是已完整接收的最新纪元与最近使用的纪元之间的差异(在 NDB API 应用程序中,这是通过调用 nextEvent()或 完成的nextEvent2())。该报告每秒生成一次,直到缓冲时期的数量低于阈值,该阈值可以通过设置 ndb_report_thresh_binlog_epoch_slip 服务器变量进行调整。您还可以通过调用调整 NDB API 应用程序中的阈值 setEventBufferQueueEmptyEpoch()

  • PARTIALLY_DISCARDING: 事件缓冲内存已用完—— ndb_eventbuffer_max_alloc 即已使用 100%。即使使用率超过 100%,任何部分缓冲的时期都会缓冲到完成,但接收到的任何新时期都会被丢弃。这意味着事件流中出现了间隙。

  • COMPLETELY_DISCARDING: 没有 epochs 被缓冲。

  • PARTIALLY_BUFFERING:buffer free percentage following the gap已经上升到阈值,可以在mysql客户端使用 ndb_eventbuffer_free_percent server系统变量设置,也可以在NDB API应用程序中调用 set_eventbuffer_free_percent(). 新纪元被缓冲。由于差距而无法完成的时代将被丢弃。

  • COMPLETELY_BUFFERING: 所有收到的 epochs 都在缓冲,这意味着有足够的事件缓冲内存。事件流中的间隙已被关闭。