背景
本文参考当前的release notes以及git, committe fest编写,10.0还没有正式release,部分内容在正式release时可能会修改,同时会新增新的内容。
迁移到10.0的注意事项
迁移时,请注意不兼容的地方。
1. 使用pg_upgrade升级时,hash index 需要重建。(因为10.0为了支持hash index WAL,存储结构改变了。)
2. $PGDATA/pg_log, pg_xlog, pg_clog目录分别重命名为log, pg_wal, pg_xact。
3. XLOG相关的系统管理函数重命名,xlog改为wal,例如
pg_switch_xlog() becomes pg_switch_wal(), pg_receivexlog becomes pg_receivewal, and --xlogdir becomes --waldir.
4. COALESCE 和 CASE 表达式支持SRF函数,当函数为SRF时,表达式返回多行。
5. plpython支持多维数组,对应Python 类型nested Python lists。
6. 并行查询相关GUC参数,新增两个参数min_parallel_table_scan_size , min_parallel_index_scan_size 代替min_parallel_relation_size。表示使用并行查询的表、索引的最小SIZE。
7. 不再支持浮点 datetimes/timestamps类型,编译项--disable-integer-datetimes去除。
8. 不再支持client/server protocol version 1.0 。
9. 不再支持contrib/tsearch2。
10. 不再支持version-0版本的c language function。
11. 注意增加了更安全的密码存储和认证策略,建议使用。
重大更新
1 服务端
并行查询
1. 支持并行 b-tree 索引扫描(允许多个并行工作进程扫描不同的b-tree page。)。
2. 支持并行 bitmap heap 扫描。
3. 支持并行 merge join(9.6只支持并行hash join)。
4. 支持并行 不相干子查询。
5. 支持并行 merge sort,例如包含多个分区表的排序查询,支持merge sort输出。
6. 内置函数梳理,可以并行的函数被标记为parallel-safe,否则标记为parallel-restricted。
7. 允许用户设置集群级的最大并行工作进程数量,通过GUC变量max_parallel_workers进行设置。建议max_parallel_workers < max_worker_processes,从而预留更多的worker process给其他需要工作进程的功能模块。
索引
1. SP-GiST索引新增对INET,CIDR网络类型的支持。
2. GIN索引垃圾回收优化,减少页锁范围。
3. brin索引优化,支持自动修正元信息。
《PostgreSQL 10.0 preview 功能增强 - BRIN 索引更新smooth化》
4. 使用BRIN索引是否能提升效率?决策将更加精准。
5. 通过有效的空间重用,GiST索引的插入和更新效率更高。
6. HASH索引支持WAL日志,意味着hash索引是crash safe并且也是支持流复制的了。
7. 优化hash索引bucket的分裂性能,降低锁需求。
8. hash索引的空间增长将更加有效。
9. 允许清理单个HASH页的垃圾。
锁
新增两个参数,max_pred_locks_per_relation 和 max_pred_locks_per_page 。 用于控制串行隔离级别的锁提升,降低内存开销。
《PostgreSQL 10.0 preview 功能增强 - 串行隔离级别 预加锁阈值可控》
优化器
1. 允许用户自定义统计信息,例如多个列的组合统计信息等。
《PostgreSQL 10.0 preview 功能增强 - 自由定义统计信息维度》
2. 加入JIT框架,OLAP类查询性能提升明显。
《PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)》
性能
1. 使用优化的numeric类型,提升SUM()聚合性能。
2. 使用radix index提升字符集转换性能。
《PostgreSQL 10.0 preview 性能提升 - radix tree提升字符编码转换性能》
3. 降低函数调用的overhead,当函数被多条记录调用(特别是OLAP场景)时,性能提升非常明显。
4. 提升grouping set(多维分析)性能。
5. 当外表是UNIQUE时,通过减少内表的扫描,提升hash join, nestloop join的性能。
《PostgreSQL 10.0 preview 性能增强 - hash,nestloop join优化(聪明的优化器是这样的)》
6. 降低在会话中跟踪relation统计信息的开销,特别是当一个会话曾经访问了多个对象(表、物化视图、索引等)时。
监控
1. 新增pg_sequence系统表,可以查看数据库中所有序列的元信息。方便了很多。
2. EXPLAIN语法增加SUMMARY选项,输出更详细的QUERY执行统计信息。
3. 刷新物化视图时,自动刷新物化视图的统计信息。
4. 添加4名监控角色: pg_monitor, pg_read_all_settings, pg_read_all_stats, pg_stat_scan_tables。 权限分配更细致了。
5. 新增两个管理函数,普通用户可以调用,pg_ls_logdir() , pg_ls_waldir() 输出数据库日志目录的所有文件,数据库WAL目录的所有文件。
6. 新增一个管理函数,pg_current_logfile() 返回当前正在写的log文件。
7. 启动时,报告socket监听端口,以及socket文件在哪里。
8. pg_stat_activity动态视图,新增一个等待事件latch wait的状态(状态包括remaining wait events, 例如 client reads, client writes, and synchronous replication)。
9. pg_stat_activity动态视图,新增reads, writes, fsyncs的等待状态。
10. pg_stat_activity动态视图,新增数据库管理进程、辅助进程、流复制进程的统计信息。通过backend_type字段区分。
11. pg_stat_activity动态视图,对于并行工作进程,QUERY列显示SQL信息。
https://www.postgresql.org/docs/devel/static/monitoring-stats.html
认证
1. 新增SCRAM-SHA-256密码认证协商机制与密码存储机制。提升安全性。用户在创建用户时选择密码存储方法,在pg_hba.conf中配置认证协商方法。
《PostgreSQL 10.0 preview 安全增强 - SASL认证方法 之 scram-sha-256 安全认证机制》
2. 新增pg_hba_file_rules视图,查看pg_hba.conf中的内容,也就是说以后DBA不需要登陆机器,就可以查看目前数据库防火墙的配置(注意目前显示的是pg_hba.conf的文件内容,而不是目前激活的配置)。
3. 支持多个RADIUS servers。
服务端配置
1. 允许在线更新SSL配置。通过pg_ctl , SELECT pg_reload_conf(), 或给postmaster进程发送SIGHUP 信号.
2. 降低修改表参数的DCL的锁粒度,例如修改表的effective_io_concurrency参数,只需要加载lwlock。
3. 将GUC变量bgwriter_lru_maxpages的最大上限设置为无限大,也就是说bgwriter可以在一个周期内,将所有的脏页写出去了。
可靠性
1. 在创建或者删除文件后,调用fsync。降低断电带来的风险。
2. 避免在空闲的系统中执行checkpoint和归档
3. 新增wal_consistency_checking参数,写入额外的FPW,standby在回放partial WAL时,对比FDW与拼装的PAGE是否一致。用于调试。
《PostgreSQL 10.0 preview 功能增强 - WAL一致性校验》
4. WAL 文件最大支持1GB。
2 流复制与恢复
1. 支持逻辑订阅
《PostgreSQL 10.0 preview 功能增强 - 逻辑订阅端worker数控制参数》
《PostgreSQL 逻辑订阅 - 给业务架构带来了什么希望?》
《PostgreSQL 10.0 preview 变化 - 逻辑复制pg_hba.conf变化,不再使用replication条目》
《PostgreSQL 10.0 preview 功能增强 - 备库支持逻辑订阅,订阅支持主备漂移了》
《PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据》
《PostgreSQL 10.0 preview 逻辑复制 - 原理与最佳实践》
2. 同步复制,支持quorum commit模式的任意副本。
《PostgreSQL 10.0 preview 安全增强 - 任意wal副本数,金融级高可用与可靠性并存需求》
4. 修改默认的wal_level, max_wal_senders, and max_replication_slots参数配置,流复制配置将更简单。
5. 通过pg_stat_replication新增的三个字段write_lag, flush_lag, and replay_lag,报告备库的时间度量延迟。
《PostgreSQL 10.0 preview 功能增强 - 流复制统计视图pg_stat_replication增强, 新增时间维度延迟评估》
6. 基于时间点的恢复(PITR),新增支持LSN作为恢复目标。(目前已支持 xid, 时间, target name, lsn四种目标)
7. 用户可以选择pg_stop_backup()是否等待所有归档结束。
8. 允许创建临时replication slot,会话结束后自动删除该slot,这些SLOT常用于初始的数据同步等需求,例如逻辑订阅的初始数据同步。
9. 提升hot standby replay性能,提高Access Exclusive locks的tracking效率。
10. 提升2PC事务的恢复效率。
3 QUERY
1. 添加XMLTABLE函数,可以将XML格式数据转换为多行的结果集。
2. UPDATE SET中允许使用ROW构造器或者table.*
,例如UPDATE ... SET (column_list) 。
3. 修正规则表达式的本土化BUG,允许大于U+7FF的字符使用正确的本土化设置。
4 DDL
1. 支持分区表语法,目前支持range和list分区,暂时不支持HASH分区。用户可以使用pg_pathman插件支持hash分区。
2. 支持statement after触发器中使用Transition table,提升性能。
《PostgreSQL 10.0 preview 功能增强 - 触发器函数内置中间表》
3. 安全增强,支持严格的行安全策略(restrictive row-level security policies)
4. 允许通过ALTER DEFAULT PRIVILEGES设置schema的默认权限。
5. 带有instead insert trigger的视图,支持COPY命令灌数据。
6. 当函数无参数时,使用DROP FUNCTION可以只提供函数名。
7. 允许在一条DROP命令中,删除多个操作符、函数。
8. vacuum verbose报告跳过了多少frozen pages 以及 oldest xmin。这些信息在日志中也会被记录下来。
9. 提升vacuum清除末端空页的性能。
5 数据类型
1. 全文检索支持JSON, JSONB类型,通过ts_headline和to_tsvector接口进行转换。
2. 支持EUI-64国际标准mac地址类型MACADDR8,macaddr为老的EUI-48标准。
3. 支持SQL标准的identity columns,实际上功能和SERIAL一致。自增序列。
4. 支持重命名枚举类型元素值。
6 函数
1. 新增regexp_match()函数,返回第一个匹配的串,简化使用。老的版本可以使用regexp_matches()达到同样目的(只是写法略复杂)。
2. jsonb类型,支持原子删除指定的KEYS,通过ARRAY提供KEYS进行删除。
3. 新增一个函数txid_current_ifassigned()用于获取当前已分配的事务号,如果未分配,返回NULL。之前txid_current()也有这个功能,但是如果未分配,txid_current会申请一个事务号并返回。所以txid_current不能在standby使用,而txid_current_ifassigned可以在standby使用。
4. 新增txid_status()函数,可以检查XID(事务)的状态,是否已提交。
5. 允许make_date()使用负的BC year值。
6. to_timestamp() , to_date() 将检测时间有效性,to_date('2009-06-40','YYYY-MM-DD')将报错,不再转换为'2009-07-10'。
7 服务端编程
1. 允许pl/python对象调用游标和执行动态SQL。
2. 允许将PL/pgSQL GET DIAGNOSTICS接收的信息输入ARRAY变量。
3. 移除服务端编程接口 SPI_push(), SPI_pop(), SPI_restore_connection() 。
4. 允许PL/Tcl函数返回复合类型和SRF。
5. PL/Tcl 支持子事务命令,如果子事务异常,不会回滚整个事务。
6. 添加PL/Tcl初始化参数,pl/tcl装载时,自动调用pltcl.start_proc , pltclu.start_proc设置的程序。
8 客户端接口
1. libpq支持配置多个主机名、端口。libpq自动连接到第一个正常响应的数据库。
2. libpq支持配置多个主机名、端口,并且允许配置每一对主机名端口的target_session_attrs,是否支持读写。
适合物理流复制,一主多备的读写分离场景。
3. libpq支持密码文件,不需要再连接中配置密码了,以往也可以通过设置环境变量实现。
4. ecpg的版本号更新,以后ECPG版本号将与PG的发布版本保持一致。
9 客户端应用程序
psql
1. psql 客户端支持\if, \elif, \else, \endif
用法。
2. psql 客户端 \set
将列出已设置的变量。
3. TAB 补齐功能增强。
10 服务端应用程序
1. pg_receivewal 流式WAL接收,支持流式压缩。option -Z/--compress
2. pg_recvlogical 流式逻辑复制客户端,支持指定开始位置和结束位置。 --startpos , --endpos
3. pg_restore 逻辑还原命令,支持排除schemas。 -N/--exclude-schema
4. pg_dump 逻辑备份命令,可以不备份大对象了。 --no-blobs
5. pg_dumpall 逻辑备份命令,可以不备份用户密码,这样的话普通用户也能调用pg_dumpall。 --no-role-passwords
6. pg_dump and pg_dumpall 默认备份完成后,对备份文件调用fsync落盘,通过--no-sync
关闭。
7. pg_basebackup 支持双流同时流式备份数据文件、WAL文件。支持tar模式。
8. pg_basebackup使用临时replication slots,会话结束自动清除SLOT。
9. pg_basebackup 自动跳过不需要备份的目录,跳过哪些目录参考文档。
10. pg_ctl 添加一个选项,是否等待备库激活完成。wait (--wait) and no-wait (--no-wait)
11 源码
1. 版本号规则变更,第一个数字表示major号,第二个数字表示minor号。不在使用第三个数字。
也就是说10之后,下一个版本是11。
2. 支持ICU国际化LIB库,避免GCC LIB库不通用的问题。
《PostgreSQL 10.0 preview 功能增强 - 国际化功能增强,支持ICU(International Components for Unicode)》 Automatically mark all PG_FUNCTION_INFO_V1 functions as DLLEXPORT-ed on Windows (Laurenz Albe)
3. 支持动态分配共享内存。
4. 在Linux, BSD系统中使用POSIX semaphores 代替 SysV semaphores,再也不用担心SYSV不够用了。
请参考,《PostgreSQL on Linux 最佳部署手册》
5. 支持slab-like内存分配器,分配固定大小内存更加有效。
6. 增强支持64-bit原子操作,支持ARM64 64bit原子操作。
7. 优先使用clock_gettime()获取时间,代替gettimeofday()。提升获取时间性能。
8. 支持更安全的随机数生成器,当使用cryptographic时。
9. 使用XSLT代替Jade, DSSSL, JadeTex生成PostgreSQL手册。
12 插件
1. file_fdw插件,允许从外部程序(例如shell程序)的标准输出摄取数据。
2. postgres_fdw插件,支持聚合操作下推,sharding更加完美。
3. postgres_fdw插件,允许FULL JOIN下推。
4. postgres_fdw插件,支持OID列。
5. btree_gist, btree_gin支持枚举、UUID类型。
6. amcheck插件,支持btree索引的DEBUG。
7. pg_stat_statements插件,使用$N代替?,表示变量占位符。
8. cube插件,增强0维数据的支持。
9. pg_buffercache插件,降低锁需求,减少冲突。
10. pgstattuple插件,添加pgstathashindex()函数接口,查看hash index统计信息。
11. pgstattuple插件,支持GRANT,普通用户可以调用pgstattuple插件。
12. pgstattuple插件,当检车hash索引时,降低锁需求。
13. pageinspect插件,新增page_checksum()接口,支持hash index page的检查,新增bt_page_items()接口打印b-tree索引的item信息。
小结
PostgreSQL 10,越来越像一个HTAP数据库了,quorum base多副本 \ sharding增强 \ 分布式事务 \ 逻辑订阅 \ JIT框架 \ 多核计算增强 \ 国际化增强 \ 客户端驱动balance 等。
其他文档
《PostgreSQL 10.0 preview 功能增强 - SQL执行剩余时间 - 垃圾回收过程可视pg_stat_progress_vacuum》
《PostgreSQL 10.0 preview 功能增强 - 逻辑订阅端worker数控制参数》
《PostgreSQL 10.0 preview 功能增强 - 串行隔离级别 预加锁阈值可控》
《PostgreSQL 10.0 preview 性能增强 - hash,nestloop join优化(聪明的优化器是这样的)》
《PostgreSQL 10.0 preview 性能增强 - 支持64bit atomic》
《PostgreSQL 10.0 preview 功能增强 - 增加ProcArrayGroupUpdate等待事件》
《PostgreSQL 10.0 preview 功能增强 - 更强可靠性, 过去式事务状态可查(杜绝unknown事务)》
《PostgreSQL 10.0 preview 性能提升 - radix tree提升字符编码转换性能》
《PostgreSQL 10.0 preview 变化 - pg_xlog,pg_clog,pg_log目录更名为pg_wal,pg_xact,log》
《PostgreSQL 10.0 preview 功能增强 - WAL一致性校验》
《PostgreSQL 10.0 preview 功能增强 - 增加access method CHECK接口amcheck》
《PostgreSQL 10.0 preview 功能增强 - libpq支持多主机连接(failover,LB)让数据库HA和应用配合更紧密》
《PostgreSQL 10.0 preview 变化 - 逻辑复制pg_hba.conf变化,不再使用replication条目》
《PostgreSQL 10.0 preview 功能增强 - BRIN 索引更新smooth化》
《PostgreSQL 10.0 preview 功能增强 - 触发器函数内置中间表》
《PostgreSQL 10.0 preview sharding增强 - 支持分布式事务》
《PostgreSQL 10.0 preview 功能增强 - 动态视图pg_stat_activity新增数据库管理进程信息》
《PostgreSQL 10.0 preview 性能增强 - hashed aggregation with grouping sets(多维分析)更快,更省内存》
《PostgreSQL 10.0 preview 功能增强 - 自由定义统计信息维度》
《PostgreSQL 10.0 preview 功能增强 - 国际化功能增强,支持ICU(International Components for Unicode)》
《PostgreSQL 10.0 preview 功能增强 - 支持分区表ON CONFLICT .. DO NOTHING》
《PostgreSQL 10.0 preview 性能增强 - 推出JIT开发框架(朝着HTAP迈进)》
《PostgreSQL 10.0 preview 功能增强 - 备库支持逻辑订阅,订阅支持主备漂移了》
《PostgreSQL 10.0 preview 性能增强 - GIN索引vacuum锁降低》
《PostgreSQL 10.0 preview 功能增强 - 流复制统计视图pg_stat_replication增强, 新增时间维度延迟评估》
《PostgreSQL 10.0 preview 功能增强 - CLOG oldest XID跟踪》
《PostgreSQL 10.0 preview 功能增强 - 逻辑复制支持并行COPY初始化数据》
《PostgreSQL 10.0 preview 性能增强 - Write Amplification Reduction Method (WARM)消除某些情况下的INDEX写放大》
《PostgreSQL 10.0 preview 功能增强 - 后台运行(pg_background)》
《PostgreSQL 10.0 preview 功能增强 - 回滚范围可精细控制(事务、语句级)》
《PostgreSQL 10.0 preview 功能增强 - 客户端ACL(pg_hba.conf动态视图)》
《PostgreSQL 10.0 preview 多核并行增强 - 控制集群并行度》
《PostgreSQL 10.0 preview 安全增强 - 任意wal副本数,金融级高可用与可靠性并存需求》
《PostgreSQL 10.0 preview 性能增强 - hash index metapage cache、高并发增强》
《PostgreSQL 10.0 preview 性能增强 - mergesort(Gather merge)》
《PostgreSQL 10.0 preview 多核并行增强 - 索引扫描、子查询、VACUUM、fdw/csp钩子》
《PostgreSQL 10.0 preview 性能增强 - CLOG group commit》
《PostgreSQL 10.0 preview 功能增强 - OLAP增强 向量聚集索引(列存储扩展)》
《PostgreSQL 10.0 preview 功能增强 - SQL:2016标准(之SQL/JSON) Oracle 12c兼容》
《PostgreSQL 10.0 preview 功能增强 - identify column (SQL标准:T174)》
《PostgreSQL 10.0 preview 功能增强 - 分区表(list default)》
《PostgreSQL 10.0 preview 功能增强 - 分区表(hash,range,list)》
《PostgreSQL 10.0 preview 功能增强 - 支持EUI-64格式MAC地址类型》
《PostgreSQL 10.0 preview 功能增强 - JSON 内容全文检索》
《PostgreSQL 10.0 preview 功能增强 - 唯一约束+附加字段组合功能索引》
《PostgreSQL 10.0 preview 功能增强 - 匿名、自治事务(Oracle 兼容性)(background session)》
《PostgreSQL 10.0 preview 性能增强 - 间接索引(secondary index)》
《PostgreSQL 10.0 preview sharding增强 - pushdown 增强》
《PostgreSQL 10.0 preview 功能增强 - slave提前苏醒》
《PostgreSQL 10.0 preview 功能增强 - slave支持WAITLSN 'lsn', time;用于设置安全replay栅栏》
《PostgreSQL 10.0 preview 功能增强 - hash index 支持wal(灾难恢复)》
《PostgreSQL 10.0 preview 性能增强 - 分区表子表元信息搜索性能增强》
《PostgreSQL 10.0 preview 性能增强 - libpq支持pipeline batch模式减少网络交互提升性能》
《PostgreSQL 10.0 preview 性能增强 - OLAP提速框架, Faster Expression Evaluation Framework(含JIT)》
《PostgreSQL 10.0 preview 性能增强 - pg_xact align(cacheline对齐)》
《PostgreSQL 10.0 preview 流复制增强 - 支持可配置的wal send max size》
《PostgreSQL 10.0 preview sharding增强 - 支持Append节点并行》
《PostgreSQL 10.0 preview 优化器改进 - 不完整索引支持复合排序》
《PostgreSQL 10.0 preview 性能增强 - 2PC事务恢复阶段性能提升》
《PostgreSQL 10.0 preview 多核并行增强 - 并行hash join支持shared hashdata, 节约哈希表内存提高效率》
《PostgreSQL 10.0 preview sharding增强 - postgres_fdw 多节点异步并行执行》
《PostgreSQL 10.0 preview 功能增强 - 自动预热shared buffer (auto prewarm)》
《PostgreSQL 10.0 preview 多核并行增强 - tuplesort 多核并行创建索引》
《PostgreSQL 10.0 preview 功能增强 - QUERY进度显示》
《PostgreSQL 10.0 preview 功能增强 - 角色化权限管理 - 新增几个内置角色(统计信息查看、管理用户会话)》
《PostgreSQL 10.0 preview 功能增强 - 新增数十个IO等待事件监控》
《PostgreSQL 10.0 preview 主动防御 - 可配置是否允许执行不带where条件的update\delete》
《PostgreSQL 10.0 preview 安全增强 - SASL认证方法 之 scram-sha-256 安全认证机制》
《PostgreSQL 10.0 preview 逻辑复制 - 原理与最佳实践》
《PostgreSQL 10.0 preview 流复制增强 - 流式接收端在线压缩redo》
《PostgreSQL 10.0 preview - 截至2017元旦装备了哪些核武器》
《PostgreSQL 10.0 preview 功能增强 - 内置分区表》
参考
https://www.postgresql.org/docs/devel/static/release-10.html