Picture of Roberto Sobrinho
Roberto Sobrinho

17/03/2025

HugePages no Oracle: Configuração Passo a Passo no Red Hat 9.5

A configuração de HugePages no Linux melhora o desempenho do Oracle Database ao reduzir a fragmentação de memória e evitar o uso de swap na SGA. Isso garante uma alocação eficiente da RAM e otimiza a performance do banco.

Sem HugePages, o Linux usa páginas pequenas de 4KB, o que pode causar fragmentação, alto consumo de CPU e movimentação da memória do Oracle para swap, resultando em latência e perda de desempenho.

Este guia ensina, passo a passo, como configurar HugePages corretamente no Red Hat Linux 9.5 e versões anteriores.

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 – Verificar Memória Disponível

[root@lnx95orasp01 ~]$ free -g
               total        used        free      shared  buff/cache   available
Mem:              15           2          10           0           3          12
Swap:              1           0           1
[root@lnx95orasp01 ~]$

Interpretação dos Valores de Memória

ParâmetroValorDescrição
Total15GBMemória RAM total do sistema.
Used2GBMemória atualmente em uso.
Free10GBMemória completamente livre.
Shared0GBMemória compartilhada, sem uso no momento.
Buff/Cache3GBMemória usada para cache do sistema.
Available12GBMemória disponível para novos processos.
Swap1GBSwap configurado, sem uso no momento.

Passo 02 – Calcular a Quantidade de HugePages

Agora que verificamos a memória disponível, precisamos calcular quantas HugePages serão necessárias para alocar a SGA do Oracle.

O valor de 60% 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 (40%) foi considerado suficiente para atender ao sistema operacional e ao uso da PGA.

Definir a Distribuição da Memória

ComponentePercentualTamanho (GB)Motivo
SGA (HugePages)60%9GBMemória alocada via HugePages para otimizar a SGA.
PGA e processos Oracle25%4GBEspaço para sorting, hashing e outras operações do Oracle.
Sistema operacional15%2GBMemória reservada para o kernel e serviços do sistema.

Confirmar o Tamanho das HugePages

[root@lnx95orasp01 ~]$ grep Hugepagesize /proc/meminfo
Hugepagesize:       2048 kB
[root@lnx95orasp01 ~]$
ParâmetroValor Descrição
Hugepagesize2048 KB (2MB)Tamanho padrão das páginas

Para garantir que a SGA do Oracle seja totalmente alocada em HugePages, é necessário calcular a quantidade exata de páginas que devem ser reservadas no sistema. Além disso, adicionamos uma margem de segurança de 0,5% para evitar problemas de alocação.

Cálculo Manual para 9GB

(SGA em GB * 1024 * 1024) / Tamanho da HugePage em KB
EtapaFórmulaCálculoResultado
Converter a SGA de GB para MBSGA (GB) * 10249 * 10249216 MB
Converter MB para KBMB * 10249216 * 10249.437.184 KB
Calcular páginas necessáriasKB / Tamanho da Página (KB)9.437.184 / 20484608 páginas
Adicionar 0,5% de segurançaPáginas * 1.0054608 * 1.0054631 páginas

Número final de HugePages a configurar: 4631

Cálculo Usando SQL para 9GB

Para validar o cálculo diretamente no Oracle, executar a seguinte consulta no SQL*Plus, utilizando uma variável para definir o tamanho da SGA:

SQL> 
VARIABLE sga_size NUMBER;
EXEC :sga_size := 9; -- Definir o tamanho da SGA em GB

SELECT  
    ROUND(:sga_size * 1024 * 1024 * 1024, 2) AS SGA_TOT_BYTES,  
    ROUND(2048 * 1024, 2) AS Hugepagesize_BYTES,  
    ROUND((:sga_size * 1024 * 1024 * 1024) / (2048 * 1024), 2) AS HugePages_Required,  
    ROUND(((:sga_size * 1024 * 1024 * 1024) / (2048 * 1024)) * 1.005, 2) AS HugePages_With_Margin  
FROM DUAL;
CálculoFórmulaResultado
SGA Total (Bytes):sga_size * 1024 * 1024 * 10249.663.676.416
Tamanho da Página (Bytes)2048 * 10242.097.152
HugePages Necessárias(:sga_size * 1024 * 1024 * 1024) / (2048 * 1024)4608 páginas
HugePages com 0,5% de Segurança4608 * 1.0054631 páginas

O resultado confirma que o número final de HugePages a ser configurado é 4631.

Passo 03 – Configurar HugePages no Linux

Configurações Atuais

[root@lnx95orasp01 ~]$ grep Huge /proc/meminfo
AnonHugePages:    321536 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:               0 kB
[root@lnx95orasp01 ~]$ 

