我们在做一些测试时,为了避免IO对性能的影响,希望把一个文件永远的cache到内存中。而我们知道在PostgreSQL数据库下,可以使用pgfincore工具把数据文件cache到文件系统内存中,但如果有其它文件被频繁访问,被cache的数据文件还是有可能被挤出内存,导致cache失效。此工具可以保证文件永久被cache到内存中,不被交换出去。
此程序通过打开一个文件,把文件的内容映射到内存中,然后把这些内存lock住。只要这个程序不退出,这个文件就被永久的cache住了。其它程序访问这个文件时,也一样不会在从物理磁盘上读了,而是直接从这块共享内存中读取了。
此工具的源码在:https://gitee.com/osdba/filecache
下载源码后:
make
程序参数说明:
使用说明:
在Linux下使用时,需要设置max locked memory大于本程序cache文件所需要的内存大小。使用之前使用通过ulimit -a检查:
postgres@mydb:/home/postgres/filecache>ulimit -a
.....
max locked memory (kbytes, -l) unlimited
.....
.....
在solaris下使用:
请使用下面的命令设置可以cache住内存的最大大小:
projadd -n -U postgres -G postgres -K "project.max-locked-memory=(priv,4096MB,deny)" user.postgres
使用下面命令对用户postgres用户加权限,让postgres可以锁定内存:
usermod -K defaultpriv=basic,priv_proc_lock_memory postgres
此工具后指定一个存有需要cache文件的列表文件,这个列表可以自行写一个脚本来生成。cachedict.sh脚本就是一个这样的脚本,此脚本把所有的数据字典表的文件和索引的文件都生成到cachedict.lst文件就,然后运行filecache,这样就把PostgreSQL的所有字典表都永久的cache到内存中的,如果你需要cache其它表,可以改一改这个脚本,就可以实现你的功能,当然你也可以写一个全新的脚本来实现你的功能。