Limitless Database 等待事件
以下等待事件适用于 Aurora PostgreSQL Limitless Database。您可以监控这些等待事件,以识别 Aurora PostgreSQL Limitless Database 处理中的瓶颈。
主题
- IO:TwophaseFilePoolWrite 等待事件
- IO:TwophaseFilePoolRead 等待事件
- AuroraLimitless:Connect 等待事件
- AuroraLimitless:AsyncConnect 等待事件
- AuroraLimitless:RemoteStatementSetup 等待事件
- AuroraLimitless:RemoteDDLExecution 等待事件
- AuroraLimitless:RemoteStatementExecution 等待事件
- AuroraLimitless:FetchRemoteResults 等待事件
- AuroraLimitless:AsyncGetInitialResponse 等待事件
- AuroraLimitless:AsyncGetNextResponse 等待事件
- AuroraLimitless:AbortedCommandCleanup 等待事件
- AuroraLimitless:DistributedCommitPrepare 等待事件
- AuroraLimitless:DistributedCommit 等待事件
- AuroraLimitless:DistributedCommitPrepareThrottle 等待事件
- AuroraLimitless:PreparedTransactionResolution 等待事件
- AuroraLimitless:SendPreparedTransactionOutcome 等待事件
- AuroraLimitless:CommitClockBarrier 等待事件
- AuroraLimitless:SnapshotClockBarrier 等待事件
- AuroraLimitless:ReaderSnapshotClockBarrier 等待事件
- AuroraLimitless:GatherDistributedDeadlockGraph 等待事件
- AuroraLimitless:DistributedDeadlockDetection 等待事件
- AuroraLimitless:DistributedDeadlockAbort 等待事件
- AuroraLimitless:GatherRemoteStats 等待事件
- AuroraLimitless:GlobalSequenceRefresh 等待事件
- AuroraLimitless:GlobalVacuumTimeExchange 等待事件
- AuroraLimitless:DistributedTransactionMonitorGather 等待事件
- AuroraLimitlessActivity:AdminTaskSchedulerMain 等待事件
- AuroraLimitlessActivity:AdminTaskExecutorMain 等待事件
- AuroraLimitlessActivity:AdminTaskMonitorMain 等待事件
- AuroraLimitlessActivity:DatabaseCleanupMonitorMain 等待事件
- AuroraLimitlessActivity:TopologyCleanupMonitorMain 等待事件
- AuroraLimitlessActivity:ToplogyChangeMonitorMain 等待事件
- AuroraLimitlessActivity:DistributedTransactionMonitorMain 等待事件
- AuroraLimitlessActivity:GlobalVacuumMonitorMain 等待事件
IO:TwophaseFilePoolWrite 等待事件
等待写入两阶段状态文件池中的两阶段状态文件。这是 Aurora 特有的事件。
原因
执行 PREPARED TRANSACTION
命令的进程,包括 Limitless Database 分布式事务的参与者,必须将事务状态保留在两阶段文件中。Aurora 使用文件池来提高此操作的性能。
操作
这是同步写入 I/O 操作,因此该事件中的高延迟与 IO:XactSync
的原因类似,也可以用同样的方式进行调查。如果使用 Limitless Database,则可能需要减少正在执行的分布式事务的数量。
IO:TwophaseFilePoolRead 等待事件
等待读取两阶段状态文件池中的两阶段状态文件。
原因
对先前准备好的事务执行 COMMIT PREPARED
命令的进程,包括 Limitless Database 分布式事务的参与者,可能需要从两阶段文件中读取先前保留的事务状态。Aurora 使用文件池来提高此操作的性能。
操作
这是读取 I/O 操作。因此,此事件中的高延迟与 IO:DataFileRead
的原因类似,也可以进行同样的调查。如果使用 Limitless Database,则可能需要减少正在执行的分布式事务的数量。
AuroraLimitless:Connect 等待事件
该进程正在等待与集群中另一个节点建立连接。
原因
在进程和远程节点之间建立连接,以执行查询、分布式事务和执行 DDL。
操作
减少集群的同步连接数或调整跨分片查询的使用。
AuroraLimitless:AsyncConnect 等待事件
此事件类似于 Connect
,但表示一个进程在等待与一组节点建立并行连接。
原因
并行连接的建立通常是在执行 DDL 语句时完成的。
操作
减少 DDL 语句的数量或在同一个会话中合并多个 DDL 以提高连接的重复使用率。
AuroraLimitless:RemoteStatementSetup 等待事件
该进程正在等待远程查询执行设置,例如打开、关闭游标或创建准备好的语句。
原因
在无法对语句进行单分片优化的分片表上,此等待事件会随着扫描次数的增加而增加。
操作
优化查询以减少扫描操作的数量或提高单分片优化的资格。
AuroraLimitless:RemoteDDLExecution 等待事件
进程正在等待远程 DDL 命令完成。
原因
在数据库分片组上发出 DDL 命令时,必须先将其分发到其他路由器和分片节点,然后才能确认操作。某些 DDL 操作可能会运行很长时间,因为数据必须适应架构的变化。
操作
识别长时间运行的 DDL 命令,以便对其进行优化。
AuroraLimitless:RemoteStatementExecution 等待事件
进程正在等待远程命令完成。
原因
SQL 命令正在远程节点上运行。此事件将频繁出现,用于内部通信,例如 auto_analyze
和心跳检查。
操作
使用 limitless_stat_statements 视图识别长时间运行的命令。在许多情况下,这是预期事件,特别是对于后台工作人员或内部流程而言,无需采取任何操作。
AuroraLimitless:FetchRemoteResults 等待事件
进程正在等待从远程节点检索行。
原因
从远程表(例如分片表或引用表)读取大量行时,此等待事件可能会增加。
操作
使用 limitless_stat_statements
视图识别未优化的 SELECT
查询。优化查询以仅检索必要的数据。您也可以调整 rds_aurora.limitless_maximum_variable_fetch_size
参数。
AuroraLimitless:AsyncGetInitialResponse 等待事件
在查询执行中使用管道模式时,该进程正在等待初始响应。
原因
对于使用单分片数据放置的查询,这通常会在路由器到分片执行期间出现,并且是正常执行的预期部分。
操作
无需进一步操作。
AuroraLimitless:AsyncGetNextResponse 等待事件
在查询执行中使用管道模式时,该进程正在等待额外响应。
原因
对于使用单分片数据放置的查询,这通常会在路由器到分片执行期间出现,并且是正常执行的预期部分。
操作
无需进一步操作。
AuroraLimitless:AbortedCommandCleanup 等待事件
进程正在等待远程清理查询的结果。向分片节点发出清理查询,以便在分布式事务结束时将其恢复到适当的状态。
原因
事务清理是在事务中止时完成的,要么是因为发现了错误,要么是因为用户发出了明确的 ABORT 命令或取消了正在运行的查询。
操作
调查事务被取消的原因。
AuroraLimitless:DistributedCommitPrepare 等待事件
该进程正在提交分布式事务,正在等待所有参与者确认准备命令。
原因
修改多个节点的事务必须执行分布式提交。DistributedCommitPrepare
中的长时间等待可能是由于参与节点上的 IO:TwophaseFilePoolWrite
事件等待时间过长所致。
操作
减少修改多个节点上数据的事务数量。调查集群其他节点中的 IO:TwophaseFilePoolWrite
事件。
AuroraLimitless:DistributedCommit 等待事件
该进程正在提交分布式事务,正在等待主要参与者确认提交命令。
原因
修改多个节点的事务必须执行分布式提交。DistributedCommit
中的长时间等待可能是由于主要参与者的 IO:XactSync
事件等待时间过长所致。
操作
减少修改多个节点上数据的事务数量。调查集群其他节点中的 IO:XactSync
事件。
AuroraLimitless:DistributedCommitPrepareThrottle 等待事件
该进程正在尝试准备分布式事务,但由于存在已准备好的事务,该进程已被限制。
原因
修改多个节点的事务必须执行分布式提交。作为提交协议的一部分,这些事务的参与者必须执行准备操作。Aurora 限制了并发准备的数量,如果超过此限制,进程将在 DistributedCommitPrepareThrottle
事件中等待。
操作
减少修改多个节点上数据的事务数量。调查 IO:TwophaseFilePoolWrite
事件,因为这些事件中的时间延长可能会导致现有的准备事务积累,从而限制新的准备尝试。
AuroraLimitless:PreparedTransactionResolution 等待事件
该进程遇到了一个由处于准备状态的分布式事务修改的元组。该进程必须确定分布式事务是否会在其快照中可见。
原因
修改多个节点的事务必须执行分布式提交,其中包括准备阶段。大量分布式事务或分布式提交延迟增加可能会导致其他进程遇到 PreparedTransactionResolution
等待事件。
操作
减少修改多个节点上数据的事务数量。调查与分布式提交相关的事件,因为这些事件中的时间延长可能会增加分布式事务提交路径的延迟。您可能还想调查网络和 CPU 负载。
AuroraLimitless:SendPreparedTransactionOutcome 等待事件
该进程正在协调分布式事务的节点上执行,而另一个进程已询问该事务的状态,或者该进程已提交分布式事务并将结果发送给参与者。
原因
遇到 PreparedTransactionResolution
等待事件的进程将查询事务协调器。事务协调器上的回复将遇到 SendPreparedTransactionOutcome。
操作
减少修改多个节点上数据的事务数量。调查与分布式提交相关事件以及 IO:TwophaseFilePoolRead
和 IO:TwophaseFilePoolWrite
事件,因为这些事件可能会增加分布式事务提交路径的延迟。您可能还想调查网络和 CPU 负载。
AuroraLimitless:CommitClockBarrier 等待事件
该进程正在提交事务,必须等待以确保集群中所有节点的分配提交时间均为过去时间。
原因
CPU 或网络饱和可能会导致时钟偏移增加,从而导致在此等待事件中耗费时间。
操作
调查集群中的 CPU 或网络饱和度。
AuroraLimitless:SnapshotClockBarrier 等待事件
该进程已收到来自另一个节点的快照时间,其时钟有一个未来时间,正在等待自己的时钟达到该时间。
原因
这通常发生在进程收到向下推到分片的函数结果并且节点之间存在时钟偏移之后。CPU 或网络饱和可能会导致时钟偏移增加,从而导致在此等待事件中耗费时间。
操作
调查集群中的 CPU 或网络饱和度。
AuroraLimitless:ReaderSnapshotClockBarrier 等待事件
此事件发生在读取节点上。该进程正在等待读取节点重放写入流,以便应用在进程快照时间之前发生的所有写入操作。
原因
在这种情况下,Aurora 副本延迟的增加可能会导致等待时间延长。
操作
调查 Aurora 副本延迟。
AuroraLimitless:GatherDistributedDeadlockGraph 等待事件
作为分布式死锁检测的一部分,该进程正在与其他节点通信以收集锁图。
原因
当一个进程等待锁定时,它将在等待的时间超过 rds_aurora.limitless_distributed_deadlock_timeout
之后执行分布式死锁检查。
操作
调查应用程序中争用锁的原因,并考虑调整 rds_aurora.limitless_distributed_deadlock_timeout
。
AuroraLimitless:DistributedDeadlockDetection 等待事件
该进程正在与其他节点通信,以检测分布式死锁。
原因
当一个进程等待锁定时,它将在等待的时间超过 rds_aurora.limitless_distributed_deadlock_timeout
之后执行分布式死锁检查。
操作
调查应用程序中争用锁的原因,并考虑调整 rds_aurora.limitless_distributed_deadlock_timeout
。
AuroraLimitless:DistributedDeadlockAbort 等待事件
该进程正在与另一个节点通信,以中止在分布式死锁中被选为受害者的会话。
原因
应用程序模式会导致分布式死锁。
操作
调查导致分布式死锁的应用程序模式。
AuroraLimitless:GatherRemoteStats 等待事件
该进程正在从集群中的其他节点收集统计数据。
原因
监控或活动查询和视图(例如 limitless_stat_activity
)将从其他节点检索统计数据。
操作
无需进一步操作。
AuroraLimitless:GlobalSequenceRefresh 等待事件
该进程正在生成一个新的序列值,必须从全局序列中请求一个新的区块。
原因
如果 rds_aurora.limitless_sequence_chunk_size
不足,序列值生成速度过快可能导致该事件停滞。
操作
这是正常现象。如果您在此事件中看到时间过长,请考虑调整 rds_aurora.limitless_sequence_chunk_size
。请参阅 Limitless Database 中有关序列的文档。
AuroraLimitless:GlobalVacuumTimeExchange 等待事件
该进程正在交换快照数据以支持清理。
原因
Limitless Database 中的节点与其他节点交换最旧的活动快照时间数据,以计算清理执行的正确截止时间。
操作
无需进一步操作。
AuroraLimitless:DistributedTransactionMonitorGather 等待事件
该进程正在从其他节点收集事务元数据以支持分布式事务清理。
原因
Limitless Database 中的节点与其他节点交换事务元数据,以确定何时可以清除分布式事务状态。
操作
无需进一步操作。
AuroraLimitlessActivity:AdminTaskSchedulerMain 等待事件
在任务调度程序进程的主循环中等待。
AuroraLimitlessActivity:AdminTaskExecutorMain 等待事件
在任务执行进程的主循环中等待。
AuroraLimitlessActivity:AdminTaskMonitorMain 等待事件
在任务监控进程的主循环中等待。
AuroraLimitlessActivity:DatabaseCleanupMonitorMain 等待事件
在数据库清理监控进程的主循环中等待。
AuroraLimitlessActivity:TopologyCleanupMonitorMain 等待事件
在拓扑清理监控进程的主循环中等待。
AuroraLimitlessActivity:ToplogyChangeMonitorMain 等待事件
在拓扑更改监控进程的主循环中等待。
AuroraLimitlessActivity:DistributedTransactionMonitorMain 等待事件
在分布式事务监控进程的主循环中等待。
AuroraLimitlessActivity:GlobalVacuumMonitorMain 等待事件
在全局清理监控进程的主循环中等待。