FCM 通信の待ち時間

複数パーティション・データベース、またはパーティション内並列処理がある環境では、同じステートメントを処理するさまざまなエージェント間の通信は高速コミュニケーション・マネージャー (FCM) によって管理されます (これらのエージェントが同じメンバー上にある場合も、異なるメンバー上にある場合も)。 どんな FCM 通信についても、エージェントが別のエージェントによる処理の完了を待機したり、エージェント間でのデータ転送の完了を待機したりするなどの場合に、待ち時間が発生する可能性があります。
FCM 関連の待ち時間は、メンバー間で処理がブロックされたことを必ずしも示すものではありません。あるステートメントに関して、複数メンバーにわたるサブエージェントで並列的または逐次的に処理が進められる可能性があります。FCM 関連の待ち時間は、1 つのメンバー上のエージェントが別のメンバーを待機してブロックされる時間を示します。 しかし、相手のメンバー上では処理が順調に進行している可能性があります。

例えば、メンバー 0 上のエージェント A が、メンバー 1 上のエージェント B にデータが送られてそこで読み取られるのを待機し、ブロックされているとします。 仮にエージェント B がビジー状態で、表キューからデータを直ちに受信できない場合、エージェント A は限定的な量のデータだけを送信した後、エージェント B から確認応答が届くのを強制的に待機させられます (確認応答の後で残りのデータを送信します)。 この待ち時間はエージェント A では fcm_tq_send_wait_time としてカウントされます。

図 1. FCM 通信での待ち時間
さまざまなエージェントでの FCM 待ち時間
別のシナリオとして、あるメンバー上のエージェントが、別のメンバー上のエージェントに要求を送っているとします。 以下のいずれかの状況では、fcm_message_recv_wait_time が発生します。
  • エージェント A が長い要求をエージェント B に送り、エージェント B は要求全体が受信されるまで強制的に待機させられる。 この場合、エージェント B では fcm_message_recv_wait_time が発生します。
  • エージェント A がエージェント B に要求を送り、エージェント B からの応答を待機する。この場合、エージェント A で fcm_message_recv_wait_time が発生します。
以下のいずれかの状況では、fcm_message_send_wait_time が発生します。
  • エージェント A が長い要求をエージェント B に送り、何らかの理由でブロックされる。 例えば、エージェント A は、送られる要求の最初の部分がローカル FCM デーモンによって処理されるのを待つ必要があるとします。 この場合、エージェント A では fcm_message_send_wait_time が発生します。
  • エージェント B が、エージェント A からの要求の応答を送る。メッセージ全体が送信される前に何らかの理由でエージェント B がブロックされた場合、エージェント B で fcm_message_send_wait_time が発生します。

計測する対象によっては、複数のパーティションにわたる消費時間メトリックを集計するときに、消費された合計時間から FCM 待ち時間を差し引くのが適切な場合があります。