更新时间:2026-07-28 GMT+08:00
分享

NVMe缓存

NVMe缓存主要针对数据写入量大,I/O易成为瓶颈的场景,通过添加一块高速NVMe盘作为数据库缓冲区,例如:EVS云盘之间的高速缓存。同时,支持SPDK模式的高速读写,跳过文件系统,以进一步降低NVMe缓存的读写延迟,提高读写速度。

快速开启

安装集中式数据库实例,设置nvme_cache_seg_num>0,local_storage_directory = "NVMe盘的挂载位置",设置完成后重启数据库实例即可。如果需要开启SPDK模式,需要额外设置enable_spdk_function = on,且需要设置裸盘的PCI地址,例如:spdk_nvme_pcie_addr = '0000:84:00.0'。大容量NVMe缓存相关参数,请参见《参考》中“数据库运行参数说明 > GUC参数说明 > NVMe”章节。

注意事项

  • 非SPDK模式:需要确保数据库实例用户对local_storage_directory指定的路径拥有读写权限。
  • SPDK模式:
    1. 需要确保服务器支持VFIO-PCI,设置方法为:ARM环境进入BIOS,关闭SMMU;x86环境进入BIOS,开启IOMMU;
    2. 需要确保NVMe盘已解绑,是裸盘或者没有完好的文件系统,否则启动会失败,这是为了防止设置失误导致写坏已有数据盘的保护机制;
    3. 当前主备要求NVMe盘位置同构,PCI地址相同,否则需要备机单独手动设置确保绑定成功。

解除绑定和破坏文件系统的方法如下,以NVMe盘/dev/nvm2n1已经绑定/data3目录为例:

  • 解绑:
    sudo umount /data3
  • 破坏NVMe盘文件系统:
    dd if=/dev/zero of=/dev/nvme2n1 bs=4096 count=10

规格约束

  1. 仅支持集中式,不支持段页式、全量checkpoint模式及ADIO。
  2. 缓存容量范围为1GB ~ 2TB,缓存容量可变化,变化后首次启动无法使用本地checkpoint进行恢复。
  3. 在NVMe缓存共享内存损坏、丢失或NVMe出现半页写无法修复的情况下,无法从NVMe盘进行恢复(例如机器掉电、手动删除共享内存、终止进程等场景),仅可以从SSD/EVS盘进行恢复,恢复时间有所延长,延长的时间与异常时NVMe同步队列中的数据量成正比。
  4. 内存:基础管理内存1GB,每TB缓存额外消耗17GB内存;CPU:使用NVMe缓存需要启动额外线程来进行数据淘汰和数据同步(类似pagewriter),CPU消耗有所提升。
  5. SPDK模式:为支持SPDK在non-root下执行,确保服务器支持VFIO-PCI。
  6. SPDK模式:不支持同一物理机多个开启SPDK的数据库实例共存。

相关文档