PG中的等待事件列表

0    219    4

Tags:

👉 本文共约35046个字,系统预计阅读时间或需132分钟。

简介

等待事件表示会话正在等待的资源。例如,当 Aurora PostgreSQL 等待从客户端接收数据时,会发生等待事件 Client:ClientRead。会话等待的典型资源包括以下内容:

  • 例如,当会话试图修改缓冲区时,对缓冲区的单线程访问
  • 当前被另一个会话锁定的行
  • 已读取一个数据文件
  • 已写入一个日志文件

例如,为了满足查询,会话可能会执行完整的表扫描。如果数据尚未在内存中,会话将等待磁盘输入/输出完成。当缓冲区读取到内存时,会话可能需要等待,因为其他会话正在访问相同的缓冲区。数据库使用预定义的等待事件记录等待。这些事件按类别进行分组。

等待事件本身并不显示性能问题。例如,如果请求的数据不在内存中,则必须从磁盘读取数据。如果一个会话锁定行以进行更新,则另一个会话将等待解锁该行,以便它可以更新该行。提交需要等待对日志文件的写入完成。等待是数据库正常运行不可或缺的组成部分。

大量等待事件通常显示性能问题。在这种情况下,您可以使用等待事件数据来确定会话将时间花费在哪里。例如,如果通常在几分钟内运行的报告现在运行了数小时,则可以确定对总等待时间贡献最大的等待事件。如果您能确定顶级等待事件的原因,您有时就可以进行更改来提高性能。例如,如果您的会话正在等待已被另一个会话锁定的行,则可以结束锁定会话。

等待事件的关联根因都是相对笼统的,因为从等待事件我们还无法直接定位直接原因,只能初步明确一个大体的方向。如果我们想进一步定位问题,可以通过存在较严重问题的等待事件在pg_activity中对应的会话的其他字段,比如SQL语句等来进一步定位,或者根据等待事件关联的问题领域,再使用其他分析工具去做进一步定位。比如如果我们发现IO问题比较多,那么通过OS的iostat就可以进一步分析IO是否真正存在问题,IO问题到底在哪。

PostgreSQL 9.6动态视图pg_stat_activity新增了wait_event_type, wait_event的等待事件展示。通过查阅pg_stat_activity中的wait_event_type和wait_event我们可以了解到每个sql进程“当前”更详细的执行状态,无论是对于异常定位排查,还是系统优化来说都更加方便了。

当会话处于等待状态时,wait_event与wait_event_type非空,表示会话正在等待的类型。根据等待信息,可以了解当前会话的状态。

将来也可以通过插件的形式,掌握数据库在某个时间段内的等待事件统计,更好的诊断数据库的健康状态。

已有的插件如下

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信db_bao,谢谢!
PG中的等待事件列表后续精彩内容已被小麦苗无情隐藏,请输入验证码解锁本站所有文章!
验证码:
请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“DB宝”或者“www_xmmup_com”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复

嘿,我是小麦,需要帮助随时找我哦。
  • 18509239930
  • 个人微信

  • DB宝
  • 个人邮箱
  • 点击加入QQ群
  • 个人微店

  • 回到顶部