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

简介: 大家好,这里是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版本.



相关实践学习
通过日志服务实现云资源OSS的安全审计
本实验介绍如何通过日志服务实现云资源OSS的安全审计。
相关文章
|
12月前
|
存储 Java 文件存储
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— logback.xml 配置文件解析
本文解析了 `logback.xml` 配置文件的详细内容,包括日志输出格式、存储路径、控制台输出及日志级别等关键配置。通过定义 `LOG_PATTERN` 和 `FILE_PATH`,设置日志格式与存储路径;利用 `<appender>` 节点配置控制台和文件输出,支持日志滚动策略(如文件大小限制和保存时长);最后通过 `<logger>` 和 `<root>` 定义日志级别与输出方式。此配置适用于精细化管理日志输出,满足不同场景需求。
2795 1
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
11月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
12月前
|
监控 Java 应用服务中间件
Tomcat log日志解析
理解和解析Tomcat日志文件对于诊断和解决Web应用中的问题至关重要。通过分析 `catalina.out`、`localhost.log`、`localhost_access_log.*.txt`、`manager.log`和 `host-manager.log`等日志文件,可以快速定位和解决问题,确保Tomcat服务器的稳定运行。掌握这些日志解析技巧,可以显著提高运维和开发效率。
1315 13
|
12月前
|
监控 Shell Linux
Android调试终极指南:ADB安装+多设备连接+ANR日志抓取全流程解析,覆盖环境变量配置/多设备调试/ANR日志分析全流程,附Win/Mac/Linux三平台解决方案
ADB(Android Debug Bridge)是安卓开发中的重要工具,用于连接电脑与安卓设备,实现文件传输、应用管理、日志抓取等功能。本文介绍了 ADB 的基本概念、安装配置及常用命令。包括:1) 基本命令如 `adb version` 和 `adb devices`;2) 权限操作如 `adb root` 和 `adb shell`;3) APK 操作如安装、卸载应用;4) 文件传输如 `adb push` 和 `adb pull`;5) 日志记录如 `adb logcat`;6) 系统信息获取如屏幕截图和录屏。通过这些功能,用户可高效调试和管理安卓设备。
|
人工智能 运维 监控
一招高效解析 Access Log,轻松应对泼天流量
一招高效解析 Access Log,轻松应对泼天流量
218 0
一招高效解析 Access Log,轻松应对泼天流量
|
XML JSON Java
Java中Log级别和解析
日志级别定义了日志信息的重要程度,从低到高依次为:TRACE(详细调试)、DEBUG(开发调试)、INFO(一般信息)、WARN(潜在问题)、ERROR(错误信息)和FATAL(严重错误)。开发人员可根据需要设置不同的日志级别,以控制日志输出量,避免影响性能或干扰问题排查。日志框架如Log4j 2由Logger、Appender和Layout组成,通过配置文件指定日志级别、输出目标和格式。
|
Java 开发者 Spring
Spring AOP深度解析:探秘动态代理与增强逻辑
Spring框架中的AOP(Aspect-Oriented Programming,面向切面编程)功能为开发者提供了一种强大的工具,用以将横切关注点(如日志、事务管理等)与业务逻辑分离。本文将深入探讨Spring AOP的底层原理,包括动态代理机制和增强逻辑的实现。
319 4
|
存储 监控 安全
深入解析Sysmon日志:增强网络安全与威胁应对的关键一环
在不断演进的网络安全领域中,保持对威胁的及时了解至关重要。Sysmon日志在这方面发挥了至关重要的作用,通过提供有价值的见解,使组织能够加强其安全姿态。Windows在企业环境中是主导的操作系统,因此深入了解Windows事件日志、它们的独特特性和局限性,并通过Sysmon进行增强,变得至关重要。
444 1
|
搜索推荐 索引
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理(二)
【初阶数据结构】深度解析七大常见排序|掌握底层逻辑与原理
226 4

热门文章

最新文章

推荐镜像

更多
  • DNS