AI智能总结
CONTENTS 查询优化器的改进01. 逻辑复制的增强02. 其他一些感兴趣的点03. 查询优化器的改进-聚合的效率提升 来源:https://www.citusdata.com/blog/2024/02/08/whats-new-in-postgres-16-query-planner-optimizer/#distinct-queries 查询优化器的改进-支持Right Anti Join 开始支持Right Anti Join,会自动以较小的表构造hash表 CREATE TABLE small(a int);CREATE TABLE large(a int);INSERT INTO smallSELECT a FROM generate_series(1,100) a;INSERT INTO largeSELECT a FROM generate_series(1,1000000) a; 15及之前版本 16版本 来源:https://www.citusdata.com/blog/2024/02/08/whats-new-in-postgres-16-query-planner-optimizer/#distinct-queries 查询优化器的改进-并行full和right连接 开始支持Right Anti Join,会自动以较小的表构造hash表 CREATE TABLE odd (a INT);CREATE TABLE even (a INT);INSERT INTO oddSELECT a FROM generate_series(1,1000000,2) a;INSERT INTO evenSELECT a FROM generate_series(2,1000000,2) a; 15及之前版本 逻辑复制的增强-standby节点逻辑复制 数据下游可以通过备节点订阅数据修改从而降低主库的工作负载。 逻辑复制的增强-standby节点逻辑复制 standby节点逻辑复制配置 1 主库创建流复制和逻辑复制用户 2 搭建流复制备库,指定一些参数 3 4 数据下游创建订阅,将订阅地址指向备库 逻辑复制的增强-双向逻辑复制 双向复制可以扩展主库的访问能力,对于写入密集型的应用更加友好。 逻辑复制的增强-双向逻辑复制避免回环 通过在订阅者上设置origin=none标志,发布者会只向订阅者发送那些没有包含origin messages的WAL记录,而不会发送本地的订阅者接收到的记录,从而避免数据回环。 逻辑复制的增强-双向逻辑复制 双向逻辑复制配置 1 两个主库创建逻辑复制用户 2 两个主库分别创建发布 3 两个主库分别互相订阅对方(设置origin=none) 其他一些感兴趣的点-pg_dump的增强 pg_dump增强 对子表和分区表的支持 增加新的压缩方式 pg_dump添加了导出子表和分区的功能 pg_dump的-Z选项新增了lz4和zstd压缩算法,压缩效率得到了提升 增加压缩long模式支持 增加更多的压缩级别 pg_dump可以拥有更多的压缩级别级别越高,压缩比越高,但是可能也更耗时和占用更多资源 long可以提高压缩比,但代价是增加了内存使用 其他一些感兴趣的点-direct_io(开发特性) 目前的问题:操作系统page cache和数据库buffer pool双缓存,存在一定的内存浪费 开始支持dio,参数debug_io_direct-wal_init:新建wal文件时使用direct io-wal:读写wal文件时使用directio-data:读写数据文件时使用directio pgbench测试(1000万数据) 其他一些感兴趣的点-pg_stat_io 跟踪给定后端类型、I/O对象类型(即是否为临时表)和I/O上下文的统计信息。 主要统计数据是计算I/O操作:读、写和扩展。 对于每个I/O操作,以字节为单位的大小,以帮助解释统计信息。 此外,还会跟踪共享缓冲区移出、环形缓冲区重新使用和fsync调用的数量。 THANKS www.postgresqlchina.comSpeaker name and title