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âmetro | Valor | Descrição |
---|---|---|
Total | 15GB | Memória RAM total do sistema. |
Used | 2GB | Memória atualmente em uso. |
Free | 10GB | Memória completamente livre. |
Shared | 0GB | Memória compartilhada, sem uso no momento. |
Buff/Cache | 3GB | Memória usada para cache do sistema. |
Available | 12GB | Memória disponível para novos processos. |
Swap | 1GB | Swap 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
Componente | Percentual | Tamanho (GB) | Motivo |
---|---|---|---|
SGA (HugePages) | 60% | 9GB | Memória alocada via HugePages para otimizar a SGA. |
PGA e processos Oracle | 25% | 4GB | Espaço para sorting, hashing e outras operações do Oracle. |
Sistema operacional | 15% | 2GB | Memó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âmetro | Valor | Descrição |
---|---|---|
Hugepagesize | 2048 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
Etapa | Fórmula | Cálculo | Resultado |
---|---|---|---|
Converter a SGA de GB para MB | SGA (GB) * 1024 | 9 * 1024 | 9216 MB |
Converter MB para KB | MB * 1024 | 9216 * 1024 | 9.437.184 KB |
Calcular páginas necessárias | KB / Tamanho da Página (KB) | 9.437.184 / 2048 | 4608 páginas |
Adicionar 0,5% de segurança | Páginas * 1.005 | 4608 * 1.005 | 4631 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álculo | Fórmula | Resultado |
---|---|---|
SGA Total (Bytes) | :sga_size * 1024 * 1024 * 1024 | 9.663.676.416 |
Tamanho da Página (Bytes) | 2048 * 1024 | 2.097.152 |
HugePages Necessárias | (:sga_size * 1024 * 1024 * 1024) / (2048 * 1024) | 4608 páginas |
HugePages com 0,5% de Segurança | 4608 * 1.005 | 4631 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âmetro | Valor | Descrição | Tipo |
---|---|---|---|
vm.nr_hugepages | 4631 | Define o número total de HugePages reservadas para a SGA. | HugePages |
vm.hugetlb_shm_group | 54321 | Permite que o grupo oinstall utilize HugePages. | HugePages |
vm.swappiness | 2 | Reduz o uso desnecessário de swap, priorizando a RAM. | Ajuste adicional |
vm.vfs_cache_pressure | 150 | Ajusta a prioridade do cache de metadados do sistema de arquivos, evitando liberação excessiva. | Ajuste adicional |
vm.min_free_kbytes | 2097152 (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âmetro | Valor Obtido | Descrição |
---|---|---|
HugePages_Total | 4631 | Total de páginas reservadas, exatamente conforme configurado. |
HugePages_Free | 4631 | Todas as páginas ainda estão livres, pois o Oracle ainda não consumiu a memória. |
HugePages_Rsvd | 0 | Nenhuma página foi reservada para uso futuro, pois o Oracle ainda não foi iniciado. |
HugePages_Surp | 0 | Nenhuma página extra foi alocada além do configurado. |
Hugepagesize | 2048 KB | Tamanho correto das páginas configuradas. |
Hugetlb | ~9GB | Memó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
Valor | Descrição |
---|---|
ONLY | O 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. |
FALSE | O 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âmetro | Valor Obtido | Descrição |
---|---|---|
HugePages_Total | 4631 | Total de páginas reservadas |
HugePages_Free | 32 | Apenas 32 páginas ainda estão livres, indicando que a maioria foi usada pelo Oracle. |
HugePages_Rsvd | 11 | Pequena quantidade de páginas reservadas para uso futuro pelo Oracle. |
HugePages_Surp | 0 | Nenhuma página extra foi alocada além do configurado. |
Hugetlb | ~9GB | Memó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 ~]$
Campo | Descrição |
---|---|
Available system pagesizes | Lista os tamanhos de páginas suportados pelo sistema, neste caso, 4K (padrão) e 2048K (2MB, usado por HugePages). |
PAGESIZE | Tamanho das páginas utilizadas pelo Oracle, aqui 2048K (2MB). |
AVAILABLE_PAGES | Quantidade de páginas HugePages disponíveis no sistema (4631). |
EXPECTED_PAGES | Quantidade de páginas que o Oracle esperava alocar (4610). |
ALLOCATED_PAGES | Quantidade 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