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.
Database Writer
Escreve blocos modificados (dirty blocks) do buffer cache para os datafiles. Pode haver múltiplos processos (DBW0, DBW1, etc.) para aumentar desempenho.
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.
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.
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.
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.
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