首页
解决方案
数据库专业技术服务全栈式PostgreSQL解决方案Oracle分布式存储化数据库云PolarDB一体化解决方案
产品
CLup:PostgreSQL高可用集群平台 CMiner: PostgreSQL中的CDC CData高性能数据库云一体机 CBackup数据库备份恢复云平台 CPDA高性能双子星数据库机 CSYun超融合虚拟机产品 ZQPool数据库连接池 ConshGuard数据保护产品
文档
文章
客户及伙伴
中启开源
关于我们
公司简介 联系我们
中启开源

介绍

我们在做一些测试时,为了避免IO对性能的影响,希望把一个文件永远的cache到内存中。而我们知道在PostgreSQL数据库下,可以使用pgfincore工具把数据文件cache到文件系统内存中,但如果有其它文件被频繁访问,被cache的数据文件还是有可能被挤出内存,导致cache失效。此工具可以保证文件永久被cache到内存中,不被交换出去。

原理

此程序通过打开一个文件,把文件的内容映射到内存中,然后把这些内存lock住。只要这个程序不退出,这个文件就被永久的cache住了。其它程序访问这个文件时,也一样不会在从物理磁盘上读了,而是直接从这块共享内存中读取了。

使用

此工具的源码在:https://gitee.com/osdba/filecache

下载源码后:

  1. make

程序参数说明:

使用说明:

在Linux下使用时,需要设置max locked memory大于本程序cache文件所需要的内存大小。使用之前使用通过ulimit -a检查:

  1. postgres@mydb:/home/postgres/filecache>ulimit -a
  2. .....
  3. max locked memory (kbytes, -l) unlimited
  4. .....
  5. .....

在solaris下使用:

请使用下面的命令设置可以cache住内存的最大大小:

  1. projadd -n -U postgres -G postgres -K "project.max-locked-memory=(priv,4096MB,deny)" user.postgres

使用下面命令对用户postgres用户加权限,让postgres可以锁定内存:

  1. usermod -K defaultpriv=basic,priv_proc_lock_memory postgres

此工具后指定一个存有需要cache文件的列表文件,这个列表可以自行写一个脚本来生成。cachedict.sh脚本就是一个这样的脚本,此脚本把所有的数据字典表的文件和索引的文件都生成到cachedict.lst文件就,然后运行filecache,这样就把PostgreSQL的所有字典表都永久的cache到内存中的,如果你需要cache其它表,可以改一改这个脚本,就可以实现你的功能,当然你也可以写一个全新的脚本来实现你的功能。