Quando falamos de Oracle no Linux logo pensamos em HugePages, mas no Solaris o recurso equivalente é o DISM (Dynamic Intimate Shared Memory). O objetivo é simples: entregar memória grande e contínua para a SGA, evitando fragmentação e reduzindo overhead.
Não é todo dia que a gente esbarra em um Oracle rodando em Solaris. Hoje quase tudo vai parar em Linux, mas ainda tem muito sistema crítico por aí em servidores Solaris. Justamente por isso resolvi deixar registrada esta referência, para quando você topar com um desses ambientes e precisar ajustar memória sem ficar tateando no escuro.
Sem Large Pages o banco usa páginas pequenas, o que aumenta consumo de CPU e pode causar swap. Com DISM ativo a SGA fica estável na RAM e o desempenho melhora de forma direta.
Neste post vamos configurar Large Pages no Solaris do zero, usando como exemplo a instância BIVEN no servidor SOLDBPRD01. Formato simples, estilo prático, passo a passo de verdade.
Benefícios da Configuração de HugePages
- Evita uso de swap: Mantém a SGA alocada em memória RAM, evitando quedas de desempenho.
- Reduz consumo de CPU: Diminui a sobrecarga do sistema ao reduzir a fragmentação da memória.
- Acelera o tempo de resposta: Acesso mais eficiente à memória melhora a performance do banco.
- Aumenta a escalabilidade: Permite uma melhor gestão de grandes volumes de memória compartilhada.
Passo 01 – Confirmar sistema operacional e arquitetura
root@SOLDBPRD01:~# uname -a
SunOS SOLDBPRD01 5.11 11.4.80.189.2 sun4v sparc sun4v logical-domain
root@SOLDBPRD01:~# uname -r
5.11
root@SOLDBPRD01:~# uname -v
11.4.80.189.2
root@SOLDBPRD01:~# isainfo -v
64-bit sparcv9 applications
root@SOLDBPRD01:~#ShellSessionRodando Solaris 11.4 SPARC 64 bits,
Passo 02 – Verificar memória disponível no servidor
root@SOLDBPRD01:~# prtconf | grep Memory
Memory size: 122880 Megabytes
root@SOLDBPRD01:~# ShellSessionO servidor tem 120GB de RAM.
O valor de 50% da RAM para a SGA foi definido para este ambiente específico, mas essa porcentagem pode variar conforme a necessidade de cada sistema. O restante da memória (50%) foi considerado suficiente para atender ao sistema operacional e ao uso da PGA.
Definir a Distribuição da Memória
| Componente | Percentual | Tamanho sugerido | Objetivo |
|---|---|---|---|
| SGA (Large Pages) | 50% | 60GB | SGA fixa em memória, sem swap e com alto desempenho |
| PGA + Processos Oracle | 30% | 36GB | Suporte a sort, hash joins, paralelismo e processos background |
| Sistema Operacional | 20% | 24GB | Kernel, libs, ZFS, SSH, listeners, serviços e folga de uso |
Passo 03 – Verificar se já existe configuração de SHM
root@SOLDBPRD01:~# cat /etc/project | grep oracle
user.oracle:1101:oracle:::
root@SOLDBPRD01:~#ShellSessionSem configuração de Shared Memory
Passo 04 – Configurar Large Pages no projeto do Oracle
root@SOLDBPRD01:~# projmod -s -K "process.max-file-descriptor=(basic,560000,deny),(privileged,560000,deny)" user.oracle
root@SOLDBPRD01:~# projmod -s -K "process.max-sem-nsems=(priv,4096,deny)" user.oracle
root@SOLDBPRD01:~# projmod -s -K "process.max-stack-size=(basic,8070450532247928832,deny),(privileged,8070450532247928832,deny)" user.oracle
root@SOLDBPRD01:~# projmod -s -K "project.max-lwps=(privileged,60000,deny)" user.oracle
root@SOLDBPRD01:~# projmod -s -K "project.max-sem-ids=(priv,2048,deny)" user.oracle
root@SOLDBPRD01:~# projmod -s -K "project.max-shm-ids=(priv,2048,deny)" user.oracle
root@SOLDBPRD01:~# projmod -s -K "project.max-shm-memory=(privileged,53687091200,deny)" user.oracle
root@SOLDBPRD01:~#ShellSessionComo o /etc/project deve ficar após a configuração
root@SOLDBPRD01:~# cat /etc/project | grep oracle
user.oracle:1101:oracle:::process.max-file-descriptor=(basic,560000,deny),(privileged,560000,deny);process.max-sem-nsems=(priv,4096,deny);process.max-stack-size=(basic,8070450532247928832,deny),(privileged,8070450532247928832,deny);project.max-lwps=(privileged,60000,deny);project.max-sem-ids=(priv,2048,deny);project.max-shm-ids=(priv,2048,deny);project.max-shm-memory=(privileged,53687091200,deny)
root@SOLDBPRD01:~#ShellSessionExplicando cada parâmetro
| Parâmetro | Pra que serve |
|---|---|
process.max-file-descriptor | Aumenta limite de arquivos abertos. Oracle usa muitos datafiles/redologs. |
process.max-sem-nsems | Semáforos internos do Oracle para sincronização entre processos. |
process.max-stack-size | Tamanho da pilha dos processos Oracle. Evita crash em cargas pesadas. |
project.max-lwps | Quantidade de threads permitidas. Diretamente ligado a sessões do banco. |
project.max-sem-ids | Controla número de conjuntos de semáforos para IPC. |
project.max-shm-ids | Quantidade de segmentos de memória compartilhada. |
project.max-shm-memory | O mais importante. Define limite de memória compartilhada para SGA (HugePages). |
Se você esquecer o último, Oracle não usará LargePages.
Passo 05 – Aplicar a configuração reiniciando o servidor
root@SOLDBPRD01:~# reboot
ShellSessionO Oracle só utiliza LargePages após reinicialização.
Passo 06 – Ajustar parâmetros da SGA na instância
(com o detalhe que ninguém te conta)
Antes de subir o banco usando páginas grandes, precisamos definir o tamanho da SGA.
Mas existe uma pegadinha que derruba muita gente:
>> Se sga_target for igual a sga_max_size, o Oracle pode não alocar HugePages.
>> Solaris usa granularidade de 2GB por bloco DISM.
>> Se o valor da SGA não encaixar em múltiplos de 2GB, parte da memória fica fora das páginas grandes.
Então aqui vai a configuração recomendada para o nosso ambiente:
✔ sga_target múltiplo de 2GB
✔ sga_max_size um pouco maior mas múltiplo de 2GB
SQL> alter system set sga_target=44G scope=spfile sid='*';
SQL> alter system set sga_max_size=46G scope=spfile sid='*';
SQL> alter system set use_large_pages='ONLY' scope=spfile sid='*';
SQL> shutdown immediate;
SQL> startup;
SQL>SQLO Oracle só utiliza LargePages após reinicialização.
Passo 07 – Validar se o Oracle está usando Large Pages (DISM)
Depois do restart do banco, verificamos se a instância realmente alocou memória usando páginas grandes.
Localizar o PMON
root@SOLDBPRD01:~# ps -ef | grep pmon | grep BIVEN
oracle 91365 1 0 12:38:23 ? 0:28 ora_pmon_BIVEN1
root@SOLDBPRD01:~# ShellSessionValidar o uso de HugePages
root@SOLDBPRD01:~# pmap -xs 91365 | grep -i dism
0000000380000000 262144 262144 - - 256M rwxs--- [ dism shmid=0x1f000073 ]
0000000400000000 2097152 - - - - rwxs--- [ dism shmid=0x1f000074 ] ← sobra do MAX (46G - 44G)
0000000680000000 46137344 46137344 - - 2G rwxs--- [ dism shmid=0x1f000074 ] ← SGA_TARGET utilizada
0000000D80000000 1835008 1835008 - - 8K rwxs--- [ dism shmid=0x1f000074 ]
0000000E00000000 8 - - - 8K rwxs--- [ dism shmid=0x1f000075 ]
0000000E00002000 8 8 - - 8K rwxs--- [ dism shmid=0x1f000075 ]
root@SOLDBPRD01:~#
ShellSessionSe esse cenário apareceu, missão cumprida.
Seu Oracle está rodando com HugePages no Solaris.
Interpretação do resultado
| Linha | Significado |
|---|---|
46137344 KB ≈ 44G | SGA usada 100% via HugePages |
2097152 KB ≈ 2G | Margem entre TARGET e MAX |
rwxs--- [ dism ] | Confirmando que está em páginas grandes |
Com isso, fechamos a configuração completa de HugePages no Solaris e confirmamos o uso no banco BIVEN. Esse procedimento evita swap na SGA, reduz fragmentação, melhora throughput e ainda libera o kernel de ficar carregando milhões de páginas pequenas.
Esse passo a passo pode ser aplicado em ambientes maiores também, bastando recalcular a memória. A regra é clara: sempre deixe TARGET menor que MAX e múltiplo de 2GB. Fez isso, reiniciou, subiu limpo? Pronto e ZAS
Referências Utilizadas
https://www.huzefapatel.com/blogs/installing-oracle-database-18c-on-oracle-solar
https://www.oracle.com/technetwork/articles/systems-hard/sparc-168402.pdf
https://docs.oracle.com/database/121/SSDBI/app_manual.htm
https://www.akadia.com/services/ora_out_of_memory.html
https://justdaveinfo.wordpress.com/2015/04/30/huge-pages-for-informix-on-sparc-solaris/
https://docs.oracle.com/cd/E24457_01/html/E21996/aewda.html
https://www.oracle.com/technetwork/sun-sparc-enterprise/o11-090-sparc-t4-arch-496245.pdf
Master Document for Solaris Resource Manager (Doc ID 1606808.1)
Kernel setup for Solaris 10 e Solaris 11 usando project files (Doc ID 429191.1)
Para configurar no LInux
hugepages-no-oracle-configuracao-passo-a-passo-no-linux
#20250412 #DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #OracleACE #PegaCofre #BrigaNoMercado #CartãoNãoPasso #TodoMundoSeAbraçou #HugePagesIgualPapaiMamãe



