NDB
は、データノードから受信したイベントに 1 つ以上のメモリーバッファーを使用します。 このようなバッファは、テーブルイベントをサブスクライブする Ndb
オブジェクトごとに存在します。つまり、通常、バイナリロギングを実行する mysqld ごとにバッファが 2 つあります (スキーマイベント用にバッファが 1 つ、データイベント用にバッファが 1 つ)。 各バッファには、イベントで構成されるエポックが含まれます。 これらのイベントは、操作タイプ (挿入、更新、削除) および行データ (ビフォアイメージとアフターイメージおよびメタデータ) で構成されます。
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
: 完了までに最後に消費されたエポック。 (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
: イベントバッファメモリーを使い果たしました。つまり、ndb_eventbuffer_max_alloc
の 100% が使用されています。 部分的にバッファされたエポックは、使用率が 100% を超えても完了までバッファされますが、受信した新しいエポックは破棄されます。 つまり、イベントストリームでギャップが発生しています。COMPLETELY_DISCARDING
: エポックはバッファリングされません。PARTIALLY_BUFFERING
: ギャップに続くバッファーの空き率がしきい値まで上昇しました。ndb_eventbuffer_free_percent
サーバーシステム変数を使用するか、NDB API アプリケーションでset_eventbuffer_free_percent()
を呼び出すことによって mysql クライアントで設定できます。 新しいエポックがバッファされます。 ギャップのために完了できなかった Epoch は破棄されます。COMPLETELY_BUFFERING
: 受信したすべてのエポックがバッファされています。これは、十分なイベントバッファメモリーがあることを意味します。 イベントストリーム内のギャップがクローズされました。