Pessoal, neste post ( apesar de bem direcionado para Oracle ) vou trazer algumas informações úteis sobre parametrização de memória no Linux.
TMPFS
Partição virtual que representa a área reservada para memória compartilhada ( shared memory ).
Esta partição pode ser encontrada no arquivo /etc/fstab e normalmente tem o tamanho equivalente a metade da memória RAM.
* AO FINAL DO ARTIGO TEMOS ALGUNS MACETES PARA ALTERAR O TAMANHO DA TMPFS
SHARED MEMORY
É uma parte da memória reservada pelo sistema operacional para que processos gravem e leiam informações. Inclusive leiam informações gravadas por outros processos.
Alguns processos do Oracle usam shared memory para comunicação, troca de informações ou mesmo compartilhamento de objetos. (SGA, por ex.)
Uma SHARED MEMORY sub-dimensionada ou uma SGA mal dimensionada poderão trazer erros como:
COMO DIMENSIONAR A SHARED MEMORY?
É muito complicado dar uma receita de como definir o tamanho da SHARED MEMORY. Normalmente vai depender da finalidade do servidor, da finalidade do banco de dados, etc, etc.
Porém vamos explicar as recomendações da ORACLE para este tópico e como uma base convencional trabalha.
COMO VERIFICAR O DIMENSIONAMENTO DA MINHA SHARED MEMORY?
No linux existem duas maneiras de verificar como está sua shared memory:
– Através do comando sysctl
– Através dos arquivos dentro de /proc/sys/kernel
Existem, basicamente, 3 parâmetros para trabalharmos a shared memory:
– kernel.shmmax: Tamanho máximo de um segmento de shared memory.
– kernel.shmmni: Número máximo de segmentos de shared memory.
– kernel.shmall: Número de página alocáveis na shared memory.
Verifique o estado de seu sistema com:
ou com:
Agora vamos ao que interessa, como definir a SHARED MEMORY….
A ORACLE RECOMENDA:
kernel.shmmax: Deve ser calculado como metade do tamanho da memória RAM ( em Bytes ).
Ex: se sua memória RAM tem 16777216 kB, então sua shmmax deverá ser do tamanho de 8589934592.
kernel.shmmni: A Oracle recomenda que este parâmetro seja no mínimo de 4096. Normalmente isto é suficiente.
kernel.shmall: A recomendação é que a shmall seja igual ao total de RAM dividido pelo tamanho de cada página.
Ex: se sua memória RAM tem 16777216 kB e sua página tem o tamanho de 4096, então sua shmall deverá ser de 4194304.
OBS: para ver o tamanho de sua página execute:
E aí, curtiu a receita de bolo pra definir a shared memory?
COMO SETAR OS NOVOS VALORES DE SHARED MEMORY?
Edite o arquivo /etc/sysctl.conf e altere os parametros da seguinte forma:
e para atualizar o sistema execute:
DICAS
Como alterar o tamanho da TMPFS?
de maneira persistent: altere o arquivo /etc/fstab e adicione a opção size=M na linha do tmpfs como no exemplo:
Obs: evite deixar a tmpfs acima de 75% da RAM.
Pessoal, espero que este artigo possa ajudá-los com definições de memória.
Link Interessante para estudo:
Recomendações RHEL para Oracle
Forte abraço a todos!
Mto legal este post. Parabéns!
Parabéns pelo post, muito bom.
Fiquei com uma duvida, o valor de shmall está correto?
kernel.shmall = TotalMemoria / PageSize
kernel.shmall = (33554432/4096)
kernel.shmall = 8192
Muito explicativo o post, mas fiquei com uma duvida…
Quando eu tenho mais de uma instancia no banco de dados, sabendo que ‘SHMMAX’ é o tamanho máximo de um único segmento de memoria compartilhada definida em “bytes”, quando tenho mais de uma instancia configurando, por logica terei mais de um segmento de memoria compartilhado no mesmo server.
Desta forma, o valor SHMMAX deverá ter a soma de todas as SGA configuradas em meu Database ?