FCM 通信的等待时间

在多分区数据库中,或者在具有分区内并行性的环境中,快速通信管理器 (FCM) 管理处理同一语句的不同代理程序之间的通信,无论这些代理程序是否在同一成员中。 当一个代理程序等待另一个代理程序完成工作或等待数据从一个代理程序传输到另一个代理程序时,所有 FCM 通信都会涉及等待时间的可能性。
与 FCM 相关的等待时间不一定指示跨成员的处理被阻止;对于给定语句,可针对跨成员的子代理程序并行或串行执行工作。与 FCM 相关的等待时间显示某个代理程序因等待另一个代理程序而在单个成员上被阻塞的时间;但是,工作可能会在其他成员上顺利进行。

例如,成员 0 上的代理程序 A 可能会因等待成员 1 上的代理程序 B 读取发送到代理程序 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,且该请求由于某些原因被阻止。例如,当正在被发送的请求的第一部分由本地 FCM 守护程序处理时,代理程序 A 可能需要等待。 在这种情况下,代理程序 A 会产生 fcm_message_send_wait_time
  • 代理程序 B 发送对来自代理程序 A 的请求的应答。如果在发送整个消息之前,代理程序 B 由于某些原因而被阻止,那么代理程序 B 会产生 fcm_message_send_wait_time

根据您要进行度量的内容,如果您在聚集多个分区之间所耗用时间的指标,从总时间中减去 FCM 等待时间可能才是正确的。