【DB吐槽大会】第60期 - PG 只读实例不支持写操作

简介: 大家好,这里是DB吐槽大会,第60期 - PG 只读实例不支持写操作

背景


1、产品的问题点

  • PG 只读实例不支持写操作

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

  • PG 通过流复制支持物理的standby节点, standby节点通过接收主库wal日志, 实时回放block增量, 实现同步.
  • 由于PG主库和从库物理一致, 所以这个standby节点是只读的, 不支持写操作. 例如不支持创建临时表, 不支持写unlogged table. 不支持写数据等.

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

  • 分析业务场景

4、会导致什么问题?

  • 分析业务通常计算量和IO的消耗量都很大, 所以一般会把分析逻辑放在standby库执行, 但是分析逻辑通常比较复杂, 例如把逻辑封装到函数中, 计算会有中间结果产生, 用中间结果再进行后续计算.
  • 因为standby库不支持写操作(包括写临时表), 使得中间结果没地方存放, 导致业务不得不放弃使用standby进行带中间结果的复杂逻辑分析.

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

  • 不将计算逻辑放到函数中, 而是通过业务的SQL调用来完成, 并且将中间结果写入到主库, 主库再同步到只读库, 同步完再进行下一步操作
  • 使用数组代替临时表存储中间结果.

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

  • 中间结果数据写入主库, 再同步有几个问题
  • 浪费主库存储资源
  • 浪费了3次传输中间结果的网络资源(读取、写入、同步)
  • 同步有延迟, 使得整个分析过程变长
  • 使用数组代替临时表的方案也有问题, 每个数组有1GB上限, 而且逻辑变得更复杂, 不适合新手, 门槛较高.

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

  • 希望只读实例能支持临时表的定义和写入, 可以考虑临时表的定义不放在pg_catalog, 如果要放在pg_catalog也可以(这个可以在主库操作, 同步到只读库, 元数据定义的量还是比较小的, 不过还要考虑统计信息等, 也会导致上下不一致, 可以考虑放弃stat或者使用本地化stat)
  • 希望最终统计结果可以写主库(也就是说写入操作自动路由到主库操作, 不需要通过业务导一次. 例如fdw借口?)
  • 《PostgreSQL readonly standby 只读库如何写数据? - DDL DML 操作透明传输到主库》



目录
打赏
0
0
0
0
35
分享
相关文章
PolarDB产品使用问题之现在已经有只读sql,如何修改格式
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
【DB吐槽大会】第38期 - PG 不能自动创建(扩展)分区
大家好,这里是DB吐槽大会,第38期 - PG 不能自动创建(扩展)分区
【DB吐槽大会】第44期 - PG 同步复制不支持自动升降级
大家好,这里是DB吐槽大会,第44期 - PG 同步复制不支持自动升降级
【DB吐槽大会】第75期 - PG 不支持索引失效功能
大家好,这里是DB吐槽大会,第75期 - PG 不支持索引失效功能
【DB吐槽大会】第54期 - PG 资源隔离、管理手段较少
大家好,这里是DB吐槽大会,第54期 - PG 资源隔离、管理手段较少
【DB吐槽大会】第67期 - PG 存储过程和函数内对自治事务支持不完整
大家好,这里是DB吐槽大会,第67期 - PG 存储过程和函数内对自治事务支持不完整
【DB吐槽大会】第35期 - “富人”的烦恼?PG 不会自动选择索引类型
大家好,这里是DB吐槽大会,第35期 - “富人”的烦恼?PG 不会自动选择索引类型
【DB吐槽大会】第33期 - PG 逻辑复制不支持DDL
大家好,这里是DB吐槽大会,第33期 - PG 逻辑复制不支持DDL
【DB吐槽大会】第16期 - PG Standby不支持解析逻辑日志
大家好,这里是DB吐槽大会,第16期 - PG Standby不支持解析逻辑日志
【DB吐槽大会】第37期 - PG 没有block级增量备份恢复
大家好,这里是DB吐槽大会,第37期 - PG 没有block级增量备份恢复
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等