a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 75|回复: 0

[综合辅导] Linux认证:Linux上SGA的最大大小

[复制链接]
发表于 2012-8-4 12:07:07 | 显示全部楼层 |阅读模式
在Linux上,全部SGA大小被限制为2G,有多种方法可以为SGA分配更多的内存,但是最可靠和灵活的方法需要使用到共享内存文件,如在RHEL2.1下的shmfs或RHEL3、4、5下的ramfs,本文描述在Red Hat企业版Linux以及它的克隆版本上创建非常大的高速缓存的方法。
8 H6 x- a! [* ^8 ^$ K( W$ j  Red Hat企业版Linux(RHEL)2.1/ m7 K+ g3 K3 |) `: }
  创建一个共享内存文件系统(shmfs), N* p9 F& Z% R" G8 I7 v% @' ?
  shmfs是一个内存文件系统,因此它可以与Red Hat Linux AS2.1考试大提示支持的虚拟内存的最大大小一样大,虽然理论上企业版内核支持超过64GB内存,但目前最大是16GB。+ ]- ~- x% {8 G( \8 ?) L  v% S7 p" F
  shmfs是root用户使用下面的命令创建的:
2 }2 R: E2 @7 S( l  mount -t shm shmfs -o size=3g /dev/shm
# {4 r, \' l. j1 B# q/ S. D& ?  通过在/etc/fstab中添加下面一行,共享内存文件系统可以被自动挂载:) ~2 B$ v# K* J2 f1 K$ `
  shmfs /dev/shm shm size=3g 0 0& ]: s0 b2 w; O. P7 c. O) i
  在上面的例子中,我创建了一个3G大小的shmfs,也是我计划使用的高速缓存的大小,SGA的其他组件放在常规内存中,而不是这个共享内存文件系统中,因此在考虑shmfs的大小时不要将它们包括进来了,比实际需要的大小要稍微大一点,本例中我使用3G shmfs作为高速缓存。
5 M1 K- U! l. I+ T6 t7 {- P' u  开启大页面支持
* U! T. {3 s+ C- [5 f# P% _3 M  在/boot/grub/grub.conf文件中添加bigpages=xMB到相关的内核条目后来开启大页面支持,这里的x象下面这样计算:
4 V* [! H9 J& ^5 `  总SGA大小(单位G)*1024
: z8 g2 g1 E' K; i/ e& \  然后围绕这个值取整百,因此一个4G大小的SGA,我们做下面的计算:7 ^& F# `+ K' Z4 l+ ]; `+ F$ k
  4*1024=4096=4100
, S! ?# R! m" [: y! q- w2 [3 m& v4 `  因此/boot/grub/grub.conf文件条目看起来就是:
4 f9 o' s1 I1 Y1 b2 l  kernel /vmlinuz-2.4.9-e.40enterprise ro root=/dev/cciss/c0d0p2 bigpages=4100MB
6 K2 }9 e% R' I  保存后应该重启系统,然后你必须作为root用户执行下面的命令:* {5 A' f0 `2 ~2 g. \% ~
  echo 2 > /proc/sys/kernel/shm-use-bigpages0 G% B# w; `9 T( \5 A2 y$ z) r
  你可以直接在/etc/sysctl.conf文件中添加一行让这个值固定下来:4 p$ g' a4 G& u4 T& c4 `  r+ [) X9 d
  kernel.shm-use-bigpages = 2' h  B; o/ g; B# s8 [/ s6 o. y
  Red Hat企业版Linux(RHEL)3、4和57 u4 r, i2 J) ~3 r! G
  挂载ramfs文件系统,并确认它对oracle是可用的) q; \  f4 J$ v3 a6 ?! x
  umount /dev/shm
) s& G4 e) V0 Z6 u. E% I  s  mount -t ramfs ramfs /dev/shm
3 ?# H& p' Y. `* B2 K" W  chown oracle:oinstall /dev/shm1 d( ^( x1 r; h/ J
  将这些命令添加到/etc/rc.local文件中,和RHEL2.1的方法一样,只有高速缓存存储在这个位置。- s1 l: Y+ e- I. ~* V
  因为Oracle会为共享池锁住共享内存,我们必须在/etc/security/limits.conf中调整memlock参数,memlock以Kb为单位进行表示的,因此对于一个2G大小的共享池,我们至少需要(2*1024*1024=2097152),如下所示:
