Pages

Wednesday, September 24, 2014

Linux Kernel Tuning for Oracle Database 10g

Linux Kernel Tuning for Oracle 10G
==========================

Note:
Physical memory is 256GB
SHMALL is 240GB in sysctl.conf
SHMMAX is 210GB in sysctl.conf
sga_max_size is 200GB in init.ora
processes is 5000 in init.ora


- Make sure i/o scheduler to deadline (/etc/grub.conf)

# cat /sys/block/sd?/queue/scheduler
noop [deadline] cfq

title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ elevator=deadline
        initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img

Note. deadline scheduler is default in OL5 UEK2Q5.


- Make sure transparent_hugepage is disabled (/etc/grub.conf)

title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
        root (hd0,0)
        kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
        initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img

Note: there is no /sys/kernel/mm/transparent_hugepage in OL5 UEK2Q5
https://oss.oracle.com/el5/docs/RELEASE-NOTES-UEK2-QU5-en.html


- Kernel shared memory

kernel.shmall = 240*1024*1024*1024/4096
kernel.shmmax = 210*1024*1024*1024


- Kernel semaphores

check processes parameter in init.ora
SEMMSL = processes + 10
SEMMNS = processes * 128
SEMOPM = processes + 10
SEMMNI = 128

kernel.sem = SEMMSL SEMMNS SEMOPM SEMMNI


- Enable manual HugePages

check sga_max_size parameter in init.ora

X = Hugepagesize (# grep Hugepage /proc/meminfo)
Y = sga_max_size (in KB)
Z = Y / X

vm.nr_hugepages = Z + 10


- Put this settings into /etc/sysctl.conf

net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 262144
net.core.wmem_default = 262144
net.core.rmem_max = 262144
net.core.wmem_max = 262144
net.ipv4.tcp_rmem = 4096 262144 4194304
net.ipv4.tcp_wmem = 4096 262144 262144
kernel.shmall = 62914560
kernel.shmmax = 225485783040
kernel.shmmni = 4096
kernel.sem = 5010 641280 5010 128
vm.nr_hugepages =  102410
vm.swappiness = 0
vm.dirty_background_ratio = 3
vm.dirty_ratio = 15
vm.dirty_expire_centisecs = 500
vm.dirty_writeback_centisecs = 100
vm.min_free_kbytes = 1024


- Set ulimit parameter for oracle (/etc/security/limits.conf)

Note. memlock is sga_max_size in KB.

oracle soft memlock 209715200
oracle hard memlock 209715200
oracle          soft    nofile          63536
oracle          hard    nofile          63536
oracle          soft    nproc           16384
oracle          hard    nproc           16384


- Reboot your server and start your database

- Make sure oracle use hugepages

# grep Huge /proc/meminfo

HugePages_Total:   102410
HugePages_Free:    56268
HugePages_Rsvd:    55235
HugePages_Surp:        0
Hugepagesize:       2048 kB


- Check the HugePages_Rsvd, if it is still 0, try to reduce your sga_max_size parameter in pfile/spfile without change sysctl.conf and limits.conf anymore.
For example, try sga_max_size is 198GB.
Shutdown and start the database, and make sure HugePages_Rsvd is not empty.

No comments: