Monthly Archives: November 2011

IN操作符中字符串变成列表

从asktom抄来的方案,原文地址:How can I do a variable “in list” create or replace type myTableType as table of varchar2 (255); create or replace function in_list( p_string in varchar2 ) return myTableType as l_string long default p_string || ‘,’; l_data myTableType := myTableType(); n number; begin loop exit when l_string is null; n := instr( l_string, ‘,’ ); [...]

Linux内存管理参数

vfs_cache_pressure: 该文件表示内核回收用于directory和inode cache内存的倾向;缺省值100,越小内核倾向于保留directory和inode cache min_free_kbytes: 该文件表示强制Linux VM最低保留多少空闲内存(Kbytes)。 swapiness值,缺省60,数字越大操作系统越倾向使用swap。 参考资料: Linux性能优化的两个重要参数(参考) oracle&linux文件系统cache RHEL 4 性能优化

[转]Linux Hugepages

原文地址:Linux Hugepages,为方便阅读我把内容顺序稍作调整,把计算Hugepages的脚本放到了最后。 Hugepages是从Linux kernal 2.6后被引入的,其目的是使用更大的memory page size以适应越来越大的系统内存。 在我上大学那会,买一条64M 133Mhz的内存(对,你没看错,64M)价格为500多人民币,而现在4G 1600Mhz的内存的价格也就500多。 计算机硬件的发展速度太快了,所以操作系统的一些配置也要相应的随之改变。 在Linux下,默认的page size大小为4k。显然对于现在的SGA比较大的数据库系统来说,4k的page size有点太小了。 我们来看看两者之间有什么区别 1. Page Table大小 Page Table是用来存放虚拟内存也和物理内存页对应关系的内存结构。因为page size较小,所以相应的改内存结构也会比较大。 而Hugepages的常见page size为2M,是4k size的500倍,所以可以大大减小page table的size。 我们来看两个例子: 这是一个没有配置Hugepage的系统,系统内存128G,pagetable大小大约为4G。 cat /proc/meminfo MemTotal: 132086880 kB PageTables: 4059612 kB 这是配置了Hugepage的系统,系统内存96G, PageTable大小仅为78M MemTotal: 98999880 kB PageTables: 79916 kB 2. 大大提高了CPU cache中存放的page table所覆盖的内存大小,从而提高了TLB命中率 进程的虚拟内存地址段先连接到page tables然后再连接到物理内存。所以在访问内存时需要先访问page tables得到虚拟内存和物理内存的映射关系,然后再访问物理内存。 CPU cache中有一部分TLB(Translation Lookaside Buffer)用来存放部分page table以提高这种装换的速度。因为page [...]

linux命令学习2

排序: sort  -n -k 1,-n表示按照数字排序,-k 1表示按照第一列排序,-t后面指定分隔符 删除第一行: sed 1d ps命令直接排序: ps aux –sort=rss awk汇总: awk ‘BEGIN {total = 0}  {total += $6} END {print total} ‘ 2013-08-23追加 输出指定行: sed -n ’15q;11,14p’ test.txt

Where do you cache Oracle data

原文地址:Where do you cache Oracle data? 文章中一些名词学习: QIO:认识Quick I/O 和Cached Quick I/O (vxfs) ISM:Solaris的动态ISM共享内存 Segmap:Solaris中的活动的文件缓存,参考Solaris memory allocation 在64位的数据库流行之前,同时使用文件系统的页面缓存和oracle数据文件的缓存是很常见的–服务器有很多内存,但数据库使用的内存不超过4G. 现在64位的数据库已经使用了很多年,仍然有一些系统在使用文件系统或QIO的缓存。 使用缓存IO过去会带来好处,但现在会导致大型系统性能下降、可伸缩性降低。使用缓存IO会带来的问题: 单次写加锁 内存碎片:8k的内存块,而不是4M或32M的ISM 双缓存需要双倍的内存带宽 Segmap带来的惩罚– 很多次xcall调用! 测试对象是一个46G带索引的表,使用100个进程同时读取单条记录模拟OLTP环境。只使用oracle的缓冲比同时使用文件缓存的读取速度提高了两倍,SYS CPU的时间也明显下降。 Cache OS Rows/sec getmaps/sec xcalls/sec Usr sys FS S9 287,114 86,516 2,600,000 71 28 DB S9 695,700 296 3,254 94 5 FS S10 334,966 106,719 1,003 78 21 [...]