將PMDK引入PostgreSQL
持久性內(nèi)存(PMEM)具有快速、非易失和可字節(jié)訪問的特性斟叼,能夠通過load/store指令被CPU直接訪問∨蓟荩現(xiàn)在已有供應(yīng)商提供這種產(chǎn)品。相對(duì)于HSS或者SSD朗涩,數(shù)據(jù)庫管理系統(tǒng)跑在PMEM上性能更好忽孽。借助PMDK(Persistent Memory Development Kit),將數(shù)據(jù)庫修改成適配PMEM的產(chǎn)品,可以進(jìn)一步提高其性能谢床。本次演講的話題圍繞如何修改Postgresql使之適配PMEM兄一,以及修改后的效果如何。我們第一步將圍繞WAL日志以及表來提升OLTP性能和checkpoint時(shí)間瘾腰。
有兩種方法使用PMEM。第一種是最簡(jiǎn)單的方法覆履,通過直接訪問(DAX,direct-access)文件系統(tǒng),即跳過操作系統(tǒng)的頁緩存费薄,直接訪問磁盤硝全。這種方法不用修改PG。另一種方法:PMDK包含適配PMEM的lib庫楞抡,可以繞過內(nèi)核直接到PMEM映射文件以及跳過CPU緩存進(jìn)行內(nèi)存拷貝伟众。這種方法性能更好。
使用PMDK修改PG召廷,主要關(guān)注WAL和表段文件凳厢。我們使用PMDK提供的PMEM函數(shù)替代系統(tǒng)調(diào)用函數(shù)open、lseek竞慢、read先紫、write和fdatasync。然后和跑在DAX文件系統(tǒng)上的原生PG進(jìn)行性能比較筹煮。試驗(yàn)中遮精,我們使用飛翼式的DIMM(NVDIMM)作為PMEM。結(jié)果顯示,在WAL方面本冲,在INSERT場(chǎng)景中我們可以提升1.8倍的TPS准脂。我們做出的修改將近1200行。對(duì)于表檬洞,我們checkpoint時(shí)可以減少將近20%的時(shí)間狸膏。
另一方面,我們也在其他方面進(jìn)行探索添怔,例如控制NUMA影響湾戳、消除SQL解析的開銷、對(duì)PMEM-mapped的固定大小表文件進(jìn)行擴(kuò)展澎灸。