Configuring Kernel Parameters For Oracle 10g Installation

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 4

Configuring Kernel Parameters For Oracle 10g Installation

This section documents the checks and modifications to the Linux kernel that should be made by the DBA to support  Oracle
Database 10g. Before detailing these individual kernel parameters, it is important to fully understand the key kernel
components that are used to support the Oracle Database environment.

The kernel parameters and shell limits presented in this section are recommended values only as documented by Oracle. For
production database systems, Oracle recommends that we tune these values to optimize the performance of the system.

Verify that the kernel parameters shown in this section are set to values greater than or equal to the recommended values.

Shared Memory  :  Shared memory allows processes to access common structures and data by placing them in a shared
memory segment. This is the fastest form of  Inter-Process Communications (IPC) available - mainly due to the fact that no
kernel involvement occurs when data is being passed between the processes. Data does not need to be copied between
processes .

Oracle makes use of shared memory for its Shared Global Area (SGA) which is an area of memory that is shared by all
Oracle backup and foreground processes. Adequate sizing of the SGA is critical to Oracle performance since it is responsible
for holding the database buffer cache, shared SQL, access paths, and so much more.

To determine all current shared memory limits, use the following :

# ipcs  -lm
------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 4194303
max total shared memory (kbytes) = 1073741824
min seg size (bytes) = 1 

The following list describes the kernel parameters that can be used to change the shared memory configuration for the
server:

1.) shmmax  -   Defines the maximum size (in bytes) for a shared memory segment. The Oracle SGA is comprised of shared
memory and it is possible that incorrectly setting shmmax  could limit the size of the SGA. When setting shmmax, keep in
mind that the size of the SGA should fit within one shared memory segment. An inadequate shmmax setting could result in
the following:
ORA-27123: unable to attach to shared memory segment

We can determine the value of shmmax by performing the following :

# cat /proc/sys/kernel/shmmax
4294967295

For most Linux systems, the default value for shmmax is 32MB. This size is often too small to configure the Oracle SGA.
The default value for shmmax in CentOS 5 is 4GB which is more than enough for the Oracle configuration. Note that this
value of 4GB is not the "normal" default value for shmmax in a Linux environment  inserts the following two entries in the
file /etc/sysctl.conf:

# Controls the maximum shared segment size, in bytes


kernel.shmmax = 4294967295

2.) shmmni   :   This kernel parameter is used to set the maximum number of shared memory segments system wide. The
default value for this parameter is 4096. This value is sufficient and typically does not need to be changed. We can determine
the value of shmmni by performing the following:

# cat /proc/sys/kernel/shmmni 
4096

3.) shmall   :   This parameter controls the total amount of shared memory (in pages) that can be used at one time on the
system. The value of this parameter should always be at least: We can determine the value of shmall by performing the
following :

# cat /proc/sys/kernel/shmall 
268435456
For most Linux systems, the default value for shmall is 2097152 and is adequate for most configurations. The default value
for shmall in CentOS 5 is 268435456 (see above) which is more than enough for the Oracle configuration described in this
article. Note that this value of 268435456 is not the "normal" default value for shmall in a Linux environment , inserts the
following two entries in the file/etc/sysctl.conf:

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


kernel.shmall = 268435456

4.) shmmin :  This parameter controls the minimum size (in bytes) for a shared memory segment. The default value for
shmmin is 1 and is adequate for the Oracle configuration described in this article. We  can determine the value of shmmin by
performing the following:

# ipcs -lm | grep "min seg size"


min seg size (bytes) = 1

Semaphores : 
After the DBA has configured the shared memory settings, it is time to take care of configuring the semaphores. The best
way to describe a semaphore is as a counter that is used to provide synchronization between processes (or threads within a
process) for shared resources like shared memory. Semaphore sets are supported in System V where each one is a counting
semaphore. When an application requests semaphores, it does so using "sets". To determine all current semaphore limits, use
the following:

#  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

We  can also use the following command:


# cat /proc/sys/kernel/sem
250     32000   32      128

The following list describes the kernel parameters that can be used to change the semaphore configuration for the server:

