今天看到PG邮件列表里有非易失性内存在PG应用的讨论,做下记录,接着学习其补丁,如何将WAL buffer改造成非易失性buffer,以及和之前有和区别。该补丁是也是日本NTT公司提供。
一、原文
https://www.postgresql.org/message-id/002f01d5d28d23c014306b403c90
二、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/C20D38E97BCB33DAD59E3A1@lab.ntt.co.jp
三、补丁
补丁 | 内容类型 | 大小 |
---|---|---|
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 |