RDS for PostgreSQL 等待事件
等待事件表示会话正在等待资源。例如,当 RDS for PostgreSQL 等待从客户端接收数据时,会发生等待事件 Client:ClientRead
。会话通常会等待如下资源。
-
例如,当会话试图修改缓冲区时,对缓冲区的单线程访问
-
当前被另一个会话锁定的行
-
已读取一个数据文件
-
已写入一个日志文件
例如,为了满足查询,会话可能会执行完整的表扫描。如果数据尚未在内存中,会话将等待磁盘输入/输出完成。当缓冲区读取到内存时,会话可能需要等待,因为其他会话正在访问相同的缓冲区。数据库使用预定义的等待事件记录等待。这些事件按类别进行分组。
等待事件本身并不表示存在性能问题。例如,如果请求的数据不在内存中,则必须从磁盘读取数据。如果一个会话锁定行以进行更新,则另一个会话将等待解锁该行,以便它可以更新该行。提交需要等待对日志文件的写入完成。等待是数据库正常运行不可或缺的组成部分。
另一方面,大量的等待事件通常表示存在性能问题。在这种情况下,您可以使用等待事件数据来确定会话将时间花费在哪里。例如,如果通常在几分钟内运行的报告现在运行需要几个小时,则可以确定对总等待时间贡献最大的等待事件。如果您能确定顶级等待事件的原因,您有时就可以进行更改来提高性能。例如,如果您的会话正在等待已被另一个会话锁定的行,则可以结束锁定会话。