HugePages ainda não estão configuradas.

Verificar o ID do Grupo oinstall

[root@lnx95orasp01 ~]$ getent group oinstall
oinstall:x:54321:oracle
[root@lnx95orasp01 ~]$

Importante: Validar o ID do grupo oinstall. Nesse caso, é 54321, então devemos usar esse valor no parâmetro vm.hugetlb_shm_group.

Configurar HugePages de Forma Persistente

Criar ou editar o arquivo /etc/sysctl.d/99-hugepages.conf para armazenar as configurações:

[root@lnx95orasp01 ~]$ echo "vm.nr_hugepages=4631" > /etc/sysctl.d/99-hugepages.conf
[root@lnx95orasp01 ~]$ echo "vm.hugetlb_shm_group=54321" >> /etc/sysctl.d/99-hugepages.conf  # ID correto do grupo
[root@lnx95orasp01 ~]$ echo "vm.swappiness=2" >> /etc/sysctl.d/99-hugepages.conf
[root@lnx95orasp01 ~]$ echo "vm.vfs_cache_pressure=150" >> /etc/sysctl.d/99-hugepages.conf
[root@lnx95orasp01 ~]$ echo "vm.min_free_kbytes=2097152" >> /etc/sysctl.d/99-hugepages.conf
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ ls -ltra  /etc/sysctl.d/99-hugepages.conf
-rw-r--r--. 1 root root 117 Mar 16 17:20 /etc/sysctl.d/99-hugepages.conf
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ cat /etc/sysctl.d/99-hugepages.conf
vm.nr_hugepages=4631
vm.hugetlb_shm_group=54321
vm.swappiness=2
vm.vfs_cache_pressure=150
vm.min_free_kbytes=2097152
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ cat /etc/sysctl.d/99-hugepages.conf |wc -l
5
[root@lnx95orasp01 ~]$

ParâmetroValorDescriçãoTipo
vm.nr_hugepages4631Define o número total de HugePages reservadas para a SGA.HugePages
vm.hugetlb_shm_group54321Permite que o grupo oinstall utilize HugePages.HugePages
vm.swappiness2Reduz o uso desnecessário de swap, priorizando a RAM.Ajuste adicional
vm.vfs_cache_pressure150Ajusta a prioridade do cache de metadados do sistema de arquivos, evitando liberação excessiva.Ajuste adicional
vm.min_free_kbytes2097152 (2GB)Garante que o sistema sempre mantenha memória livre para processos críticos.Ajuste adicional

Além da configuração padrão de HugePages, eu sempre aplico ajustes adicionais no kernel para evitar gargalos de memória e garantir um melhor desempenho do Oracle Database, mas você pode não fazer, é opcional.

Aplicar as Configurações no Servidor

[root@lnx95orasp01 ~]$ sysctl --system

Isso aplicará as configurações de HugePages no momento, porém, se o Oracle estiver em execução, pode não ser possível reservar toda a memória necessária.

Recomendo fortemente que o servidor seja reiniciado para garantir que todas as HugePages sejam corretamente alocadas antes da inicialização do Oracle.

[root@lnx95orasp01 ~]$ reboot

Após o reboot, verificar se as HugePages foram aplicadas corretamente:

[root@lnx95orasp01 ~]$ uptime
 17:36:28 up 2 min,  1 user,  load average: 0.11, 0.22, 0.15
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ free -g
               total        used        free      shared  buff/cache   available
Mem:              15          14           2           1           2           0
Swap:              1           0           1
[root@lnx95orasp01 ~]$ grep Huge /proc/meminfo
AnonHugePages:     47104 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    4631
HugePages_Free:     4631
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         9484288 kB
[root@lnx95orasp01 ~]$
ParâmetroValor ObtidoDescrição
HugePages_Total4631Total de páginas reservadas, exatamente conforme configurado.
HugePages_Free4631Todas as páginas ainda estão livres, pois o Oracle ainda não consumiu a memória.
HugePages_Rsvd0Nenhuma página foi reservada para uso futuro, pois o Oracle ainda não foi iniciado.
HugePages_Surp0Nenhuma página extra foi alocada além do configurado.
Hugepagesize2048 KBTamanho correto das páginas configuradas.
Hugetlb~9GBMemória total reservada para HugePages.

A configuração foi aplicada corretamente e as HugePages estão reservadas para o Oracle.

Passo 04 – Configurar os Parâmetros do Oracle Database

Agora que as HugePages foram configuradas corretamente, é necessário ajustar os parâmetros do Oracle para garantir que a SGA seja totalmente alocada nelas e que a PGA seja gerenciada de forma eficiente.

