【阿里云RDS for PostgreSQL在PostgreSQL功能和性能改进】
本次分享主要探讨了阿里云RDS for PostgreSQL在功能和性能方面所做的改进,特别是在2018年PostgreSQL中国技术大会上,由曾文旌先生详细阐述的议题。这些改进旨在解决大规模数据库在物理备份、高并发场景下的挑战以及用户体验优化。
对于物理备份,传统的`pg_basebackup`方法在大规格(如6TB以上)和高压力环境下存在诸多问题。备份时间过长,可能导致CPU和数据库压力增大,同时备份过程中的WAL(Write-Ahead Log)可能在备份完成前被重用,导致丢失。此外,备份过程会占用IO、网络和CPU资源,影响正常业务运行。为了解决这些问题,阿里云RDS团队提出了新的备份策略。
新的备份方案是在standby节点上进行,利用standby的I/O和CPU资源,减轻主库的负担。通过多线程实现并行压缩,减少CPU瓶颈,并建立WAL缓存,结合内存和磁盘存储,确保WAL在主节点写数据文件的间隙被完整地写入tar流。同时,采用流式上传OSS(Object Storage Service),进一步提升效率。新方案还调整了相关内核参数,如`wal_keep_segments`、`wal_sender_timeout`、`backup.xlog_cache_size`和`backup.parallel_compression`,以优化备份流程。
实践证明,新备份方案极大地降低了备份失败率,压力测试显示,随着数据量和并行度的增加,备份时间得到了显著改善。例如,对于4.1TB的数据,设置3000个`wal_keep_segments`时,备份时间从11小时减少到11.5小时,表明并行压缩和内存缓存对提高备份效率有显著作用。
然而,除了备份问题,阿里云RDS在处理高并发场景时也面临挑战。用户反馈在设置大型连接池时,业务高峰期性能下降;热点表更新(如抢购场景)时出现性能瓶颈;以及大量并发的统计型查询导致CPU资源耗尽。
针对这些问题,解决方案集中在优化PostgreSQL内核。通过控制不同类型SQL的并发数量,如将统计型SQL(OLAP)和事务型业务(OLTP)分入不同队列,减少进程上下文切换的代价。同时,对热点更新的部分表,通过内部锁管理和事务可见性判断的优化,降低冲突和复杂度,以应对高并发场景。
阿里云RDS for PostgreSQL通过技术创新和内核优化,提升了在大规模数据库、高并发和复杂业务场景下的性能和可用性,为用户提供更稳定、高效的云数据库服务。