Pular para o conteúdo principal

Estrutura de Memória no oracle database

A estrutura de memória do Oracle Database é fundamental para o funcionamento eficiente do sistema. Ela é organizada em componentes principais que ajudam a gerenciar a execução de processos, armazenamento de dados em cache e coordenação entre as diferentes atividades do banco. A memória é dividida principalmente em duas áreas: SGA (System Global Area) e PGA (Program Global Area).

System Global Area (SGA)

A SGA é uma área de memória compartilhada que contém dados e informações de controle que todos os processos do banco de dados podem acessar. É alocada na inicialização do banco de dados e inclui os seguintes componentes:

Buffer Cache
Armazena blocos de dados lidos do disco.
Melhora a performance ao evitar leituras repetidas de disco.
Os dados mais acessados permanecem em cache (geralmente gerenciado pelo algoritmo LRU - Least Recently Used).

Shared Pool
Armazena informações compartilhadas, como:
Library Cache: Contém instruções SQL e PL/SQL compiladas.
Data Dictionary Cache: Contém metadados sobre estruturas do banco (usuários, tabelas, índices, etc.).
Melhora a reutilização de consultas e reduz a necessidade de recompilação.

Redo Log Buffer Armazena informações de mudanças feitas nos dados (logs de redo) antes de serem gravadas nos arquivos de redo logs no disco.
Essencial para recuperação de dados em caso de falha.

Java Pool Utilizado para armazenar classes e métodos Java quando o banco de dados executa código Java.

Large Pool Espaço adicional para operações que exigem memória significativa, como:
Backup e recuperação usando RMAN.
Sessões compartilhadas no Oracle Shared Server.

Streams Pool Necessário para operações do Oracle Streams, como replicação de dados ou captura de mudanças.

Program Global Area (PGA)**

A PGA é uma área de memória privada dedicada a um processo do servidor. Cada sessão ativa tem sua própria PGA, e ela não é compartilhada entre sessões. Os principais componentes da PGA incluem:

Session Memory - Usada para armazenar informações da sessão, como variáveis de usuário e dados de controle.

SQL Work Areas - Utilizada para operações de classificação, junções, criação de índices e hash joins.

Exemplos:
Sort Area: Memória para ordenação de dados.
Hash Join Area: Usada em junções baseadas em hash.
Bitmap Merge Area: Usada para consultas envolvendo índices bitmap.

Memory Management (Gerenciamento de Memória)

O Oracle oferece dois métodos principais para gerenciar a memória:

Manual Memory Management - O DBA aloca manualmente tamanhos fixos para SGA e PGA, configurando parâmetros como DB_CACHE_SIZE, SHARED_POOL_SIZE, LARGE_POOL_SIZE, entre outros.

Automatic Memory Management (AMM) - Introduzido para simplificar o gerenciamento de memória. O Oracle ajusta automaticamente os tamanhos dos componentes de memória com base em parâmetros como:

MEMORY_TARGET: Limite total para a memória alocada.
MEMORY_MAX_TARGET: Valor máximo que pode ser ajustado dinamicamente.

Resumo

A estrutura de memória do Oracle é projetada para oferecer desempenho eficiente e alta escalabilidade. Enquanto a SGA gerencia os recursos compartilhados e operações do banco de dados, a PGA lida com a execução de consultas e operações privadas de cada sessão. O gerenciamento adequado desses componentes é essencial para garantir a performance ideal do banco de dados.

Diagnóstico e Monitoramento da Memória no Oracle

Visões Dinâmicas (V$ Views)
V$SGA: Mostra o tamanho atual da SGA.
V$PGA: Informações sobre o uso da PGA.
V$MEMORY_DYNAMIC_COMPONENTS: Componentes de memória e seus tamanhos alocados.

AWR e ADDM
Relatórios AWR (Automatic Workload Repository) ajudam a identificar gargalos relacionados à memória.
ADDM (Automatic Database Diagnostic Monitor) fornece insights sobre ajustes na memória.

DB Izzie - Memory Management

Memory Management