文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PostgreSQL 的子事务不用太担心,做好监控告警很重要!

2024-11-29 22:03

关注

子事务过多的风险

如果 PostgreSQL 中的子事务过多,可能会导致一些风险或问题:

• PostgreSQL 子事务问题: 事务 ID 增长

• PostgreSQL 子事务问题: 子事务缓存溢出

建议了解您的系统中是否使用了子事务。如果有使用,也并不意味着需要立即消除它们,这完全取决于您业务场景下的风险程度。

查询 pg_stat_slru 视图

pg_stat_slru 可用于检查 SLRU(简单、最近最少使用)缓存的使用状态。SLRU 是一种特殊的缓冲区缓存,用于存储非用户数据,例如每个事务的状态,以及有关子事务的信息。异步通知也会使用 SLRU。

从 PostgreSQL 13 开始,您可以查看监控视图 pg_stat_slru,指定name = 'Subtrans',并检查返回行中的blks_read是否持续增长。这表明 PostgreSQL 必须读取磁盘页面,因为它需要访问不再缓存的子事务。

您可以使用下面的查询,来检查 PostgreSQL 中子事务的使用情况:

SELECT blks_hit, blks_read, blks_written,
    flushes, truncates
FROM pg_stat_slru
WHERE name = 'Subtrans';

调用 pg_stat_get_backend_subxact 函数

pg_stat_get_backend_subxact() 是一个系统函数,返回指定后端 ID 的后端子事务信息。

从 PostgreSQL 16 开始,您可以调用函数pg_stat_get_backend_subxact(integer),来返回后端进程的子事务数量,以及子事务缓存是否溢出。

下面是一个pg_stat_get_backend_subxact()的用法示例,查询了具有非零子事务计数的任何后端的 PID,子事务信息和最近运行的查询:

SELECT pg_stat_get_backend_pid(bid) AS pid,
       s.subxact_count,
       s.subxact_overflow,
       pg_stat_get_backend_activity(bid) AS query
FROM pg_stat_get_backend_idset() AS bid
    JOIN LATERAL pg_stat_get_backend_subxact(bid) AS s ON TRUE
WHERE s.subxact_count > 0;

观察等待事件 SubtransSLRU

通常,在pg_subtrans的 SLRU 子系统负载较高期间,PostgreSQL 中将会出现SubtransSLRU和SubtransBuffer等待事件。SLRU(简单、最近最少使用)缓存是一种由磁盘页面支持的机制,用于存储对 PostgreSQL 操作至关重要的各种事务相关信息。

注意:在 PostgreSQL 12 和更早版本中,对应的等待事件称为SubtransControlLock。SubtransControlLock在 PostgreSQL 13 中被重命名为SubtransSLRU。

在检查一行中的一个子事务的可见性时,PostgreSQL 首先会检索其顶层事务 ID,这需要访问 SLRU 缓存,一个由磁盘存储支持的简单 LRU 缓存。随着子事务溢出的快照的数量增加,并发的后端会抢占对 SLRU 缓存的访问,从而导致SubtransSLRU锁和相关的等待事件。此外,在存在长时间运行的事务时,PostgreSQL 需要为较老的子事务,沿着最近的子事务获取到父事务信息。这扩大了 xid 查找的范围,进一步限制了 SLRU 缓存,并导致频繁的磁盘页面加载和磁盘 I/O 操作,这正如SubtransBuffer等待事件所指示的那样。

您可以使用下面的查询,来观察 PostgreSQL 中的等待事件:

SELECT wait_event_type, wait_event
FROM pg_stat_activity
WHERE pid != pg_backend_pid();
来源:红石PG内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