PostgreSQL 10 是一款功能丰富的开源关系型数据库管理系统,它在多个方面进行了重要的改进和优化,以更好地适应现代工作负载和数据管理的需求。
系统性能与并行查询
并行查询增强:
- PostgreSQL 10 显著增强了并行查询的能力,支持更多的操作并行化,包括并行索引扫描、并行位图扫描、并行哈希连接(Hash Joins)和并行归并连接(Merge Joins)。这些改进使得在处理大数据集时能够更快地返回结果。
- 引入了一个新的参数
max_parallel_workers
,用于控制整个集群允许开启的用于多核计算的Worker进程数量,从而优化并行查询的性能。
JIT编译支持:
- PostgreSQL 10 开始为即时(Just-In-Time, JIT)编译做铺垫,改变了SQL执行的框架,从递归调用方式改为非递归的opcode驱动模式。这种改变降低了栈使用和开销,并允许在不同的子表达式之间共享状态,提升了查询性能。
表分区与数据管理
内置分区表:
- PostgreSQL 10 引入了内置分区表的功能,支持范围(RANGE)和列表(LIST)分区,减少了分区表的创建和维护工作量。用户无需再手动编写复杂的分区规则和触发器。
- 分区表不支持全局索引,因此无法实现全局的唯一约束;更新数据时不能导致数据跨区移动,否则会报错;修改主表的字段名、字段类型时,会自动同时修改所有的分区。
逻辑复制:
- PostgreSQL 10 增加了逻辑复制功能,这是一种发布/订阅(publish/subscribe)框架,用于分发数据的更改。逻辑复制可以细粒度地将数据变化发送到不同的数据库集群,甚至在大版本升级期间实现零停机。
安全性与认证
SCRAM-SHA-256 安全认证机制:
- PostgreSQL 10 引入了基于SCRAM-SHA-256的安全认证方法,提供了比基于MD5加密算法更好的安全性。SCRAM机制基于RFC文档5802和7677实现,可以避免因数据库存储的加密密钥泄露导致客户端篡改认证协议连接数据库的危险。
防止执行不带条件的更新/删除:
- PostgreSQL 10 提供了一个参数来防止执行不带条件的更新(UPDATE)或删除(DELETE)操作,这有助于防止SQL注入或误操作导致的数据损坏。
易用性与管理
查看清理进度:
- PostgreSQL 10 增加了对Vacuum的可视化监控,提供了动态视图
pg_stat_progress_vacuum
,用于显示每个vacuum worker进程扫描和回收的页面数,从而可以估计清理的进度。
后台运行支持:
- PostgreSQL 10 增加了对后台运行的支持,提供了三个SQL函数:
pg_background_launch
、pg_background_result
和pg_background_detach
,允许用户在后台执行SQL语句并管理这些后台进程。
新增内置角色和管理函数:
- PostgreSQL 10 植入了一些内置的角色,如
pg_backend_pid
、pg_monitor
、pg_read_all_gucs
等,用于更方便地进行权限分组管理。
新增了多个管理函数,如 pg_ls_logdir()
、pg_ls_waldir()
和 pg_current_logfile()
,用于输出数据库日志目录和WAL目录的文件信息。
其他功能特点
- 流式接收端在线压缩WAL:PostgreSQL 10 中的
pg_receivexlog
支持对WAL日志进行在线压缩,可以通过开关控制是否需要开启压缩以及选择压缩级别。 - 间接索引和不完全索引支持:PostgreSQL 10 引入了间接索引的概念,并允许使用不完全索引来支持复合排序,提高了索引的灵活性和效率。
- 自动预热共享缓存:PostgreSQL 10 增加了自动预热共享缓存的技术,可以在系统重启时快速恢复缓存状态,提升系统启动后的性能。