今天看到PG郵件列表裏有非易失性內存在PG應用的討論,做下記錄,接着學習其補丁,如何將WAL buffer改造成非易失性buffer,以及和之前有和區別。該補丁是也是日本NTT公司提供。
一、原文
https://www.postgresql.org/message-id/[email protected]_1
二、Non-volatile WAL BUFFER
提出了一個概念證明的新特性:“非易失WAL buffer”。通過將非易失內存(PMEM)替代DRAM,不需要將WAL記錄寫入WAL段文件即可將其持久化。減少了WAL拷貝和write事務的時間,從而提升數據庫性能。
完成此功能的補丁基於PG12(refs/tags/REL_12_0),附在後文。閱讀README.nvwal(patch 0003)瞭解如何使用該特性。
PMEM[1]可插到DIMM槽,具有快速、非易失、字節尋址的特性。已生產有該特性的產品。NVDIMM-N是PMEM模塊的一種,包含DRAM和NAND flash,可以像訪問DRAM一樣訪問NVDIMM-N。斷點時,將內容寫到flash域。加電重啓時將flash內容重新拷貝回去即DRAM。大多數操作系統linux和windows都支持PMEM和持久內存開發集(PMDK)[2]。未來數據庫管理系統也將支持PMEM。
PMEM比SSD更快,原生支持作爲塊存儲使用。但是傳統的軟件棧並不能將其紅利充分發揮出來,比如用戶buffers、文件系統和塊層。非易失WAL buffer使PG適配PMEM,即像訪問RAM一樣直接訪問PMEM,獲得最大的效益。PG現有WAL buffer機制是針對慢速存儲設備HDD、SSD設計的,所以WAL是適配PMEM重新設計數據庫的重要的一個模塊。
我們的靈感來自2016年的PGCon大會提出的“Non--volatile Memory Logging”[3],比我和Yoshimi之前工作[4][5]更具效率。我在今年的PGCon大會上提交了一個議題,評估分析非易失WAL buffer的性能。如果該議題被接收,我將在大會上和大家討論該議題。
[1] Persistent Memory (SNIA)
https://www.snia.org/PM
[2] Persistent Memory Development Kit (pmem.io)
https://pmem.io/pmdk/
[3] Non-volatile Memory Logging (PGCon 2016)
https://www.pgcon.org/2016/schedule/track/Performance/945.en.html
[4] Introducing PMDK into PostgreSQL (PGCon 2018)
https://www.pgcon.org/2018/schedule/events/1154.en.html
[5] Applying PMDK to WAL operations for persistent memory (pgsql-hackers)
https://www.postgresql.org/message-id/[email protected]
三、補丁
補丁
內容類型
大小
0001-Support-GUCs-for-external-WAL-buffer.patch
application/octet-stream
25.9kb
0002-Non-volatile-WAL-buffer.patch
application/octet-stream
44.8kb
0003-README-for-non-volatile-WAL-buffer.patch
application/octet-stream
6.6kb