NDB
使用一個或多個記憶體緩衝區來儲存從資料節點接收的事件。每個訂閱表格事件的 Ndb
物件都有一個這類的緩衝區,這表示執行二進位日誌的每個 mysqld 通常會有兩個緩衝區(一個用於綱要事件,另一個用於資料事件)。每個緩衝區都包含由事件組成的 epoch。這些事件包含操作類型(插入、更新、刪除)和資料列資料(之前和之後的影像加上中繼資料)。
NDB
會在叢集日誌中產生訊息,以描述這些緩衝區的狀態。雖然這些報告會出現在叢集日誌中,但它們是指 API 節點上的緩衝區(不同於大多數其他由資料節點產生的叢集日誌訊息)。
叢集日誌中的事件緩衝區日誌報告使用這裡顯示的格式
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_id
:報告來源的Ndb
物件 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
:最近完成使用的 epoch。(在 NDB API 應用程式中,這是透過呼叫nextEvent()
完成的。)latest_buffered_epoch
:最近在事件緩衝區中緩衝(完整)的 epoch。report_reason
:產生報告的原因。稍後在本節中會顯示可能的原因。
以下清單中說明報告的可能原因
ENOUGH_FREE_EVENTBUFFER
:事件緩衝區有足夠的空間。LOW_FREE_EVENTBUFFER
:事件緩衝區的可用空間即將用盡。觸發這些報告的臨界值可用百分比層級可透過設定
ndb_report_thresh_binlog_mem_usage
伺服器變數來調整。BUFFERED_EPOCHS_OVER_THRESHOLD
:緩衝的 epoch 數是否已超過設定的臨界值。此數字是完整接收的最新 epoch 與最近使用(在 NDB API 應用程式中,這是透過呼叫nextEvent()
或nextEvent2()
完成的)的 epoch 之間的差異。此報告會每秒產生一次,直到緩衝的 epoch 數低於臨界值為止,臨界值可透過設定ndb_report_thresh_binlog_epoch_slip
伺服器變數來調整。您也可以在 NDB API 應用程式中透過呼叫setEventBufferQueueEmptyEpoch()
來調整臨界值。PARTIALLY_DISCARDING
:事件緩衝區記憶體已耗盡,也就是說,已使用 100% 的ndb_eventbuffer_max_alloc
。任何部分緩衝的 epoch 都會緩衝至完成,即使使用量超過 100%,但接收到的任何新 epoch 都會被捨棄。這表示事件串流中發生間隔。COMPLETELY_DISCARDING
:沒有緩衝任何 epoch。PARTIALLY_BUFFERING
:間隔後的緩衝區可用百分比已上升至臨界值,可以使用 mysql 用戶端中的ndb_eventbuffer_free_percent
伺服器系統變數或在 NDB API 應用程式中透過呼叫set_eventbuffer_free_percent()
來設定此臨界值。新的 epoch 已緩衝。由於間隔而無法完成的 epoch 會被捨棄。COMPLETELY_BUFFERING
:所有接收到的 epoch 都正在緩衝,這表示有足夠的事件緩衝區記憶體。事件串流中的間隔已關閉。