- 論壇徽章:
- 3
|
程序解決的問題:
我們知道在PostgreSQL數(shù)據(jù)庫下,可以使用pgfincore工具把數(shù)據(jù)文件cache到文件系統(tǒng)內(nèi)存中,但如果有其它文件被頻繁訪問,被cache的數(shù)據(jù)文件還是有可能被擠出內(nèi)存,導(dǎo)致cache失效。我寫的這個工具可以保證文件永久被cache到內(nèi)存中,不被交換出去。
程序的原理說明:
此程序通過打開一個文件,把文件的內(nèi)容映射到內(nèi)存中,然后把這些內(nèi)存lock住。只要這個程序不退出,這個文件就被永久的cache住了。其它程序訪問這個文件時,也一樣不會在從物理磁盤上讀了,而是直接從這塊共享內(nèi)存中讀取了。
程序參數(shù)說明:
-f <cfgfile>
指定一個配置文件,在配置文件中需要cache的文件占一行,這樣filecache就可以同時cache很多個文件。
-c <百分比>
指定cache文件的百分比,一般可以取110,意思是110%。cache文件時,如果這個值設(shè)置為100%時,
當(dāng)文件變大時,變大的部分并不會被永遠cache在內(nèi)存中,于是增加了這個參數(shù),設(shè)置為110%時,
當(dāng)文件增加大小到原先的110%時,后面增大的10%的空間仍然會被cache中內(nèi)存中。
-p <pid file>
指定一個pid文件,會把自己的進程號寫到這個文件中,如果不指定,會生成filecache.pid的文件。
-M <最大的文件尺寸>
大于這值的文件,就不會被cache,防止太大的文件把內(nèi)存給撐爆。
使用說明:
1. 在Linux下使用時,需要設(shè)置max locked memory大于本程序cache文件所需要的內(nèi)存大小。使用之前使用通過ulimit -a檢查:
postgres@mydb:/home/postgres/filecache>ulimit -a
.....
max locked memory (kbytes, -l) unlimited
.....
.....
2. 在solaris下使用,請使用下面的命令設(shè)置可以cache住內(nèi)存的最大大。
projadd -n -U postgres -G postgres -K "project.max-locked-memory=(priv,4096MB,deny)" user.postgres
使用下面命令對用戶postgres用戶加權(quán)限,讓postgres可以鎖定內(nèi)存:
usermod -K defaultpriv=basic,priv_proc_lock_memory postgres
3. 此工具后指定一個存有需要cache文件的列表文件,這個列表可以自行寫一個腳本來生成。cachedict.sh腳本就是一個這樣的腳本,
此腳本把所有的數(shù)據(jù)字典表的文件和索引的文件都生成到cachedict.lst文件就,然后運行filecache,這樣就把PostgreSQL的所有
字典表都永久的cache到內(nèi)存中的,如果你需要cache其它表,可以改一改這個腳本,就可以實現(xiàn)你的功能,當(dāng)然你也可以寫一個全新的腳
本來實現(xiàn)你的功能。
有興趣的可以到我的blog中下載此工具:
filecache下載 |
|