Início / Trilha 2 / Conteúdo / Tópico 1
1

Arquitetura do Oracle Database

Instância, SGA, PGA, processos de background

📖

Conceitos Fundamentais

O que é a Arquitetura Oracle?

A arquitetura do Oracle Database é composta por duas partes principais que trabalham juntas para fornecer um sistema de gerenciamento de dados robusto e escalável: a Instância e o Banco de Dados.

Entender essa arquitetura é fundamental para qualquer DBA, pois permite diagnosticar problemas, otimizar desempenho e tomar decisões informadas sobre configuração e manutenção.

Componentes Principais:

  • Instância Oracle: Estrutura de memória (SGA + PGA) e processos em background
  • Banco de Dados: Arquivos físicos (datafiles, control files, redo logs)
  • Processos de Background: SMON, PMON, DBWn, LGWR, CKPT, ARCn
  • Áreas de Memória: Buffer Cache, Shared Pool, Large Pool, Java Pool

Instância vs Banco de Dados

Instância (Instance)

Estruturas de memória (RAM) e processos em background que gerenciam o acesso aos dados. É volátil - desaparece quando o banco é desligado.

SGA + PGA + Processos de Background

Banco de Dados (Database)

Conjunto de arquivos físicos armazenados em disco que contêm os dados reais. É persistente - permanece mesmo com o banco desligado.

Datafiles + Control Files + Redo Logs

💾

SGA - System Global Area

O que é a SGA?

A SGA (System Global Area) é a área de memória compartilhada mais importante da instância Oracle. Todos os processos de servidor e background podem acessá-la. O tamanho da SGA é um dos principais fatores que afetam o desempenho do banco de dados.

Database Buffer Cache

Armazena cópias de blocos de dados lidos dos datafiles. Quando você faz um SELECT, o Oracle primeiro procura os dados aqui antes de ir ao disco.

  • Reduz drasticamente o I/O de disco (muito mais lento que memória)
  • Usa algoritmo LRU (Least Recently Used) para gerenciar espaço
  • Parâmetro: DB_CACHE_SIZE

Shared Pool

Armazena comandos SQL compilados (cursores), planos de execução e metadados do dicionário de dados. Essencial para evitar recompilações custosas.

  • Library Cache: SQL e PL/SQL já analisados e compilados
  • Data Dictionary Cache: informações sobre tabelas, índices, usuários
  • Parâmetro: SHARED_POOL_SIZE

Redo Log Buffer

Buffer circular que armazena informações sobre mudanças (redo entries) antes de serem escritas nos redo log files. Crítico para recuperação de falhas.

  • Toda mudança (INSERT, UPDATE, DELETE) gera uma entrada de redo
  • O processo LGWR escreve do buffer para os arquivos de redo log
  • Parâmetro: LOG_BUFFER

Large Pool

Área opcional usada para operações que necessitam grandes alocações de memória, como backup/recovery (RMAN) e operações paralelas.

  • Alivia pressão do Shared Pool
  • Parâmetro: LARGE_POOL_SIZE

Visualizando a SGA

-- Ver tamanho total da SGA
SELECT * FROM V$SGA;

-- Ver componentes da SGA em detalhes
SELECT
    component,
    current_size/1024/1024 AS size_mb,
    min_size/1024/1024 AS min_size_mb,
    max_size/1024/1024 AS max_size_mb
FROM V$SGA_DYNAMIC_COMPONENTS
ORDER BY current_size DESC;

-- Ver parâmetros de memória
SHOW PARAMETER SGA;
SHOW PARAMETER MEMORY_TARGET;
🔒

PGA - Program Global Area

Memória Privada de Cada Sessão

A PGA (Program Global Area) é uma área de memória privada alocada para cada processo de servidor ou sessão. Diferente da SGA, a PGA não é compartilhada entre sessões.

Principais Usos da PGA:

  • Sort Area: Ordenação de dados (ORDER BY, GROUP BY, DISTINCT)
  • Hash Area: Operações de hash joins
  • Session Memory: Variáveis de sessão, cursores privados
  • SQL Work Areas: Operações de bitmap, merge joins

Gerenciamento Automático

O Oracle pode gerenciar automaticamente a PGA através do parâmetro PGA_AGGREGATE_TARGET, que define o total de memória PGA disponível para todas as sessões.

-- Configurar gerenciamento automático de PGA
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 2G SCOPE=BOTH;

-- Ver uso atual de PGA
SELECT
    name,
    value/1024/1024 AS mb
FROM V$PGASTAT
WHERE name IN ('aggregate PGA target parameter',
               'aggregate PGA auto target',
               'total PGA allocated');
⚙️

Processos de Background

Processos Essenciais

Os processos de background são executados automaticamente quando a instância é iniciada. Cada um tem uma função específica na manutenção e operação do banco de dados.

DBWn

Database Writer