i.) semmsl - This kernel parameter is used to control the maximum number of semaphores per semaphore set. Oracle
recommends setting semmsl to the largest PROCESS instance parameter setting in the init.ora file for all databases on the
Linux system plus 10. Also, Oracle recommends setting the semmsl to a value of no less than 100.

ii.) semmni - This kernel parameter is used to control the maximum number of semaphore sets in the entire Linux system.
Oracle recommends setting semmni to a value of no less than 100.

iii.) semmns - This kernel parameter is used to control the maximum number of semaphores (not semaphore sets) in the
entire Linux system. Oracle recommends setting the semmns to the sum of the PROCESSES instance parameter setting for
each database on the system, adding the largest PROCESSES twice, and then finally adding 10 for each Oracle database on
the system. Use the following calculation to determine the maximum number of semaphores that can be allocated on a Linux
system. It will be the lesser of:
SEMMNS  -or-  (SEMMSL * SEMMNI)

iv.) semopm - This kernel parameter is used to control the number of semaphore operations that can be performed per semop
system call. The semop system call (function) provides the ability to do operations for multiple semaphores with one semop
system call. A semaphore set can have the maximum number of semmslsemaphores per semaphore set and is therefore
recommended to set semopm equal to semmsl in some situations. Oracle recommends setting the semopm to a value of no
less than 100.

File Handles :
When configuring the Linux server, it is critical to ensure that the maximum number of file handles is large enough. The
setting for file handles denotes the number of open files that you can have on the Linux system. Use the following command
to determine the maximum number of file handles for the entire system:

# cat /proc/sys/fs/file-max 
102312

Oracle recommends that the file handles for the entire system be set to at least 65536.  We can query the current usage of file
handles by using the following :
# cat /proc/sys/fs/file-nr
3072    0       102312

The file-nr file displays three parameters:


•        Total allocated file handles
•        Currently used file handles
•        Maximum file handles that can be allocated

If we need to increase the value in /proc/sys/fs/file-max, then make sure that the ulimit is set properly. Usually for Linux 2.4
and 2.6 it is set to unlimited. Verify theulimit setting my issuing the ulimit command : 

# ulimit
unlimited

IP Local Port Range  :


Oracle strongly recommends to set the local port range ip_local_port_range for outgoing messages to "1024 65000" which is
needed for systems with high-usage. This kernel parameter defines the local port range for TCP and UDP traffic to choose
from.
The default value for ip_local_port_range is ports 32768 through 61000 which is inadequate for a successful Oracle
configuration. Use the following command to determine the value of ip_local_port_range:

# cat /proc/sys/net/ipv4/ip_local_port_range
32768   61000

Networking Settings  : 
With Oracle 9.2.0.1 and later, Oracle makes use of UDP as the default protocol on Linux for inter-process communication
(IPC), such as Cache Fusion and Cluster Manager buffer transfers between instances within the RAC cluster.

Oracle strongly suggests to adjust the default and maximum receive buffer size (SO_RCVBUF socket option) to 1MB and
the default and maximum send buffer size (SO_SNDBUF socket option) to 256KB.The receive buffers are used by TCP and
UDP to hold received data until it is read by the application. The receive buffer cannot overflow because the peer is not
allowed to send data beyond the buffer size window.

This means that datagrams will be discarded if they don't fit in the socket receive buffer, potentially causing the sender to
overwhelm the receiver. Use the following commands to determine the current buffer size (in bytes) of each of the IPC
networking parameters:

# cat /proc/sys/net/core/rmem_default
109568

# cat /proc/sys/net/core/rmem_max
131071

# cat /proc/sys/net/core/wmem_default
109568

# cat /proc/sys/net/core/wmem_max
131071

Setting Kernel Parameters for Oracle


If the value of any kernel parameter is different to the recommended value, they will need to be modified. For this article, I
identified and provide the following values that will need to be added to the/etc/sysctl.conf file which is used during the boot
process.

kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
After adding the above lines to the /etc/sysctl.conf file, they persist each time the system reboots. If we would like to make
these kernel parameter value changes to the current system without having to first reboot, enter the following command:

# /sbin/sysctl –p

You might also like