PostgreSQL 11:分區從 Postgres 9.6 到 Postgres 11 的演變

祝大家星期五愉快!距離課程開始的時間越來越少 《關係型資料庫管理系統》,所以今天我們分享另一個關於該主題的有用材料的翻譯。

處於開發階段 PostgreSQL 11 在改進表分區方面已經做了一些令人印象深刻的工作。 分區表 - 這是一個在 PostgreSQL 中存在了相當長一段時間的函數,但是可以說,直到版本 10 之前它基本上不存在,在版本 XNUMX 中它成為一個非常有用的函數。我們之前說過表繼承是我們分區的實現,這是事實。只有這種方法迫使您手動完成大部分工作。例如,如果您希望在 INSERT 期間將元組插入到節中,則必須配置觸發器來為您執行此操作。透過繼承進行分區非常緩慢且難以在其上開發附加功能。

在 PostgreSQL 10 中,我們看到了「聲明式分區」的誕生,該功能旨在解決許多使用舊的繼承方法無法解決的問題。這導致了一個更強大的工具,使我們能夠水平分割資料!

特性比較

PostgreSQL 11 引入了一組令人印象深刻的新功能,有助於提高效能並使分區表對應用程式更加透明。

PostgreSQL 11:分區從 Postgres 9.6 到 Postgres 11 的演變
PostgreSQL 11:分區從 Postgres 9.6 到 Postgres 11 的演變
PostgreSQL 11:分區從 Postgres 9.6 到 Postgres 11 的演變
1. 使用限制性例外
2.僅新增節點
3. 僅適用於引用非分區表的分區表
4.索引必須包含分區的所有鍵列
5. 兩側的截面限制必須匹配

Производительность

我們這裡也有好消息!新增了新方法 刪除部分。這種新演算法可以透過查看查詢條件來確定合適的部分 WHERE。先前的演算法依序檢查每個部分以確定是否滿足條件 WHERE。隨著部分數量的增加,規劃時間也隨之增加。

在 9.6 中,透過繼承進行分區,將元組路由到分區通常是透過編寫觸發器函數來完成的,該函數包含一系列 IF 語句以將元組插入到正確的分區中。這些函數的執行速度可能非常慢。透過在版本 10 中新增聲明性分割區,此操作速度更快。

使用具有 100 個分區的分區表,我們可以評估將 10 萬行載入到具有 1 個 BIGINT 列和 5 個 INT 列的表中的效能。

PostgreSQL 11:分區從 Postgres 9.6 到 Postgres 11 的演變

查詢該表以尋找一條索引記錄並執行 DML 操作一筆記錄的效能(僅使用 1 個處理器):

PostgreSQL 11:分區從 Postgres 9.6 到 Postgres 11 的演變

這裡我們可以看到自PG 9.6以來各個操作的效能都有了顯著的提升。要求 SELECT 看起來好多了,尤其是那些能夠在查詢規劃期間排除多個分區的分區。這意味著調度程序可以跳過很多它之前應該完成的工作。例如,不再為不必要的部分建立路徑。

結論

表格分區開始成為 PostgreSQL 中非常強大的功能。 它允許您快速在線顯示數據並將其離線,而無需等待緩慢、大量的 DML 操作完成。。這也意味著相關資料可以儲存在一起,這意味著可以更有效地存取您需要的資料。如果沒有開發人員、審查者和提交者在所有這些功能上的不懈努力,這個版本中所做的改進是不可能實現的。
感謝他們所有人! PostgreSQL 11 看起來棒極了!

這是一篇簡短但非常有趣的文章。分享您的評論,別忘了註冊 開放日,其中將詳細概述課程計劃。

來源: www.habr.com

添加評論