oracle rac内核参数的详细介绍

63次阅读
没有评论

共计 7564 个字符,预计需要花费 19 分钟才能阅读完成。

本篇内容介绍了“oracle rac 内核参数的详细介绍”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让丸趣 TV 小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

1. 在 /etc/sysctl.conf 文件中加入下列行

kernel.shmall = 2097152 
kernel.shmmax = 4294967295 
kernel.shmmni = 4096 
# semaphores: semmsl, semmns, semopm, semmni 
kernel.sem = 250 32000 100 128 
fs.file-max = 101365 
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586

net.ipv4.ip_local_port_range = 1024 65000

for 11gR2

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 4294967295

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586 

注意:  如果已经存在的值大于这个值,就不要修改!

– 然后运行下面命令,使上面的设置生效  
#/sbin/sysctl -p

参数说明:

 kernel.shmall 为物理内存除以 pagesize;

 kernel.shmmax 为物理内存的一半;

 fs.file-max 为 512  乘以  processes (如 128 个 process 则为  65536);

 net.ipv4.ip_local_port_range/net.core.rmem_default/net.core.rmem_max 三个参数设置和官方文档不一样,  这是根据 metalink 343431.1  最新要求更改的;

 net.ipv4.tcp_rmem/net.ipv4.tcp_wmem 两个参数一般情况下无需设置,  除非是在 Dataguard/Streams 等需很多网络传输情况下;

其它参数根据官方文档要求设置即可.

# Controls the maximum shared segment size, in bytes – 物理内存的一般

kernel.shmmax = 68719476736

# Controls the maximum number of shared memory segments, in pages

kernel.shmall = 4294967296 – 物理内存除以 pagesize

—  以上 2 个参数,都已经存在,  只需要调整一下参数大小

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

fs.file-max = 327679 

net.core.rmem_default = 1048576

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

net.ipv4.ip_local_port_range = 9000 65500 —  这个端口从 9000 开始

for 11gR2

fs.aio-max-nr = 1048576

fs.file-max = 6815744

kernel.shmall = 2097152

kernel.shmmax = 536870912

kernel.shmmni = 4096

kernel.sem = 250 32000 100 128

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048586

注意:如果已经存在的值,大于这里的设置,就不要修改。

2. kernel.shmmax  参数

2.1  说明

 SHMMAX Available physical memory Defines the maximum allowable size of one shared memory segment. The SHMMAX setting should be large enough to hold the entire SGA in one shared memory segment. A low setting can cause creation of multiple shared memory segments which may lead to performance degradation.

 Shmmax  是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax  设置应该足够大,能在一个共享内存段下容纳下整个的 SGA , 设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降  。

 SHMMAX  仅仅是在共享内存段被创建的时候用来比较的一个数字,当共享内存段被一个进程 (Process) 创建,操作系统检查是否被要求的共享内存段的值大于 shmmax  的值  ,如果是,那么将会抛出一个错误。这个时候系统会创建另外的一个或多个共享内存段满足进程的需求  。一般来说,共享内存段个数和系统性能没有太直接的关系,也不会对性能产生太大的影响。

  在实例启动以及 Server Process  创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候   需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。这意味着如果你的程序不是经常 Create Processes(以及 Destroy Them), 性能方面就不是考虑的问题。 

 Oralce  建议  SHMMAX SGA(SGA_MAX_SIZE),这样在任何时候都不会有甚至轻微的性能下降的隐患。 

2.2  示例

  在上节说了,如果 shmmax  小与 SGA,Oracle  会创建多个共享内存段,我们可以使用 Ipcs -sa  查看看到共享内存段个数。 

(1)查看

[root@rac01 ~]# cat /etc/sysctl.conf | grep kernel.shmmax
kernel.shmmax = 20971520
[root@rac01 ~]# ipcs -sa

—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status 
0x00000000 65537 oracle 640 4194304 27 
0x00000000 98306 oracle 640 20971520 27 
0x00000000 131075 oracle 640 20971520 27 
0x00000000 163844 oracle 640 20971520 27 
0x00000000 196613 oracle 640 20971520 27 
0x00000000 229382 oracle 640 20971520 27 
0x00000000 262151 oracle 640 20971520 27 
0x00000000 294920 oracle 640 20971520 27 
0xd2776b04 327689 oracle 640 20971520 27 

