共计 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 小编将为大家输出更多高质量的实用文章!