Saturday, October 24, 2009

Shared Memory Tuning: startup database - ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device

SQL> startup
ORA-27102: out of memory
Linux-x86_64 Error: 28: No space left on device

I have used RHEL X86_64 + memory (32GB) and setted sga_max_size=20G + sga_target=20G and ...
$ cat /proc/sys/kernel/shmmax
26843545600
What wrong with my kernel tuning... So, I checked metalink (301830.1) and some recommend from RHEL
They told; set SHMALL to the total amount of physical RAM divided by page size.
SHMALL =>Total amount of shared memory available (bytes or pages)
then:
Check Page Size:
$ getconf PAGE_SIZE
4096
Determine the system wide maximum number of shared memory pages:
$ cat /proc/sys/kernel/shmall
2097152
My system 64bits with memory 32GB, then 1024 * 1024 * 1024 * 32 / 4096 = 8388608
So, change kernel.shmall = 8388608
$ su - root
# echo 8388608 > /proc/sys/kernel/shmall
Or modify /etc/sysctl.conf file:
kernel.shmall=8388608
and
# sysctl -p
After changed... check and startup database again:
$ cat /proc/sys/kernel/shmall
8388608
SQL> startup
.
.
.
--- NO ERROR ---
From this idea with memory 32GB
mem=$(free|grep Mem|awk '{print$2}')
totmem=$(echo "$mem*1024"|bc)
huge=$(grep Hugepagesize /proc/meminfo|awk '{print $2}')
max=$(echo "$totmem*75/100"|bc)
all=$(echo "$max/$huge"|bc)
echo "kernel.shmmax = $max"
echo "kernel.shmall = $all"
Result:
kernel.shmmax = 25213120512, kernel.shmall = 12311094

However, This case "ORA-27102: out of memory Linux-X86_64 Error: 28: No space left on device" , solved by set SHMALL = MemTotal(byte)/PAGE_SIZE
and ...
I hope to hear your idea about kernel tuning with Oracle Database.

1 comment:

Kris BP said...

Cannot thank you enough. Your fix saved my time and helped me fix the issue on my AWS database quickly.