—— Semaphore Arrays ——–
key semid owner perms nsems 
0xfafd7074 360449 oracle 640 104 

—— Message Queues ——–
key msqid owner perms used-bytes messages

因为 kernel.shmmax 设置过小, 导致分配了多个共享内存段。

下边改大一些:
[root@rac01 ~]# cat /etc/sysctl.conf | grep kernel.shmmax
kernel.shmmax = 2147483648
[root@rac01 ~]# sysctl -p
[root@rac01 ~]# su – oracle
[oracle@rac01 ~]$ sqlplus /as sysdba

SQL*Plus: Release 10.2.0.1.0 – Production on Mon Nov 16 05:50:00 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP
and Data Mining Scoring Engine options

SQL startup force
ORACLE instance started.

Total System Global Area 167772160 bytes
Fixed Size 1218316 bytes
Variable Size 104859892 bytes
Database Buffers 58720256 bytes
Redo Buffers 2973696 bytes
Database mounted.
Database opened.
SQL quit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, Real Application Clusters, Oracle Label Security, OLAP
and Data Mining Scoring Engine options

再看一下:
[root@rac01 ~]# ipcs -sa

—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status 
0xd2776b04 360449 oracle 640 171966464 27 

—— Semaphore Arrays ——–
key semid owner perms nsems 
0xfafd7074 491521 oracle 640 104 

—— Message Queues ——–
key msqid owner perms used-bytes messages
只有一个内存段分配了

3. kernel.shmall

 kernel.shmall  参数是控制共享内存页数。该参数大小为物理内存除以 pagesize;

查看 os 系统页的大小

#getconf PAGESIZE

4096

  这里显示的 pagesize  是 4k,假设一个共享内存段的最大大小是 16G,那么需要共享内存页数是  16GB/4KB=16777216KB/4KB=4194304 (页),也就是 64Bit  系统下 16GB  物理内存,设置  kernel.shmall = 4194304  才符合要求,几乎是原来设置 2097152 的两倍。

4. kernel.shmmni  参数

 shmmni  内核参数是共享内存段的最大数量(注意这个参数不是  shmmin, 是

shmmni, shmmin  表示内存段最小大小  )。shmmni  缺省值  4096 ,一般肯定是够用了。

5. fs.file-max  参数

 fs.file-max 为 512  乘以  processes。

  如 128 个 process,则 file-max=512*128=65536。

6. Oracle  下需要做调整的参数

  在 Oracle 10g  中引入了一个非常重要的参数:SGA_TARGET,这也是 Oracle 10g 的一个新特性。自动共享内存管理(Automatic Shared Memory Management ASMM),控制这一特性的,就仅仅是这个参数 SGA_TARGE。设置这个参数后,你就不需要为每个内存区来指定大小了。SGA_TARGET  指定了 SGA  可以使用的最大内存大小,而 SGA  中各个内存的大小由 Oracle  自行控制,不需要人为指定。

 Oracle  可以随时调节各个区域的大小,使之达到系统性能最佳状态的个最合理大小,并且控制他们之和在 SGA_TARGET  指定的值之内。一旦给 SGA_TARGET  指定值后(默认为 0,即没有启动 ASMM),就自动启动了 ASMM

特性。

 10g  下设置  SGA_TARGET  之后启动 ASSM  特性之后,  只有以下的这些区的内存大小动态共享起来:

* Buffer cache (DB_CACHE_SIZE)

* Shared pool (SHARED_POOL_SIZE)

* Large pool (LARGE_POOL_SIZE)

* Java pool (JAVA_POOL_SIZE)

