发表于:2007.05.14 21:49
分类: oracle 管理
出处:http://m77m78.itpub.net/post/125/287708
---------------------------------------------------------------
和Oracle安装有关的Linux参数
设置的参数
参数名字 | 含义 | 设置 |
设置共享内存 | 共享内存通过将通用的结构和数据放在共享内存段中,使得进程可以对它们进行访问。这是现有最快的进程间通信(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 命令使得内核改变立即生效。以后重启机器也会按照这些配置修改机器环境
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
还需要在/etc/security/limits.conf文件增加如下内容:
oracle soft nofile 65536
oracle hard nofile 65536
oracle soft nproc 16384
oracle hard nproc 16384