Configurar o Uso de HugePages e Ajustar os Parâmetros de Memória

ValorDescrição
ONLYO Oracle só inicia se conseguir alocar toda a SGA em HugePages. Se não houver páginas suficientes, o startup falha.
TRUE (padrão)O Oracle tenta usar HugePages, mas se não houver páginas suficientes, ele aloca parte da SGA com páginas normais, o que pode causar swap.
FALSEO Oracle não usa HugePages, alocando toda a memória com páginas padrão do sistema operacional.

Eu recomendo sempre utilizar ONLY, pois garante que o Oracle NÃO inicie se HugePages não estiverem corretamente configuradas.

[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ su - oracle
[oracle@lnx95orasp01 ~]$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Sun Mar 16 18:11:03 2025
Version 19.26.0.0.0

Copyright (c) 1982, 2024, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.26.0.0.0

SQL> ALTER SYSTEM SET use_large_pages = ONLY SCOPE=spfile SID='*';

System altered.

SQL> ALTER SYSTEM SET sga_max_size = 9G SCOPE=spfile SID='*';

System altered.

SQL> ALTER SYSTEM SET sga_target = 9G SCOPE=spfile SID='*';

System altered.

SQL> ALTER SYSTEM SET pga_aggregate_target = 2G SCOPE=spfile SID='*';

System altered.

SQL> ALTER SYSTEM SET pga_aggregate_limit = 4G SCOPE=spfile SID='*';

System altered.

SQL>
SQL> shut immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup;
ORACLE instance started.

Total System Global Area 9663676032 bytes
Fixed Size                  8949376 bytes
Variable Size            1409286144 bytes
Database Buffers         8220835840 bytes
Redo Buffers               24604672 bytes
Database mounted.
Database opened.
SQL>

Passo 05 – Verificar se as HugePages Estão Sendo Usadas

[oracle@lnx95orasp01 ~]$ grep Huge /proc/meminfo
AnonHugePages:    204800 kB
ShmemHugePages:        0 kB
FileHugePages:         0 kB
HugePages_Total:    4631
HugePages_Free:       32
HugePages_Rsvd:       11
HugePages_Surp:        0
Hugepagesize:       2048 kB
Hugetlb:         9484288 kB
[oracle@lnx95orasp01 ~]$
ParâmetroValor ObtidoDescrição
HugePages_Total4631Total de páginas reservadas
HugePages_Free32Apenas 32 páginas ainda estão livres, indicando que a maioria foi usada pelo Oracle.
HugePages_Rsvd11Pequena quantidade de páginas reservadas para uso futuro pelo Oracle.
HugePages_Surp0Nenhuma página extra foi alocada além do configurado.
Hugetlb~9GBMemória total reservada para HugePages

O baixo valor de HugePages_Free confirma que a SGA foi alocada corretamente em HugePages.

Podemos verificar tambem no alertlogo do banco de dados:

[root@lnx95orasp01 ~]$ awk '/Available system pagesizes:/ {pos=NR} END {if (pos) print pos}' /u01/app/oracle/diag/rdbms/prd/$ORACLE_SID/trace/alert_$ORACLE_SID.log | xargs -I {} awk 'NR>=
2025-03-17T11:13:13.091422-03:00
 Available system pagesizes:
  4K, 2048K
2025-03-17T11:13:13.091554-03:00
 Supported system pagesize(s):
2025-03-17T11:13:13.091616-03:00
  PAGESIZE  AVAILABLE_PAGES  EXPECTED_PAGES  ALLOCATED_PAGES  ERROR(s)
2025-03-17T11:13:13.091716-03:00
     2048K             4631            4610             4610        NONE
2025-03-17T11:13:13.091776-03:00
 Reason for not supporting certain system pagesizes:
2025-03-17T11:13:13.091834-03:00
[oracle@lnx95orasp01 ~]$
CampoDescrição
Available system pagesizesLista os tamanhos de páginas suportados pelo sistema, neste caso, 4K (padrão) e 2048K (2MB, usado por HugePages).
PAGESIZETamanho das páginas utilizadas pelo Oracle, aqui 2048K (2MB).
AVAILABLE_PAGESQuantidade de páginas HugePages disponíveis no sistema (4631).
EXPECTED_PAGESQuantidade de páginas que o Oracle esperava alocar (4610).
ALLOCATED_PAGESQuantidade de páginas realmente alocadas pelo Oracle (4610).
ERROR(s)Se houve erro na alocação de páginas (aqui está NONE, ou seja, sem erros).

O Oracle conseguiu alocar todas as páginas esperadas (4610 de 4631 disponíveis), confirmando que a configuração de HugePages foi aplicada corretamente e está sendo utilizada pelo banco de dados.

Passo 06 – Desativar Transparent HugePages (THP) no Linux 9

[root@lnx95orasp01 ~]$ cat /sys/kernel/mm/transparent_hugepage/enabled
[always] madvise never
[root@lnx95orasp01 ~]$ cat /sys/kernel/mm/transparent_hugepage/defrag
[always] defer defer+madvise madvise never
[root@lnx95orasp01 ~]$
[always] madvise never, significa que as THP estão ativadas.

Editar o arquivo /etc/rc.d/rc.local

Adicione as seguintes linhas ao final do arquivo:

[root@lnx95orasp01 ~]$  vi /etc/rc.d/rc.local
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$  cat /etc/rc.d/rc.local |grep hugepage
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
[root@lnx95orasp01 ~]$

Tornar o arquivo executável

[root@lnx95orasp01 ~]$  chmod +x /etc/rc.d/rc.local
[root@lnx95orasp01 ~]$

Criar e ativar o serviço rc-local no systemd

Criar o arquivo /etc/systemd/system/rc-local.service e adicionar as seguintes linhas ao final do arquivo:

[root@lnx95orasp01 ~]$ vi /etc/systemd/system/rc-local.service
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ cat /etc/systemd/system/rc-local.service

[Unit]
Description=/etc/rc.d/rc.local Compatibility
ConditionFileIsExecutable=/etc/rc.d/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.d/rc.local start
TimeoutSec=0
RemainAfterExit=yes

[Install]
WantedBy=multi-user.target

[root@lnx95orasp01 ~]$

Recarregue o systemd e habilite o serviço:

[root@lnx95orasp01 ~]$ systemctl daemon-reload
[root@lnx95orasp01 ~]$ systemctl enable rc-local
[root@lnx95orasp01 ~]$ systemctl start rc-local
[root@lnx95orasp01 ~]$ systemctl status rc-local
● rc-local.service - /etc/rc.d/rc.local Compatibility
     Loaded: loaded (/etc/systemd/system/rc-local.service; enabled; preset: disabled)
     Active: active (exited) since Sun 2025-03-16 18:39:47 -03; 35min ago
    Process: 1151 ExecStart=/etc/rc.d/rc.local start (code=exited, status=0/SUCCESS)
        CPU: 5ms

Mar 16 18:39:47 plnbo-odmdb01 systemd[1]: Starting /etc/rc.d/rc.local Compatibility...
Mar 16 18:39:47 plnbo-odmdb01 systemd[1]: Started /etc/rc.d/rc.local Compatibility.
[root@lnx95orasp01 ~]$

Reiniciar o servidor e ver se deu certo

[root@lnx95orasp01 ~]$ reboot

Após reboot

[root@lnx95orasp01 ~]$ uptime
 19:22:12 up 2 min,  1 user,  load average: 0.17, 0.14, 0.06
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$ cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
[root@lnx95orasp01 ~]$
[root@lnx95orasp01 ~]$  cat /sys/kernel/mm/transparent_hugepage/defrag
always defer defer+madvise madvise [never]
[root@lnx95orasp01 ~]$

Opção [never] aparece destacada assim após um reboot, significa que as THP estão realmente desativadas e permanecerão assim sempre que o sistema for reiniciado.

e ZAS


#20250317#DBASobrinho #GuinaNãoTinhaDó #BóBó #CaceteDeAgulha #OracleACE #PegaCofre #BrigaNoMercado #CartãoNãoPasso #TodoMundoSeAbraçou #HugePagesIgualPapaiMamãe #MatsuoEnsinou

🔗 hugepages-no-oracle-configuracao-passo-a-passo-no-red-hat-9-5.sql


Compartilhe

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print

Pesquisar

Roberto Sobrinho

Sou Roberto Fernandes Sobrinho, também conhecido como Sobrinho DBA , pós graduado em “Architecture and Database Administration”, entusiasta, dedicado e com 20 anos de experiência com Oracle Database e suas diversas distribuições e variações.

Oracle ACE Associate

2025

Specialist

Exadata Database Machine X9M

Professional

Oracle Database Administration

Professional

Oracle Database 19c: RAC, ASM, & Grid Infra Administrator

Professional

Oracle Autonomous Database Cloud

Professional

Oracle Cloud Database Migration and Integration

Professional

Oracle Database PL/SQL Developer

Associate

Oracle Cloud Infrastructure Architect

Associate

Oracle Cloud Infrastructure Foundations

Categorias

Categorias

Tags

HugePages no Oracle: Configuração Passo a Passo no Red Hat 9.5