在多线程副本上,性能模式表 replication_applier_status_by_coordinator
和 replication_applier_status_by_worker
分别显示副本的协调线程和应用线程的状态信息。对于具有多个通道的副本,每个通道的线程都会被识别。
如果详细程度设置为显示信息性消息,则多线程副本的协调线程也会定期将统计信息打印到副本的错误日志。统计信息根据协调线程分配给应用线程的事件数量打印,最大频率为每 120 秒一次。该消息列出了与相关复制通道(或未命名的默认复制通道)相关的以下统计信息
- 经过的秒数
当前时间与上次将此信息打印到错误日志的时间之间的秒数差。
- 分配的事件
协调线程自启动以来已排队到所有应用线程的事件总数。
- 超过超限级别的工作队列已满
当前超过超限级别排队到任何应用线程的事件数,超限级别设置为 16384 个事件的最大队列长度的 90%。如果此值为零,则没有应用线程在达到其容量上限。
- 由于工作队列已满而等待
协调线程由于应用线程队列已满而不得不等待调度事件的次数。如果此值为零,则没有应用线程用尽了其容量。
- 由于总大小而等待
协调线程由于达到
replica_pending_jobs_size_max
限制而不得不等待调度事件的次数。此系统变量设置了可用于应用线程队列的内存总量(以字节为单位),这些队列保存了尚未应用的事件。如果一个异常大的事件超过了此大小,则该事务将被保留,直到所有应用线程的队列都为空,然后才进行处理。所有后续事务都将被保留,直到大事务完成。- 在时钟冲突时等待
协调线程由于事件依赖的事务尚未提交而不得不等待调度事件的纳秒数。如果
replica_parallel_type
设置为DATABASE
(而不是LOGICAL_CLOCK
),则此值始终为零。- 当工作线程占用时等待(计数)
协调器线程短暂休眠的次数,这可能发生在两种情况下。第一种情况是协调器线程分配事件并发现应用器工作线程的队列已超出最大队列长度的 10%(即低于运行级别)时,在这种情况下,它最多休眠 1 毫秒。第二种情况是当
replica_parallel_type
设置为LOGICAL_CLOCK
并且协调器线程需要将事务的第一个事件分配给应用器工作线程的队列时,它只将事件分配给队列为空的工作线程,因此如果所有队列都不为空,协调器线程会休眠直到某个队列变为空。- 工作线程占用时等待
协调器线程等待空闲的应用器工作线程队列时休眠的纳秒数(即在上面描述的第二种情况下,当
replica_parallel_type
设置为LOGICAL_CLOCK
并且需要分配事务的第一个事件时)。