将PMDK引入PostgreSQL

持久性内存(PMEM)具有快速、非易失和可字节访问的特性,能够通过load/store指令被CPU直接访问。现在已有供应商提供这种产品。相对于HSS或者SSD,数据库管理系统跑在PMEM上性能更好。借助PMDK(Persistent Memory Development Kit),将数据库修改成适配PMEM的产品,可以进一步提高其性能。本次演讲的话题围绕如何修改Postgresql使之适配PMEM,以及修改后的效果如何。我们第一步将围绕WAL日志以及表来提升OLTP性能和checkpoint时间。

有两种方法使用PMEM。第一种是最简单的方法,通过直接访问(DAX,direct-access)文件系统,即跳过操作系统的页缓存,直接访问磁盘。这种方法不用修改PG。另一种方法:PMDK包含适配PMEM的lib库,可以绕过内核直接到PMEM映射文件以及跳过CPU缓存进行内存拷贝。这种方法性能更好。

使用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.html

Introducing PMDK into PostgreSQL相关推荐

  1. Introducing DataFrames in Apache Spark for Large Scale Data Science(中英双语)

    文章标题 Introducing DataFrames in Apache Spark for Large Scale Data Science 一个用于大规模数据科学的API--DataFrame ...

  2. SpringBoot 中JPA集成PostgreSql(详细步骤)避坑!

    SpringBoot 中JPA集成PostgreSql(详细步骤) 什么是JPA?(Java Persistence API) Spring Data JPA, part of the larger ...

  3. PostgreSQL数据库头胎——后台一等公民进程StartupDataBase StartupXLOG函数进入Recovery模式

    检查我们是否需要强制从 WAL 中恢复. 如果数据库似乎是完全关闭并且我们没有恢复信号文件,则假设不需要恢复(InRecovery = false). /* Check whether we need ...

  4. Postgresql 日志收集

    PG安装完成后默认不会记录日志,必须修改对应的(${PGDATA}/postgresql.conf)配置才可以,这里只介绍常用的日志配置. 1.logging_collector = on/off - ...

  5. pg数据库开启远程连接_如何运行远程客户端连接postgresql数据库

    如何运行远程客户端连接 postgresql 数据库 前提条件是 2 个: 1 , pg_hba.conf 里面配置了运行远程客户机连接 pg_hba.conf 配置后需要重新加载 reload 生效 ...

  6. Postgresql:删除及查询字段中包含单引号的数据

    Postgresql:删除及查询字段中包含单引号的数据 1. 假设pg表t_info的属性att,值为固定的:'test' 2. 假设值为不固定的,'abcde' 参考 1. 假设pg表t_info的 ...

  7. postgresql Insert插入的几个报错

    postgresql Insert插入的几个报错 1. org.postgresql.util.PSQLException: 未设定参数值 2 的内容. 2. postgresql : column ...

  8. 【Postgresql】触发器某个字段更新时执行,行插入或更新执行

    [Postgresql]触发器某个字段更新时执行,行插入或更新执行 1. postgresql触发器 2. 触发器的创建及示例 1) 字段更新时,触发 2) 行插入或更新时,触发 3. 触发器的删除 ...

  9. PostgreSql、MySql字段值为空时取其他值语句

    PostgreSql: COALESCE(expr1,expr2) COALESCE函数是返回参数中的第一个非null的值,它要求参数中至少有一个是非null的,如果参数都是null会报错. sele ...

最新文章

  1. css如何设置dialog,css-dialog提示
  2. pat1004. Counting Leaves (30)
  3. new一个新对象的时候,各属性方法的操行顺序
  4. 搜索引擎工作的基础流程与原理
  5. SVG animation 回顾
  6. 数据结构入门学习笔记-1
  7. 如何使用Picterra的地理空间平台分析卫星图像
  8. Nginx快速搭建和基本使用
  9. c#里有遍历目录及子目录以树的形式展现
  10. php重定向error,将nginx错误重定向到php
  11. apache服务器_Apache的简介与配置(上)
  12. 李彦宏:百度今年全员涨薪,比去年还多;谷歌暂停Chrome浏览器更新;Eclipse 4.15发布 | 极客头条...
  13. 【SDCC 2016】微影时代、普元、亚信、Fit2Cloud、VMware、京东商城、优维科技畅聊自动化运维与容器...
  14. med4way:中介效应和交互效应分析
  15. 关于项目一直updating indexes不停的解决方案
  16. ORA-28001: the password has expired解决
  17. App上架时,华为应用市场提示:在测试环境:Wi-Fi联网、EMUI11.0 ( P40),软件存在闪退。如何模拟EMUI11.0 ( P40)
  18. 面试到了“IT大佬”,怼得我哑口无言…
  19. URL 参数编解码详解
  20. 吉林大学计算机a类学科,尴尬了!这7所高校明明是985,却一个A+学科都没有!...

热门文章

  1. CTF 【每日一题 20160707】凯撒加密
  2. GUI——Axes不能是Line的子级
  3. LeetCode Detect Capital
  4. 销量破千万,革命性硬件是如何炼成的?
  5. innitial语句_initial
  6. Oracle数据库解决方案集锦
  7. 计算机组成原理学习-实验四 模型机实验(简易版)(详细、人话)
  8. JAVA计算1到50之间的偶数和_JAVA统计1到50中所有偶数的和
  9. 安装HElib并运行示例程序
  10. 基于dsPIC30F的高精度数据采集器的研制