[转帖]Oracle性能优化-大内存页配置
一、为什么需要大页面?
如果您有一个大的RAM和SGA,那么HugePages对于Linux上更快的Oracle数据库性能是至关重要的。如果您的组合数据库SGAs很大(比如超过8GB,甚至对于更小的数据库也很重要),则需要配置更大的页面。请注意,SGA的大小很重要。HugePages的优势有:
更大的页面大小和更少的页面数量:默认页面大小为4K,而HugeTLB大小为2048K。这意味着系统需要处理512倍的页面。
减少页表遍历:由于HugePage比常规大小的页面包含更大的连续虚拟地址范围,因此使用HugePages的每个TLB条目被TLB命中的概率要高于使用常规页面。这减少了从虚拟地址获取物理地址遍历页面表的次数。
减少内存操作的开销:在虚拟内存系统(任何现代操作系统)上,每个内存操作实际上是两个抽象的内存操作。使用HugePages,由于要处理的页面数量较少,因此显然避免了页面表访问上可能出现的瓶颈。
内存使用量更少:从Oracle数据库的角度来看,与常规大小的页面相比,Linux内核将使用更少的内存来创建pagetables,以维护SGA地址范围的虚拟到物理映射。这使得更多的内存可用于进程私有计算或PGA使用。
无交换:在所有文档1295478.1中,我们必须避免在Linux操作系统上发生交换。大页是不可交换的(而常规页是可交换的)。因此,不存在页面替换机制开销。大页通常被认为是固定的。
没有“kswapd”操作:如果有一个非常大的区域需要分页(例如,对于50GB内存有1300万个页表条目),那么kswapd将非常繁忙,并且会使用大量的CPU资源。当使用HugePages时,kswapd不参与管理它们。另见文件361670.1
二、大页配置(Doc ID 361468.1)
1.设置内存锁,假如我这里64G内存,设置如下,值单位kb
vi /etc/security/limits.conf
* soft memlock 60397977
* hard memlock 60397977
2.检查设置的值
$ ulimit -l
60397977
3.关闭AMM
oracle11g以后默认自动内存管理( Automatic Memory Management (AMM)),跟这个大页设置冲突了,所以需要关闭AMM. 需要把MEMORY_TARGET and MEMORY_MAX_TARGET 这2个参数设置为 0,如果已经是0就不用设置了
06:55:02 SYS@db01> show parameter memory
NAME TYPE VALUE
hi_shared_memory_address integer 0
memory_max_target big integer 0
memory_target big integer 0
shared_memory_address integer 0
如果不为0则需要设置
alter system reset memory_max_target scope=spfile sid='*';
4. 使用推荐脚本计算vm.nr_hugepages 的值
$ ./hugepages_settings.sh
...
Recommended setting: vm.nr_hugepages = 1496
5.进行设置vm.nr_hugepages
vi /etc/sysctl.conf
vm.nr_hugepages = 1496
6.停止数据库,重启操作系统
7.检查和验证配置
# grep HugePages /proc/meminfo
HugePages_Total: 1496
HugePages_Free: 485
HugePages_Rsvd: 446
HugePages_Surp: 0
三、使用官方脚本计算出推荐设置大页值,参考Doc ID 401749.1
#!/bin/bash
#
# hugepages_settings.sh
#
# Linux bash script to compute values for the
# recommended HugePages/HugeTLB configuration
# on Oracle Linux
#
# Note: This script does calculation for all shared memory
# segments available when the script is run, no matter it
# is an Oracle RDBMS shared memory segment or not.
#
# This script is provided by Doc ID 401749.1 from My Oracle Support
# http://support.oracle.com
Welcome text
echo "
This script is provided by Doc ID 401749.1 from My Oracle Support
(http://support.oracle.com) where it is intended to compute values for
the recommended HugePages/HugeTLB configuration for the current shared
memory segments on Oracle Linux. Before proceeding with the execution please note following:
- For ASM instance, it needs to configure ASMM instead of AMM.
- The 'pga_aggregate_target' is outside the SGA and
you should accommodate this while calculating the overall size.
- In case you changes the DB SGA size,
as the new SGA will not fit in the previous HugePages configuration,
it had better disable the whole HugePages,
start the DB with new SGA size and run the script again.
And make sure that:
- Oracle Database instance(s) are up and running
- Oracle Database 11g Automatic Memory Management (AMM) is not setup
(See Doc ID 749851.1)
- The shared memory segments can be listed by command:
ipcs -m
Press Enter to proceed..."
read
Check for the kernel version
KERN=uname -r | awk -F. '{ printf("%d.%d\n",$1,$2); }'
Find out the HugePage size
HPG_SZ=grep Hugepagesize /proc/meminfo | awk '{print $2}'
if [ -z "$HPG_SZ" ];then
echo "The hugepages may not be supported in the system where the script is being executed."
exit 1
fi
Initialize the counter
NUM_PG=0
Cumulative number of pages required to handle the running shared memory segments
for SEG_BYTES in ipcs -m | cut -c44-300 | awk '{print $1}' | grep "[0-9][0-9]*"
do
MIN_PG=echo "$SEG_BYTES/($HPG_SZ*1024)" | bc -q
if [ \(MIN_PG -gt 0 ]; then
NUM_PG=`echo "\)NUM_PG+$MIN_PG+1" | bc -q`
fi
done
RES_BYTES=echo "$NUM_PG * $HPG_SZ * 1024" | bc -q
An SGA less than 100MB does not make sense
Bail out if that is the case
if [ $RES_BYTES -lt 100000000 ]; then
echo ""
echo " ERROR "
echo ""
echo "Sorry! There are not enough total of shared memory segments allocated for
HugePages configuration. HugePages can only be used for shared memory segments
that you can list by command:
# ipcs -m
of a size that can match an Oracle Database SGA. Please make sure that:
- Oracle Database instance is up and running
- Oracle Database 11g Automatic Memory Management (AMM) is not configured"
exit 1
fi
Finish with results
case \(KERN in
'2.4') HUGETLB_POOL=`echo "\)NUM_PG*$HPG_SZ/1024" | bc -q`;
echo "Recommended setting: vm.hugetlb_pool = $HUGETLB_POOL" ;;
'2.6') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'3.8') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'3.10') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'4.1') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
'4.14') echo "Recommended setting: vm.nr_hugepages = $NUM_PG" ;;
*) echo "Kernel version $KERN is not supported by this script (yet). Exiting." ;;
esac
End
[转帖]Oracle性能优化-大内存页配置的更多相关文章
- Oracle性能优化之内存管理
Oracle实例中的内存使用分为两类:程序全局区(program global area, PGA)和系统全局区(system global area, SGA).前者专门供每个会话使用,后者由所有O ...
- 【云和恩墨】性能优化:Linux环境下合理配置大内存页(HugePage)
原创 2016-09-12 熊军 [云和恩墨]性能优化:Linux环境下合理配置大内存页(HugePage) 熊军(老熊) 云和恩墨西区总经理 Oracle ACED,ACOUG核心会员 PC S ...
- 转://Linux大内存页Oracle数据库优化
PC Server发展到今天,在性能方面有着长足的进步.64位的CPU在数年前都已经进入到寻常的家用PC之中,更别说是更高端的PC Server:在Intel和AMD两大处理器巨头的努力下,x86 C ...
- 降低磁盘IO使Oracle性能优化(转)
文章转自:http://blog.chinaunix.net/uid-26813519-id-3207996.html 硬件方面虽然只占Oracle性能优化的一个方面(另一方面是软件),但是仍不可忽视 ...
- oracle性能优化之awr分析
oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...
- redis性能优化、内存分析及优化
redis性能优化.内存分析及优化 1.优化网络延时 2.警惕执行时间长的操作 3.优化数据结构.使用正确的算法 4.考虑操作系统和硬件是否影响性能 5.考虑持久化带来的开销 5.1 RDB 全量持久 ...
- 【转载】我眼中的Oracle性能优化
我眼中的Oracle性能优化 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角 ...
- 我眼中的 Oracle 性能优化
恒生技术之眼 作者 林景忠 大家对于一个业务系统的运行关心有如下几个方面:功能性.稳定性.效率.安全性.而一个系统的性能有包含了网络性能.应用性能.中间件性能.数据库性能等等. 今天从数据库性能的角度 ...
- jvm性能优化及内存分区
jvm性能优化及内存分区 2012-09-17 15:51:37 分类: Java Some of the default values for Sun JVMs are listed below. ...
- Android 性能优化之内存泄漏检测以及内存优化(中)
https://blog.csdn.net/self_study/article/details/66969064 上篇博客我们写到了 Java/Android 内存的分配以及相关 GC 的详细分析, ...
随机推荐
- zabbix-agent报错记录
Too many parameters 由于agent版本差异监控项的参数不一样 , 解决方法升级agent版本 Cannot obtain filesystem information: [2] N ...
- (Dnc系列)借助Dnc.Events.InMemory在三分钟实现一个内存级别的事件驱动处理模型
前言 Dnc.Events是在借鉴领域驱动设计大佬daxnet的博客基础上做的基于内存级别的EDA处理模型,不清楚EDA的童鞋请自行百度. 第一分钟 安装Nuget Dnc.Events.InMemo ...
- GOF23--23种设计模式(三)
一.桥接模式 Java中的桥接模式(Bridge Pattern)是一种结构性设计模式,它将抽象部分和实现部分分离,使它们可以独立变化,同时通过桥接对象将它们连接起来. 这种模式将抽象与其实现解耦,使 ...
- spring-mvc 系列:HttpMessageConverter(@RequestBody、RequestEntity、@ResponseBody、@RestController、ResponseEntity、文件上传下载)
目录 一.@RequestBody 二.RequestEntity 三.@ResponseBody 四.SpringMVC处理json 五.@RestController 六.ResponseEnti ...
- 华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务
本文分享自华为云社区<华为云分布式云原生UCS,助力MetaERP构建企业级高可用分布式业务>,作者:云容器大未来. 引言 华为云最近成为<Forrester Wave: Multi ...
- 科技抗疫,少年可期,为这群有AI的天使开发者疯狂打call
摘要:2020年初新冠突发,在这场抗疫的战斗中,让我们深刻体会到,疫情与每一个人息息相关.有这样一群来自华中科技大学的师生项目团队,他们利用AI技术,助力全球抗疫,他们是怎么做的呢?让我们一起来看看吧 ...
- MRS离线数据分析:通过Flink作业处理OBS数据
摘要:MRS支持在大数据存储容量大.计算资源需要弹性扩展的场景下,用户将数据存储在OBS服务中,使用MRS集群仅做数据计算处理的存算分离模式. 本文分享自华为云社区<[云小课]EI第47课 MR ...
- 直击火山引擎V-Tech峰会!仅需简单登录,即可极速体验数据引擎ByteHouse
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 9月19日,火山引擎"数据飞轮·V-Tech数据驱动科技峰会"在上海举办.会上重磅发布数智 ...
- 火山引擎DataLeap的Catalog系统搜索实践(三):Learning to rank与后续工作
Learning to rank Learning to rank主要分为数据收集,离线训练和在线预测三个部分.搜索系统是一个Data-driven system,因此火山引擎DataLeap的Cat ...
- Python pdf 转 图片
安装依赖 D:\OpenSource\Python>pip install pdf2image pillow -i https://pypi.tuna.tsinghua.edu.cn/simpl ...