Foto de Roberto Sobrinho
Roberto Sobrinho

04/12/2025

HugePages no Oracle Database: Configuração passo a passo no Solaris

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:~#
ShellSession

Rodando 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:~# 
ShellSession

O 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

ComponentePercentualTamanho sugeridoObjetivo
SGA (Large Pages)50%60GBSGA fixa em memória, sem swap e com alto desempenho
PGA + Processos Oracle30%36GBSuporte a sort, hash joins, paralelismo e processos background
Sistema Operacional20%24GBKernel, 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:~#
ShellSession

Sem 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:~#
ShellSession

Como 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:~#
ShellSession

Explicando cada parâmetro

ParâmetroPra que serve
process.max-file-descriptorAumenta limite de arquivos abertos. Oracle usa muitos datafiles/redologs.
process.max-sem-nsemsSemáforos internos do Oracle para sincronização entre processos.
process.max-stack-sizeTamanho da pilha dos processos Oracle. Evita crash em cargas pesadas.
project.max-lwpsQuantidade de threads permitidas. Diretamente ligado a sessões do banco.
project.max-sem-idsControla número de conjuntos de semáforos para IPC.
project.max-shm-idsQuantidade de segmentos de memória compartilhada.
project.max-shm-memoryO 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
ShellSession

O 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>
SQL

O 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:~# 
ShellSession

Validar 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:~#
ShellSession

Se esse cenário apareceu, missão cumprida.
Seu Oracle está rodando com HugePages no Solaris.

Interpretação do resultado

LinhaSignificado
46137344 KB ≈ 44GSGA usada 100% via HugePages
2097152 KB ≈ 2GMargem 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


Compartilhe

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print