PostgreSQL 10.0 解讀
背景
本文參考當前的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
最後更新:2017-05-09 20:31:43