Escreve blocos modificados (dirty blocks) do buffer cache para os datafiles. Pode haver múltiplos processos (DBW0, DBW1, etc.) para aumentar desempenho.

LGWR

Log Writer

Escreve entradas do redo log buffer para os arquivos de redo log online. É crítico - se o LGWR falhar, a instância é abortada. Escreve quando: há COMMIT, buffer está 1/3 cheio, ou a cada 3 segundos.

CKPT

Checkpoint

Sinaliza o DBWn para escrever todos os blocos modificados no disco e atualiza os headers dos datafiles e control files com informações de checkpoint. Reduz o tempo de recovery.

SMON

System Monitor

Realiza recuperação da instância no startup (se necessário), limpa segmentos temporários não utilizados, e coalesca espaço livre em tablespaces.

PMON

Process Monitor

Monitora processos de usuário. Se um processo falha, o PMON faz a limpeza: libera locks, rollback de transações não commitadas, libera recursos da SGA.

ARCn

Archiver (Opcional)

Copia redo log files cheios para um destino de arquivamento (archive logs). Necessário para backup completo e point-in-time recovery. Só existe se o banco estiver em modo ARCHIVELOG.

Visualizando Processos de Background

-- Ver todos os processos de background ativos
SELECT
    paddr,
    name,
    description
FROM V$BGPROCESS
WHERE paddr != '00'
ORDER BY name;

-- Ver processos do sistema operacional (no Linux/Unix)
-- Execute no terminal, não no SQL
!ps -ef | grep ora_
🛠️

Aplicação Prática

Diagnóstico da Instância

-- Ver informações gerais da instância
SELECT
    instance_name,
    host_name,
    version,
    startup_time,
    status,
    database_status,
    instance_role,
    archiver,
    logins
FROM V$INSTANCE;

-- Ver uso de memória da SGA
SELECT
    ROUND(SUM(value)/1024/1024, 2) AS sga_size_mb
FROM V$SGA;

-- Ver componentes individuais da SGA
SELECT
    pool,
    name,
    ROUND(bytes/1024/1024, 2) AS size_mb
FROM V$SGASTAT
WHERE pool IS NOT NULL
ORDER BY pool, bytes DESC;

-- Verificar se há contenção de memória
SELECT
    name,
    value
FROM V$SYSSTAT
WHERE name IN (
    'physical reads',
    'db block gets',
    'consistent gets'
);

-- Buffer cache hit ratio (deve ser > 90%)
SELECT
    ROUND((1 - (phys.value / (cons.value + gets.value))) * 100, 2) AS buffer_hit_ratio
FROM
    V$SYSSTAT phys,
    V$SYSSTAT cons,
    V$SYSSTAT gets
WHERE
    phys.name = 'physical reads'
    AND cons.name = 'consistent gets'
    AND gets.name = 'db block gets';

Ajustando Parâmetros de Memória

-- Ver parâmetros de memória atuais
SHOW PARAMETER MEMORY;
SHOW PARAMETER SGA;
SHOW PARAMETER PGA;

-- Habilitar gerenciamento automático de memória (AMM)
-- Requer restart da instância
ALTER SYSTEM SET MEMORY_TARGET = 4G SCOPE=SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 4G SCOPE=SPFILE;

-- Ou gerenciamento automático apenas da SGA (ASMM)
ALTER SYSTEM SET SGA_TARGET = 3G SCOPE=BOTH;
ALTER SYSTEM SET PGA_AGGREGATE_TARGET = 1G SCOPE=BOTH;

-- Desabilitar AMM e configurar manualmente
ALTER SYSTEM SET MEMORY_TARGET = 0 SCOPE=SPFILE;
ALTER SYSTEM SET SGA_TARGET = 0 SCOPE=SPFILE;
ALTER SYSTEM SET DB_CACHE_SIZE = 2G SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE = 800M SCOPE=SPFILE;
ALTER SYSTEM SET LARGE_POOL_SIZE = 200M SCOPE=SPFILE;

-- SCOPE options:
-- MEMORY: apenas na instância atual (perdido no restart)
-- SPFILE: gravado no arquivo de parâmetros (usado no próximo startup)
-- BOTH: aplicado imediatamente E gravado no SPFILE

Resultado Esperado

O que você deve dominar após este tópico:

Diferenciar Instância e Database

Compreender a separação entre estruturas de memória e arquivos físicos

Conhecer componentes da SGA

Identificar Buffer Cache, Shared Pool, Redo Log Buffer

Entender o papel da PGA

Saber quando e como a memória privada é utilizada

Identificar processos críticos

DBWn, LGWR, CKPT, SMON, PMON e suas funções

Consultar views de performance

Usar V$SGA, V$PGASTAT, V$BGPROCESS, V$INSTANCE

Ajustar parâmetros de memória

Configurar MEMORY_TARGET, SGA_TARGET, PGA_AGGREGATE_TARGET

Voltar ao Índice Próximo: Instalação do Oracle