* Streams pool (STREAMS_POOL_SIZE)

  而 SGA  中的其他区域的内存大小仍然是固定不共享的。它的含义和 SGA_MAX_SIZE  的一样,也表示 SGA  最大的大小,于是它也就有了一个限制,那就是它的大小不能大于 SGA_MAX_SIZE  的大小。

 Oracle10g  下, SGA_MAX_SIZE  仍然表示 SGA  的大小的上限值,而 SGA_TARGET  是 SGA  的所有组件的大小的最大值之和,即当 SGA_TARGET SGA_MAX_SIZE 的时候,oracle  就会忽略 SGA_MAX_SIZE  的值,SGA_TARGET  也就成了 SGA  的在此实例中的上限制,它能动态改变大小,但是不能够大于 SGA_MAX_SIZE  的值。

  当 SGA_TARGET SGA_MAX_SIZE  时,实例重启以后 SGA_MAX_SIZE  就变成 SGA_TARGET  的大小了。

  在 11g  中,这个 SGA_TARGET  只能设置是等于 SGA_MAX_SIZE  的大小了,设置比它小,oracle  会自动帮你调整,设置比它大,那还是出错。现在可以自己想想,oracle 对 SGA_TARGET  的大小处理在往正确的简单的方向前进中。

 SGA_TARGET  带来一个重要的好处就是,能使 SGA  的利用率达到最佳,从而节省内存成本。因为 ASMM  启动后,Oracle  会自动根据需要调整各个区域的大小,大大减少了某些区域内存紧张,而某些区域又有内存空闲的矛盾情况出现。

各参数详解:

kernel.shmmax:

是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值。设置应该足够大,能在一个共享内存段下容纳下整个的 SGA , 设置的过低可能会导致需要创建多个共享内存段,这样可能导致系统性能的下降。至于导致系统下降的主要原因为在实例启动以及 ServerProcess 创建的时候,多个小的共享内存段可能会导致当时轻微的系统性能的降低(在启动的时候需要去创建多个虚拟地址段,在进程创建的时候要让进程对多个段进行“识别”,会有一些影响),但是其他时候都不会有影响。

官方建议值:

32 位 linux 系统:可取最大值为 4GB(4294967296bytes)-1byte,即 4294967295。建议值为多于内存的一半,所以如果是 32 为系统,一般可取值为 4294967295。32 位系统对 SGA 大小有限制,所以 SGA 肯定可以包含在单个共享内存段中。

64 位 linux 系统:可取的最大值为物理内存值 -1byte,建议值为多于物理内存的一半,一般取值大于 SGA_MAX_SIZE 即可,可以取物理内存 -1byte。例如,如果为 12GB 物理内存,可取 12*1024*1024*1024-1=12884901887,SGA 肯定会包含在单个共享内存段中。 

kernel.shmall:

  该参数控制可以使用的共享内存的总页数。Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大大小是 16G,那么需要共享内存页数是 16GB/4KB=16777216KB /4KB=4194304(页),也就是 64Bit 系统下 16GB 物理内存,设置 kernel.shmall = 4194304 才符合要求(几乎是原来设置 2097152 的两倍)。这时可以将 shmmax 参数调整到 16G 了,同时可以修改 SGA_MAX_SIZE 和 SGA_TARGET 为 12G(您想设置的 SGA 最大大小,当然也可以是 2G~14G 等,还要协调 PGA 参数及 OS 等其他内存使用,不能设置太满,比如 16G)

kernel.shmmni:

该参数是共享内存段的最大数量。shmmni 缺省值 4096,一般肯定是够用了。

fs.file-max:

该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表 linux 系统中可以打开的文件的数量。

fs.aio-max-nr:

  此参数限制并发未完成的请求,应该设置避免 I / O 子系统故障。

kernel.sem:

以 kernel.sem = 250 32000 100 128 为例:

  250 是参数 semmsl 的值,表示一个信号量集合中能够包含的信号量最大数目。

  32000 是参数 semmns 的值,表示系统内可允许的信号量最大数目。

  100 是参数 semopm 的值,表示单个 semopm()调用在一个信号量集合上可以执行的操作数量。

  128 是参数 semmni 的值,表示系统信号量集合总数。

net.ipv4.ip_local_port_range:

  表示应用程序可使用的 IPv4 端口范围。

net.core.rmem_default:

表示套接字接收缓冲区大小的缺省值。

net.core.rmem_max:

表示套接字接收缓冲区大小的最大值。

net.core.wmem_default:

表示套接字发送缓冲区大小的缺省值。

net.core.wmem_max:

表示套接字发送缓冲区大小的最大值。

“oracle rac 内核参数的详细介绍”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注丸趣 TV 网站,丸趣 TV 小编将为大家输出更多高质量的实用文章!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-28发表,共计7564字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)