共計 2151 個字符,預計需要花費 6 分鐘才能閱讀完成。
這篇文章主要介紹了 PostgreSQL 10 的新亮點有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓丸趣 TV 小編帶著大家一起了解一下。
前段時間新的重大版本的 PostgreSQL 10 發布了! 強烈建議閱讀公告、發布說明和“新功能”概述可以在這里、這里和這里。像往常一樣,已經有相當多的博客覆蓋了所有新的東西,但我猜每個人都有自己認為重要的角度,所以與 9.6 版一樣我再次在這里列出我印象中最有趣 / 相關的功能。
與往常一樣,升級或初始化一個新集群的用戶將獲得更好的性能(例如,更好的并行索引掃描、合并 join 和不相關的子查詢,更快的聚合、遠程服務器上更加智能的 join 和聚合),這些都開箱即用,但本文中我想講一些不能開箱即用,實際上你需要采取一些步驟才能從中獲益的內容。下面重點展示的功能是從 DBA 的角度來匯編的,很快也有一篇文章從開發者的角度講述更改。
升級注意事項
首先有些從現有設置升級的提示 – 有一些小的事情會導致從 9.6 或更舊的版本遷移時引起問題,所以在真正的升級之前,一定要在單獨的副本上測試升級,并遍歷發行說明中所有可能的問題。最值得注意的缺陷是:
所有包含“xlog”的函數都被重命名為使用“wal”而不是“xlog”。
后一個命名可能與正常的服務器日志混淆,因此這是一個“以防萬一”的更改。如果使用任何第三方備份 / 復制 /HA 工具,請檢查它們是否為 *** 版本。
存放服務器日志 (錯誤消息 / 警告等) 的 pg_log 文件夾已重命名為“log”。
確保驗證你的日志解析或 grep 腳本 (如果有) 可以工作。
默認情況下,查詢將最多使用 2 個后臺進程。
如果在 CPU 數量較少的機器上在 postgresql.conf 設置中使用默認值 10,則可能會看到資源使用率峰值,因為默認情況下并行處理已啟用 – 這是一件好事,因為它應該意味著更快的查詢。如果需要舊的行為,請將 max_parallel_workers_per_gather 設置為 0。
默認情況下,本地主機的復制連接已啟用。
為了簡化測試等工作,本地主機和本地 Unix 套接字復制連接現在在 pg_hba.conf 中以“信任 trust”模式啟用(無密碼)! 因此,如果其他非 DBA 用戶也可以訪問真實的生產計算機,請確保更改配置。
從 DBA 的角度來看我的 ***
邏輯復制
這個期待已久的功能在你只想要復制一張單獨的表、部分表或者所有表時只需要簡單的設置而性能損失最小,這也意味著之后主要版本可以零停機升級! 歷史上(需要 Postgres 9.4+),這可以通過使用第三方擴展或緩慢的基于觸發器的解決方案來實現。對我而言這是 10 *** 的功能。
聲明分區
以前管理分區的方法通過繼承并創建觸發器來把插入操作重新路由到正確的表中,這一點很煩人,更不用說性能的影響了。目前支持的是“range”和“list” 分區方案。如果有人在某些數據庫引擎中缺少“哈希”分區,則可以使用帶表達式的“list”分區來實現相同的功能。
可用的哈希索引
哈希索引現在是 WAL 記錄的,因此是崩潰安全的,并獲得了一些性能改進,對于簡單的搜索,它們比在更大的數據上的標準 B 樹索引快。也支持更大的索引大小。
跨列優化器統計
這樣的統計數據需要在一組表的列上手動創建,以指出這些值實際上是以某種方式相互依賴的。這將能夠應對計劃器認為返回的數據很少 (概率的乘積通常會產生非常小的數字) 從而導致在大量數據下性能不好的的慢查詢問題(例如選擇“嵌套循環” join)。
副本上的并行快照
現在可以在 pg_dump 中使用多個進程 (-jobs 標志) 來極大地加快備用服務器上的備份。
更好地調整并行處理 worker 的行為
參考 max_parallel_workers 和 min_parallel_table_scan_size/min_parallel_index_scan_size 參數。我建議增加一點后兩者的默認值(8MB、512KB)。
新的內置監控角色,便于工具使用
新的角色 pg_monitor、pg_read_all_settings、pg_read_all_stats 和 pg_stat_scan_tables 能更容易進行各種監控任務 – 以前必須使用超級用戶帳戶或一些 SECURITY DEFINER 包裝函數。
用于更安全的副本生成的臨時 (每個會話) 復制槽
用于檢查 B 樹索引的有效性的一個新的 Contrib 擴展
這兩個智能檢查發現結構不一致和頁面級校驗未覆蓋的內容。希望不久的將來能更加深入。
Psql 查詢工具現在支持基本分支(if/elif/else)
例如下面的將啟用具有特定版本分支 (對 pg_stat* 視圖等有不同列名) 的單個維護 / 監視腳本,而不是許多版本特定的腳本。
SELECT :VERSION_NAME = 10.0 AS is_v10 \gset \if :is_v10 SELECT yippee AS msg; \else SELECT time to upgrade! AS msg; \endif
感謝你能夠認真閱讀完這篇文章,希望丸趣 TV 小編分享的“PostgreSQL 10 的新亮點有哪些”這篇文章對大家有幫助,同時也希望大家多多支持丸趣 TV,關注丸趣 TV 行業資訊頻道,更多相關知識等著你來學習!