Tempos de espera para comunicações FCM

Em um banco de dados com várias partições ou em um ambiente em que há paralelismo intrapartição, o Fast Communications Manager (FCM) gerencia a comunicação entre diferentes agentes que trabalham na mesma instrução, estejam esses agentes no mesmo membro ou em membros diferentes. Todas as comunicações FCM envolvem a possibilidade de tempos de espera, pois um agente aguarda que outro trabalhe ou que os dados sejam transferidos de um agente para outro.
Os tempos de espera relacionados ao FCM não indicam necessariamente que o processamento está bloqueado entre os membros; para uma determinada declaração, o trabalho pode estar sendo realizado em paralelo ou em série nos subagentes entre os membros. Os tempos de espera relacionados ao FCM mostram o tempo em que um agente fica bloqueado em um único membro aguardando outro; no entanto, o trabalho pode muito bem estar sendo realizado no outro membro.

Por exemplo, o Agente A no membro 0 pode estar bloqueado esperando que o Agente B no membro 1 leia os dados que estão sendo enviados a ele. Se o Agente B estiver ocupado e não receber os dados da fila da tabela imediatamente, o Agente A só poderá enviar uma quantidade limitada de dados antes de ser forçado a aguardar uma confirmação do Agente B para enviar os dados restantes. Esse tempo de espera é contado como fcm_tq_send_wait_time pelo Agente A.

Figura 1. Tempos de espera nas comunicações FCM
Tempos de espera do FCM em diferentes agentes
Outro cenário pode envolver um agente em um membro que envia uma solicitação a um agente em outro membro. fcm_message_recv_wait_time serão incorridos se uma das seguintes situações ocorrer:
  • O agente A envia uma solicitação longa ao agente B, e o agente B é forçado a aguardar o recebimento da solicitação completa. Nesse caso, o agente B incorre em fcm_message_recv_wait_time.
  • O agente A envia uma solicitação ao agente B e aguarda uma resposta do agente B. Nesse caso, o agente A incorre em fcm_message_recv_wait_time.
fcm_message_send_wait_time serão incorridos se uma das seguintes situações ocorrer:
  • O agente A envia uma solicitação longa ao agente B e é bloqueado por algum motivo. Por exemplo, o Agente A pode precisar esperar enquanto a primeira parte da solicitação que está sendo enviada é processada pelo daemon FCM local. Nesse caso, o agente A incorre em fcm_message_send_wait_time.
  • O agente B envia uma resposta a uma solicitação do agente A. Se o agente B for, por algum motivo, bloqueado antes que toda a mensagem possa ser enviada, o agente B incorrerá em fcm_message_send_wait_time.

Dependendo do que você deseja medir, pode ser apropriado subtrair os tempos de espera do FCM do tempo total gasto se você estiver agregando métricas para o tempo gasto em várias partições.