+ `+ q- B" ]: U. T9 X  oracle soft memlock 20971527 G# e+ y1 o# ~5 w/ j& [% [
  oracle hard memlock 2097152
0 N% {; D% w2 l# T$ E  实际上,最好稍微比这个数值大一点。; p: T) H2 N% e# z) Z  D) n% A
  设置SHMMAX值
, [' V1 @4 W8 B' `/ Z. T  对于32位架构,shmmax值应该设置为物理内存的一半,最大值为4294967295,对于一个有6G内存的服务器,我们可以作为root用户使用下面的命令将这个值设为3G(物理内存的一半):, Y6 x6 ?" h. m  n& Q! r7 C
  echo 3221225472 > /proc/sys/kernel/shmmax
# N2 g+ u: ~5 L6 l7 D0 U  另外还可以设置在/etc/sysctl.conf文件中:: N8 E2 e: s# Q
  kernel.shmmax = 3221225472/ T. z- Y4 R& C' \. [# }; G
  你的/etc/sysctl.conf文件看起来应该象下面这样:  d) k' K$ _! b3 y$ z
  kernel.shmmax = 3221225472: j7 {# U9 j) c6 l
  kernel.shmmni = 4096
2 t! c8 C' N% o5 Y, g; Y' R+ d  kernel.shmall = 2097152
( R4 v2 i$ ^8 D/ s  kernel.sem = 1000 32000 100 150. F8 g5 T" J4 v7 J% N" e( g8 Z( D
  fs.file-max = 65536
% Q! c3 v3 |+ j/ O6 E1 _* ?  net.ipv4.ip_local_port_range = 1024 65000
8 z: u/ T( v( c) |$ C( q" \  kernel.shm-use-bigpages = 2* f3 o8 w+ T+ c3 F% |
  修改/etc/sysctl.conf文件后,使用下面的命令应用而无需重新启动系统:
) S1 e9 g. O: Y' }- p) c( O  /sbin/sysctl -p; A4 J4 D, Y! W; i
  实例参数
$ R( ~3 s3 p6 Z8 U1 l4 v  必须修改一些实例参数以允许oracle实例使用共享内存文件系统,在处于运行中的实例上可以使用alter system set命令或离线修改spfile文件操作spfile参数,:
2 P; ]/ J( x! {: {  -- Change the parameter value in the spfile directly.
" r0 p1 G- e% d! g7 R  ALTER SYSTEM SET parameter = value SCOPE=spfile
% j/ A3 c) q/ C7 R% u: o. G' K+ {# |  -- Create a pfile with the contents of the current spfile.& S: b6 _3 k' {1 Z
  CREATE PFILE='/tmp/pfile' FROM SPFILE;
9 U' U( K% J0 r1 [# I8 ~  -- Manually manipulate the contents of the pfile.
  Z0 E, X8 F6 D5 _2 @  -- Recreate the spfile from the amended pfile., }5 s* P- B* D$ d! D
  CREATE SPFILE FROM PFILE='/tmp/pfile';6 Z& V1 M  j/ O8 [# G* ?
  下面的参数应该被添加到spfile或pfile中:- Q$ P* L: _# p4 }4 C. B
  use_indirect_data_buffers=true" |% Y3 \9 E4 L" p1 l- ]& t
  同时,所有涉及到db_cache_size和db_xK_cache的参数都应该被移除,使用旧版本风格的db_blcok_buffers参数条目代替:
. V2 }2 b8 G$ _' [1 Q/ U  # 3Gig for an 8K db_block_size. ((3 * 1024 * 1024) / 8) = 393216
9 r# l6 p) t( [3 N0 O8 s5 n3 _  db_block_buffers = 393216
9 a7 Z; D, y: ]$ ^  r9 x. E  这意味着使用这种方法时多数据块大小特征将不可用,记住高速缓存仅仅是SGA的一部分。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-21 13:04 , Processed in 0.166499 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表