设置的参数
参数名字
|
含义
|
设置
|
设置共享内存
|
共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信(IPC)方式 主要是因为数据在进程之间传递时没有涉及到内核的操作。在进程之间不需要复制数据。
Oracle 将共享内存用于它的系统全局区 (SGA),这是一个由所有的 Oracle 备份进程及前台进程所共享的内存区域。为 SGA 分配足够的容量对于 Oracle 的性能非常重要,因为它负责保存数据库缓冲区高速缓存、共享 SQL、访问路径以及更多。
要确定所有共享内存的限制,可使用以下命令:
# ipcs -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1
| |
SHMMAX
|
SHMMAX 参数定义共享内存段的最大大小(以字节为单位)。
|
Oracle SGA 由共享内存组成,且错误设置 SHMMAX 可能会限制 SGA 的大小。在设置 SHMMAX 时,切记 SGA 的大小应该适合于一个共享内存段。SHMMAX 设置不足可能会导致以下问题:
ORA-27123:unable to attach to shared memory segment
您可以通过执行以下命令来确定 SHMMAX 的值:
# cat /proc/sys/kernel/shmmax
33554432
SHMMAX 的默认值为 32MB。通常,这个值对于配置 Oracle SGA 而言太小了。我通常使用以下任一方法将 SHMMAX 参数设置为 2GB:
* 通过直接更改 /proc 文件系统,你无需重新启动计算机便可以改变 SHMMAX 的缺省设置。可以使用以下方法动态设置 SHMMAX 的值。通过将此命令置于 /etc/rc.local 启动文件中可以使它永久有效:
# echo "2147483648" > /proc/sys/kernel/shmmax
* 您还可以使用 sysctl 命令来更改 SHMMAX 的值:
# sysctl -w kernel.shmmax=2147483648
* 最后,通过将该内核参数插入到 /etc/sysctl.conf 启动文件中,您可以使这种更改永久有效:
# echo "kernel.shmmax=2147483648" >> /etc/sysctl.conf
|
SHMMNI
|
我们现在看一下 SHMMNI 参数。这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的缺省值是 4096。该值足以满足需要,因此通常无需更改。
|
可以通过执行以下命令来确定 SHMMNI 的值:
# cat /proc/sys/kernel/shmmni
4096
|
SHMALL
|
该参数控制系统一次可以使用的共享内存总量(以页为单位)
|
简言之,该参数的值始终应至少为:
ceil(SHMMAX/PAGE_SIZE)
SHMALL 的默认大小为 2097152,并可以使用以下命令进行查询:
# cat /proc/sys/kernel/shmall
2097152
SHMALL 的默认设置足以满足 Oracle RAC 10g 安装的需要。
(注意:i386 平台上的 Red Hat Linux 中的页面大小为 4,096 字节。但您可以使用 bigpages,它支持配置更大的内存页面大小。)
|
|
|
|
设置信号
|
对信号的最佳描述是,它是用于在共享资源(如共享内存)的进程(或进程中的线程)之间提供同步的计数器。Unix System V 支持信号集,其中的每个信号都是一个信号计数。当应用程序请求信号时,它使用“集合”来完成此工作。
要确定所有信号限制,可使用以下命令:
# ipcs -ls
------ Semaphore Limits --------
max number of arrays = 128
max semaphores per array = 250
max semaphores system wide = 32000
max ops per semop call = 32
semaphore max value = 32767
您还可以使用以下命令:
# cat /proc/sys/kernel/sem
250 32000 32 128
| |
SEMMSL
|
SEMMSL 内核参数用于控制每个信号集合的最大信号数。
|
Oracle 建议将 SEMMSL 设置为 init.ora 文件(适用于 Linux 系统上所有数据库)中的最大 PROCESS 实例参数设置再加上 10。此外,Oracle 建议将 SEMMSL 设置为不小于 100。
|
SEMMNI
|
SEMMNI 内核参数用于控制整个 Linux 系统中信号集的最大数量。
|
Oracle 建议将 SEMMNI 设置为不小于 100。
|
SEMMNS
|
SEMMNS 内核参数用于控制整个 Linux 系统中的信号(而非信号集)的最大数量
|
Oracle 建议将 SEMMNS 设置为系统上每个数据库的 PROCESSES 实例参数设置之和,加上最大的 PROCESSES 的两倍,最后为系统上的每个 Oracle 数据库加上 10。
使用以下计算式确定可以在 Linux 系统上分配的信号的最大数量。它将是以下两者中较小的一个值:
SEMMNS — 或 — (SEMMSL * SEMMNI) 。
|
SEMOPM
|
SEMOPM 内核参数用于控制每个 semop 系统调用可以执行的信号操作数。
|
semop 系统调用(函数)能够使用一个 semop 系统调用完成多个信号的操作。一个信号集可以拥有每个信号集中最大数量的 SEMMSL,因此建议将 SEMOPM 设置为等于 SEMMSL。
Oracle 建议将 SEMOPM 设置为不小于 100。
|
设置信号内核参数
|
我想更改(增加)的唯一参数是 SEMOPM。所有其他的缺省设置可以完全满足我们的示例安装。
* 您可以通过直接更改 /proc 文件系统,不必重新启动机器而更改所有信号设置的缺省设置。该方法将以下内容置于 /etc/rc.local 启动文件中:
# echo "250 32000 100 128" > /proc/sys/kernel/sem
* 您还可以使用 sysctl 命令来更改所有信号设置的值:
# sysctl -w kernel.sem="250 32000 100 128"
* 最后,可以通过将内核参数插入到 /etc/sysctl.conf 启动文件中以使此更改永久有效:
# echo "kernel.sem=250 32000 100 128" >> /etc/sysctl.conf
| |
|
|
|
设置文件句柄
|
配置 Red Hat Linux 服务器时,必须确保最大文件句柄数足够大。文件句柄的设置表示您在 Linux 系统上可以打开的文件数。
使用以下命令来确定整个系统中文件句柄的最大数量:
# cat /proc/sys/fs/file-max
32768
Oracle 建议将整个系统的文件句柄值至少设置为 65536。
* 通过直接更改 /proc 文件系统,您可以不必重新启动机器而改变文件句柄最大数量的默认设置。该方法将以下内容置于 /etc/rc.local 启动文件中:
# echo "65536" > /proc/sys/fs/file-max
* 您还可以使用 sysctl 命令来更改 SHMMAX 的值:
# sysctl -w fs.file-max=65536
* 最后,可以通过将内核参数插入到 /etc/sysctl.conf 启动文件中以使此更改永久有效:
# echo "fs.file-max=65536" >> /etc/sysctl.conf
可以通过使用以下命令查询文件句柄的当前使用情况:
# cat /proc/sys/fs/file-nr
613 95 32768
file-nr 文件显示了三个参数:分配的文件句柄总数、当前使用的文件句柄数以及可以分配的最大文件句柄数。
(注意:如果需要增大 /proc/sys/fs/file-max 中的值,请确保正确设置 ulimit。对于 2.4.20,通常将其设置为 unlimited。使用 ulimit 命令来验证 ulimit 设置:
# ulimit
unlimited
| |
|
|
|
|
|
|
|
|
|
如何设置
1. 通过在/etc/sysctl.conf中配置
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000 修改后运行sysctl -p 命令使得内核改变立即生效。以后重启机器也会按照这些配置修改机器环境
kernel.shmmax = 536870912
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000 修改后运行sysctl -p 命令使得内核改变立即生效。以后重启机器也会按照这些配置修改机器环境
2. 在/etc/rc.d/rc.local中直接写入/proc中去在/etc/rc.d/rc.local文件的最后,加入
echo 8192 > /proc/sys/fs/file-max
echo 32768 > /proc/sys/fs/inode-max
echo 536870912 > /proc/sys/kernel/shmmax
echo 4096 > /proc/sys/kernel/shmmin
echo 8192 > /proc/sys/fs/file-max
echo 32768 > /proc/sys/fs/inode-max
echo 536870912 > /proc/sys/kernel/shmmax
echo 4096 > /proc/sys/kernel/shmmin
还需要在/etc/security/limits.conf文件增加如下内容:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384