Oracle Database 由11.2.0.1成功升级到11.2.0.2后,运行一段时间通过EM发现有Significant Virtual Memory Paging警告。警告内容显示,大量的虚拟内在交换严重影响系统性能。因为在原来的版本里系统并未出现该警告,而且内存较大,出现这现象较为奇怪,于是开始查找原因。
通过statspack查看节点虚拟内存部分报告:
节点一:
Virtual Memory Paging
~~~~~~~~~~~~~~~~~~~~~
KB paged out per sec: 349.8
KB paged in per sec: 2,178.2
节点二:
~~~~~~~~~~~~~~~~~~~~~
KB paged out per sec: 363.2
KB paged in per sec: 1,766.4
但当我再通过VMSTAT查看磁盘IO运行情况,
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
4 0 131172 738060 734048 57365004 0 0 85 10 0 0 1 0 98 0 0
1 0 131172 738012 734048 57365012 0 0 4500 36 6138 20499 2 1 97 0 0
4 0 131172 738284 734048 57365032 0 0 5280 364 5965 19930 2 1 97 0 0
4 0 131172 738800 734048 57365032 0 0 6592 577 6805 21277 2 1 97 0 0
2 0 131172 737912 734048 57365032 0 0 5168 15 5969 20360 2 1 97 0 0
3 0 131172 738480 734048 57365032 0 0 5524 108 6161 20143 2 1 98 0 0
……
长时间观察后很奇怪并未发现该问题。
从网上搜索相关信息有部分提到LINUX下可以将ORACLE数据库相关操作锁定在内存。
1、即通过将lock_sga设为TRUE实现,但是发现该参数只适合于内存手动管理机制,而目前系统是自动管理的,因此无效,而且非单点不建议采用完全手动管理,只好放弃。
2、LINUX环境下大内存页优化配置,即启用HugePage功能。大内存页的好处:
减少页表(Page Table)大小;
Huge Page内存只能锁定在物理内存中,不能被交换到交换区;
由于页表数量减少,使得CPU中TLB的命中率大大提高;
针对Huge Page的页表,在各进程之间可以共享,也降低了PageTable的大小。
具体配置资料可在网上搜索下,资料很多,配置案例也很全面。
但是异外的是,配置完成后,问题依然。
最后在官方文档中找到[ID 1322964.1],Bug#10220118,升级后存在的Bug。
小补丁,且支持滚动升级。打上之后,解决。
小记:Oracle产品本身存在大量Bug,所以在寻找问题解决办法,尤其是遇到异常情况时,官方技术支持文档显得尤为重要。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22890736/viewspace-716301/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22890736/viewspace-716301/