将PMDK引入PostgreSQL
持久性内存(PMEM)具备快速、非易失和可字节访问的特性,可以经过load/store指令被CPU直接访问。如今已有供应商提供这种产品。相对于HSS或者SSD,数据库管理系统跑在PMEM上性能更好。借助PMDK(Persistent Memory Development Kit),将数据库修改为适配PMEM的产品,能够进一步提升其性能。本次演讲的话题围绕如何修改Postgresql使之适配PMEM,以及修改后的效果如何。咱们第一步将围绕WAL日志以及表来提高OLTP性能和checkpoint时间。html
有两种方法使用PMEM。第一种是最简单的方法,经过直接访问(DAX,direct-access)文件系统,即跳过操做系统的页缓存,直接访问磁盘。这种方法不用修改PG。另外一种方法:PMDK包含适配PMEM的lib库,能够绕过内核直接到PMEM映射文件以及跳过CPU缓存进行内存拷贝。这种方法性能更好。sql
使用PMDK修改PG,主要关注WAL和表段文件。咱们使用PMDK提供的PMEM函数替代系统调用函数open、lseek、read、write和fdatasync。而后和跑在DAX文件系统上的原生PG进行性能比较。试验中,咱们使用飞翼式的DIMM(NVDIMM)做为PMEM。结果显示,在WAL方面,在INSERT场景中咱们能够提高1.8倍的TPS。咱们作出的修改将近1200行。对于表,咱们checkpoint时能够减小将近20%的时间。数据库
另外一方面,咱们也在其余方面进行探索,例如控制NUMA影响、消除SQL解析的开销、对PMEM-mapped的固定大小表文件进行扩展。缓存
原文地址
https://www.pgcon.org/2018/schedule/events/1154.en.htmlapp