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模式:
- 需要确保服务器支持VFIO-PCI,设置方法为:ARM环境进入BIOS,关闭SMMU;x86环境进入BIOS,开启IOMMU;
- 需要确保NVMe盘已解绑,是裸盘或者没有完好的文件系统,否则启动会失败,这是为了防止设置失误导致写坏已有数据盘的保护机制;
- 当前主备要求NVMe盘位置同构,PCI地址相同,否则需要备机单独手动设置确保绑定成功。
解除绑定和破坏文件系统的方法如下,以NVMe盘/dev/nvm2n1已经绑定/data3目录为例:
- 解绑:
sudo umount /data3
- 破坏NVMe盘文件系统:
dd if=/dev/zero of=/dev/nvme2n1 bs=4096 count=10
规格约束
- 仅支持集中式,不支持段页式、全量checkpoint模式及ADIO。
- 缓存容量范围为1GB ~ 2TB,缓存容量可变化,变化后首次启动无法使用本地checkpoint进行恢复。
- 在NVMe缓存共享内存损坏、丢失或NVMe出现半页写无法修复的情况下,无法从NVMe盘进行恢复(例如机器掉电、手动删除共享内存、终止进程等场景),仅可以从SSD/EVS盘进行恢复,恢复时间有所延长,延长的时间与异常时NVMe同步队列中的数据量成正比。
- 内存:基础管理内存1GB,每TB缓存额外消耗17GB内存;CPU:使用NVMe缓存需要启动额外线程来进行数据淘汰和数据同步(类似pagewriter),CPU消耗有所提升。
- SPDK模式:为支持SPDK在non-root下执行,确保服务器支持VFIO-PCI。
- SPDK模式:不支持同一物理机多个开启SPDK的数据库实例共存。