您好,欢迎访问一九零五行业门户网

Linux配置HugePage

对于内存较大的oracle数据库服务器,配置hugepage是很有必要的,下面是配置huge的步骤:
对于内存较大的oracle数据库服务器,配置hugepage是很有必要的,下面是配置huge的步骤:
我的环境:
os:centos release 6.4 (final)
oracle:11.2.0.4 rac
oracle 大内存需要配置hugepage
在oracle 11.2.0.3.0上开启大页(hugepages)的详细解析
linux hugepages及mysql 大页配置
linux hugepage 特性
1.        设置memlock
编辑/etc/security/limits.conf
增加:
* soft memlock 稍小于ram值
* hard memlock 稍小于ram值
memlock值大于sga没关系的,所以我们可以设置这个值在我们想要的sga size和物理内存size之间,这个值得单位是kb。
[root@node1 ~]# grep -i memtot /proc/meminfo
memtotal:      132250576 kb
我们物理内存大小126g,因此我可以设置memlock为100g。
在2个节点设置:
[root@node1 ~]# tail -2 /etc/security/limits.conf
* soft memlock 104857600
* hard memlock 104857600
设置完毕后,以oracle用户登录验证:
node2-> ulimit -l
104857600
2.        禁用amm特性:
禁用amm特性需要将memory_max_target, memory_max_target2个参数重置,而不仅仅是设置为0,最好的办法是创建一个pfile,在pfile中将这2个参数删除,再根据这个pfile创建spfile.
主要内存参数设置为:
node1->
node1-> grep target /tmp/init.ora
*.pga_aggregate_target=1572864000
*.sga_target=64424509440
sql> create spfile from pfile='/tmp/init.ora';
file created.
sql> startup force
ora-27102: out of memory
linux-x86_64 error: 28: no space left on device
additional information: -134217728
additional information: 1
sql>
出现这个报错是因为shmall设置的太小。
shmall表示共享内存的总大小,单位为pagesize的大小。
根据我的配置,最大能支持8g的sga:
node1-> getconf page_size
4096
node1->  cat /proc/sys/kernel/shmall
2097152
修改shmall并重新启动数据库,修改的方法很简单,编辑/etc/sysctl.conf:
kernel.shmall= 16252928
即可。
修改完毕kernel.shmall,此时可以重启数据库。
sql> startup nomount pfile='/tmp/init.ora';           
oracle instance started.
total system global area 6.4137e+10 bytes
fixed size                  2269072 bytes
variable size            6979321968 bytes
database buffers        5.7043e+10 bytes
redo buffers              112762880 bytes
sql>
sql>
db启动后重新创建spfile:
sql>  create spfile='+ocr/sszgdb/spfilesszgdb.ora' from pfile='/tmp/init.ora';
file created.
sql>
3.        根据oracle的脚本计算hugepage大小(计算时要确保oracle已经启动),也可自己计算:
press enter to proceed...
recommended setting: vm.nr_hugepages = 30739
node1->
4.        根据脚本的计算值在2个节点编辑/etc/sysctl.conf
加入vm.nr_hugepages = 30739
[root@node2 ~]# grep -i huge /proc/meminfo
anonhugepages:    602112 kb
hugepages_total:  30739
hugepages_free:    30739
hugepages_rsvd:        0
hugepages_surp:        0
hugepagesize:      2048 kb停止数据库实例
5.        重启服务器,一般重启服务器之后db也自动启动了。服务器和db重启后可以通过以下命令验证大页的使用情况:
grep -i hugepages /proc/meminfo
此时查看oracle的alert日志,也可以发现:
starting oracle instance (normal)
************************ large pages information *******************
per process system memlock (soft) limit = unlimited
total shared global region in large pages = 58 gb (96%)
large pages used by this instance: 29761 (58 gb)
large pages unused system wide = 24 (48 mb)
large pages configured system wide = 30739 (60 gb)
large page size = 2048 kb
recommendation:
  total system global area size is 60 gb. for optimal performance,
  prior to the next instance restart:
  1. increase the number of unused large pages by
 at least 936 (page size 2048 kb, total size 1872 mb) system wide to
  get 100% of the system global area allocated with large pages
可以发现sga并没有全部放在大页里,这样可能对性能带来负面影响,,oracle建议我们再加入936个大页,可见oracle的大页脚本计算并不准确,我们需要增加大页数量,并设置参数use_large_pages=only,该参数确保oracle的共享内存全部使用大页。
更多详情见请继续阅读下一页的精彩内容:
其它类似信息

推荐信息