【DB吐槽大会】第16期 - PG Standby不支持解析逻辑日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
简介: 大家好,这里是DB吐槽大会,第16期 - PG Standby不支持解析逻辑日志

背景


1、产品的问题点

  • PG 物理Standby节点不支持解析逻辑日志

2、问题点背后涉及的技术原理

  • 解析逻辑日志需要记录解析的WAL日志LSN位点(通过slot功能实现), 以便实例重启或解析任务重启后实现断点续传, 但是物理Standby节点是RO模式, 不支持写入(slot lsn位点记录), 因此Standby节点不支持解析逻辑日志.
  • 另一方面, 为了解析逻辑日志, 需要保留catalog的旧版本, 用于读取对应WAL record对应数据库对象(例如table)当时对应的数据结构, 从而解析出WAL record的逻辑数据. 而这个动作需要与VACUUM垃圾回收联动, 防止vacuum把catalog的旧版本清理掉(例如数据库发生DDL(如修改了表结构), 会导致catalog的版本发生变化, 老的catalog记录就变成旧版本, 旧版本可能被vacuum垃圾回收)

3、这个问题将影响哪些行业以及业务场景

  • 有较多逻辑增量同步的场景
  • 有跨城市进行逻辑增量同步的场景

4、会导致什么问题?

  • 每个逻辑增量解析链路都有1个进程负责, 当有较多逻辑增量同步链路时, 如果主节点的写操作较为频繁, 产生的WAL日志较多, 那么解析逻辑日志的CPU、IO压力也会较大, 影响主实例.
  • 当有跨城市逻辑增量复制的需求时, 由于逻辑增量日志需要在事务结束时才能解析(为了保证原子性), 然后发送给下游, 容易产生较大延迟, 一般高于物理流复制的延迟.


原子性:

postgres=# SELECT * FROM pg_logical_slot_get_changes('test_slot', NULL, NULL, 'include-xids', '0');

  lsn     | xid |                       data

-----------+-----+--------------------------------------------------

0/16D30F8 | 691 | BEGIN

0/16D32A0 | 691 | table public.data: INSERT: id[int4]:2 data[text]:'arg'

0/16D32A0 | 691 | table public.data: INSERT: id[int4]:3 data[text]:'demo'

0/16D32A0 | 691 | COMMIT

0/16D32D8 | 692 | BEGIN

0/16D3398 | 692 | table public.data: DELETE: id[int4]:2

0/16D3398 | 692 | table public.data: DELETE: id[int4]:3

0/16D3398 | 692 | COMMIT

(8 rows)

5、业务上应该如何避免这个坑

  • 暂时无解

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

7、数据库未来产品迭代如何修复这个坑

  • 内核层支持standby slot, 通过feedback反馈给主库保留对应的catalog版本.



相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
1月前
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
43 4
|
2月前
|
存储 监控 安全
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
|
2月前
|
搜索推荐 索引
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理(二)
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理
|
2月前
|
搜索推荐 C++
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理(一)
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理
|
2月前
【初阶数据结构】深入解析队列:探索底层逻辑
【初阶数据结构】深入解析队列:探索底层逻辑
|
2月前
|
存储
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)(一)
【初阶数据结构】深入解析单链表:探索底层逻辑(无头单向非循环链表)
|
2月前
|
存储 关系型数据库 MySQL
MySQL中的Redo Log、Undo Log和Binlog:深入解析
【10月更文挑战第21天】在数据库管理系统中,日志是保障数据一致性和完整性的关键机制。MySQL作为一种广泛使用的关系型数据库管理系统,提供了多种日志类型来满足不同的需求。本文将详细介绍MySQL中的Redo Log、Undo Log和Binlog,从背景、业务场景、功能、底层实现原理、使用措施等方面进行详细分析,并通过Java代码示例展示如何与这些日志进行交互。
242 0
|
3月前
|
存储 缓存 关系型数据库
redo log 原理解析
redo log 原理解析
57 0
redo log 原理解析
|
2月前
|
人工智能 搜索推荐 算法
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理(三)
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理
|
2月前
|
存储
【初阶数据结构】深入解析循环队列:探索底层逻辑
【初阶数据结构】深入解析循环队列:探索底层逻辑

推荐镜像

更多