Configurando o Oracle 10G para utilizar mais do que 8 GB de ram

E ai galera, aqui eu vou mostrar como habilitar o Oracle 10 G a utilizar mais do que 8GB de ram.

O problema aqui começa quando tentamos modificar a sga o sistema aceita a modificação porém quando vamos subir o banco temos uma mensagem que não temos memória suficiente.

Mais na verdade o que acontece é que não temos memória compartilhada suficiente o default do sistema CentOS ou SuSE é 8GB podemos conferir isso da seguinte forma

ipcs -ml
- Limites da memória compartilhada -
max number of segments = 4096
max seg size (kbytes) = 32768
max total shared memory (kbytes) = 8388608
min seg size (bytes) = 1

Note que o max total shared memory é 8388608 que da um total de 8GB.

Agora vamos ver a variável do kernel que controla isso

cat /proc/sys/kernel/shmall
2097152

Agora vamos pegar o tamanho do arquivo de paginação

getconf PAGE_SIZE
4096

Agora podemos calcular a quantidade de memória que podemos disponibilizar que é 2097152 * 4096 = 8589934592 podemos dividir isso e vamos ter 8589934592/1024/1024/1024 = 8GB

Agora podemos modificar a nossa variável shmall para 4194304 * 4096 = 17179869184 podemos dividir isso e vamos ter 17179869184/1024/1024/1024 = 16GB assim vamos poder utilizar até 16GB de ram para o Oracle sempre utilize uns 80% da memória total no máximo para o Oracle.

Vamos fazer esta alteração da variável de controle do kernel

echo 4194304 > /proc/sys/kernel/shmall

Agora podemos deixar esta variável na inicialização do sistema da seguinte forma

echo "kernel.shmall=4194304" >> /etc/sysctl.conf

Agora vamos alterar a SGA via sqlplus

Vamos logar no sqlplus

sqlplus /nolog
SQL*Plus: Release 10.2.0.3.0 - Production on Fri May 24 08:19:35 2013
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
SQL> connect / as sysdba
Connected to an idle instance.

Agora vamos alterar o sga_max_size que controla até onde a nossa SGA pode chegar

SQL> alter system set sga_max_size=14G scope=spfile;
System altered.

Agora vamos alterar o valor inicial que a sga_target que controla o valor inicial da nossa SGA

SQL> alter system set sga_target=14G scope=spfile;
System altered.

Agora vamos baixar o banco, pode demorar o banco para baixar mas não desligue ele de forma inadequada pode dar a maior merda

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.

Agora vamos subir o banco de dados novamente

SQL> startup
ORACLE instance started.
Total System Global Area 4294967296 bytes
Fixed Size 2078264 bytes
Variable Size 1610615240 bytes
Database Buffers 2667577344 bytes
Redo Buffers 14696448 bytes
Database mounted.
Database opened.

Agora o nosso banco esta com 14GB de ram :D

Referências