提高 PostgreSQL 插入效能的 5 個技巧

banq發表於2024-05-21

推薦這五種最佳實踐,以提高虛構 PostgreSQL 的插入效能:

1.適度使用索引
擁有正確的索引可以加快查詢速度,但它們並不是靈丹妙藥。為每條新記錄增量維護索引需要額外的工作。檢查你在表上定義的索引數量(使用 psql 命令 \d table_name),並確定它們的潛在查詢優勢是否大於儲存和插入開銷。由於每個系統都不盡相同,因此沒有任何硬性規定或索引的 "神奇數量",只要合理即可。

2.重新考慮外來鍵約束
有時,有必要建立從一個表到其他關係表的外來鍵(FK)。有外來鍵約束時,每次 INSERT 通常都需要從引用表中讀取資料,這會降低效能。考慮對資料進行去規範化處理--我們有時會看到,出於 "優雅 "的考慮而非工程上的權衡,FK 約束的使用非常極端。

3.避免不必要的 UNIQUE 鍵
開發人員經常被訓練在資料庫表中指定主鍵,許多 ORM 也喜歡主鍵。然而,許多用例(包括常見的監控或時間序列應用)並不需要主鍵,因為每個事件或感測器讀數都可以作為單獨的事件記錄下來,只需在寫入時將其插入 hypertable 當前資料塊的尾部即可。

如果另外定義了 UNIQUE 約束,插入時就必須查詢索引,以確定記錄是否已經存在,這將對 INSERT 的速度產生不利影響。

4.為 WAL 和資料使用不同的磁碟
雖然這是一種更高階的最佳化,並不總是需要,但如果磁碟成為瓶頸,可以透過為資料庫的 WAL 和資料使用單獨的磁碟(表空間)來進一步提高吞吐量。

5.使用效能良好的磁碟
有時,開發人員會在磁碟速度較慢的環境中部署資料庫,這可能是由於硬碟效能較差、遠端儲存區域網路(SAN)或其他型別的配置造成的。由於插入行時,資料會在事務完成前持久地儲存在 WAL 中,因此磁碟速度慢會影響插入效能。要做的一件事就是使用 ioping 命令檢查磁碟 IOPS:
讀測試:
ioping -q -c 10 -s 8k .
寫測試:
ioping -q -c 10 -s 8k -W .

 

相關文章