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