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