Como o Oracle armazena os dados?

A estrutura de armazenamento do Oracle Database é projetada para ser altamente eficiente e flexível, permitindo o armazenamento e o gerenciamento de grandes volumes de dados de forma organizada e segura.

Visão Geral da Estrutura de Armazenamento

O Oracle organiza os dados em várias camadas hierárquicas, garantindo escalabilidade e otimização. As principais estruturas de armazenamento do Oracle são:

Cada um desses níveis desempenha um papel importante na organização e armazenamento dos dados.

Database

No nível mais alto da hierarquia, temos o Database. O banco de dados Oracle é composto por vários arquivos de dados que armazenam as informações do usuário e os metadados necessários para o funcionamento do sistema. Ele é o contêiner principal que engloba todos os outros componentes de armazenamento.

O Oracle Database é composto por três tipos principais de arquivos:

Tablespace

O Tablespace é o próximo nível da hierarquia e age como um contêiner lógico para organizar os dados dentro do banco de dados. Ele agrupa múltiplos datafiles, que são arquivos físicos no sistema operacional onde os dados reais são armazenados. Um banco de dados pode ter vários tablespaces, sendo cada um especializado em armazenar diferentes tipos de objetos de dados.

Os tablespaces podem ser divididos em dois tipos principais:

Exemplos comuns de tablespaces incluem:

Segment

Dentro de cada tablespace, encontramos os segments. Um segmento é um espaço lógico alocado para armazenar um tipo específico de objeto de banco de dados, como uma tabela, índice, view materializada, rollback segment, etc.

Cada tipo de segmento desempenha um papel específico:

Os segmentos são compostos por unidades de espaço chamadas extents.

Extent

Um extent é uma unidade contígua de espaço dentro de um segmento, onde os dados são armazenados fisicamente nos datafiles. Um segmento é composto por um ou mais extents, que são alocados conforme necessário para acomodar o crescimento do objeto de banco de dados (como uma tabela que aumenta de tamanho).

Quando um segmento precisa de mais espaço, o Oracle aloca um novo extent para ele. Os extents garantem que os dados sejam armazenados em blocos contínuos, o que melhora a eficiência de leitura/escrita.

Oracle Data Block

O nível mais baixo da hierarquia de armazenamento é o Oracle Data Block, também chamado de database block ou data block. Os data blocks representam a menor unidade de armazenamento no Oracle Database. Cada extent é composto de múltiplos data blocks.

Os data blocks armazenam os dados reais, como as linhas de uma tabela. Eles são a interface entre o banco de dados e o sistema de arquivos subjacente. O tamanho dos data blocks é configurável e pode variar (tipicamente 4KB, 8KB, 16KB ou 32KB), dependendo das necessidades do ambiente.

Os data blocks contêm várias informações, além dos dados do usuário, como cabeçalhos que registram metadados importantes, como o endereço do bloco e informações de transações.

Componentes de um Oracle Data Block

Um data block possui várias subestruturas:

  1. Cabeçalho do Bloco (Block Header): Contém metadados sobre o bloco, como o endereço do bloco, identificadores de transações ativas e status de formatação.
  2. Tabela de Diretório (Table Directory): Mantém informações sobre as tabelas cujos dados estão armazenados neste bloco (importante em caso de blocos com dados de mais de uma tabela).
  3. Tabela de Linhas (Row Directory): Lista de ponteiros para as linhas reais armazenadas no bloco.
  4. Linhas de Dados: São os dados reais das colunas de uma tabela.
  5. Espaço Livre (Free Space): Espaço não utilizado no bloco que pode ser usado para inserções futuras ou expansões de linhas.
  6. Gerenciamento de Espaço: O Oracle utiliza métodos sofisticados para o gerenciamento de espaço dentro dos blocos, como o PCTFREE (percentual de espaço reservado para futuras atualizações) e PCTUSED (percentual de ocupação após o qual novos dados podem ser inseridos no bloco).

Tabelas e Índices no Oracle Data Block

Os data blocks podem armazenar dados de tabelas e índices. Ao trabalhar com tabelas:

No caso de índices, os data blocks são usados para armazenar as estruturas de árvore B-tree que organizam e aceleram a busca de dados.


No Oracle Database, a parametrização de armazenamento em uma tabela, definida pela cláusula STORAGE, determina como o espaço em disco será alocado e gerenciado para essa tabela. Esses parâmetros são essenciais para otimizar o uso de espaço, controlar o crescimento dos segmentos e reduzir a fragmentação. Eles influenciam aspectos como o tamanho dos extents, a reserva de espaço para atualizações futuras e a frequência de alocação de novos extents. Vamos explorar esses parâmetros com base na tabela de exemplo “empregados”:

CREATE TABLE empregados (
    empregado_id NUMBER PRIMARY KEY,
    nome VARCHAR2(100),
    cargo VARCHAR2(50),
    salario NUMBER(10, 2),
    data_admissao DATE DEFAULT SYSDATE,
    departamento_id NUMBER,
    CONSTRAINT fk_departamento
    FOREIGN KEY (departamento_id) REFERENCES departamentos(departamento_id)
) TABLESPACE meu_tablespace
STORAGE (
    INITIAL 64K
    NEXT 128K
    PCTINCREASE 0
)
PCTFREE 10
PCTUSED 40;

Parâmetros de Armazenamento (STORAGE Clause)

1. INITIAL

2. NEXT

3. PCTINCREASE

Outros Parâmetros de Tabela

1. PCTFREE

2. PCTUSED

Como Esses Parâmetros Funcionam Juntos

  1. Alocação Inicial e Crescimento de Extents:
    • Ao criar a tabela, o Oracle aloca um extent inicial de 64K, conforme definido em "INITIAL". À medida que os dados são inseridos e o extent inicial é preenchido, o Oracle aloca novos extents de 128K, conforme especificado em "NEXT". Como "PCTINCREASE" está definido como 0, todos os extents subsequentes terão o mesmo tamanho de 128K. Isso mantém o crescimento linear e previsível da tabela.
  2. Gerenciamento de Espaço Livre em Data Blocks:
    • O parâmetro "PCTFREE 10" garante que 10% de cada data block seja reservado para atualizações de dados. Isso é importante para evitar que atualizações frequentes de linhas movam os dados para novos blocos, o que reduziria a eficiência de leitura. Esse espaço reservado permite que as linhas cresçam dentro do mesmo bloco.
    • O parâmetro "PCTUSED 40" garante que blocos parcialmente utilizados sejam reutilizados para novas inserções quando sua ocupação cair abaixo de 40%. Isso ajuda a evitar o desperdício de espaço em blocos que não estão completamente cheios e reduz a necessidade de alocar novos blocos, otimizando o uso do espaço.

Benefícios da Configuração Correta dos Parâmetros de Armazenamento

Ao configurar corretamente os parâmetros de armazenamento, é possível otimizar o uso de espaço e melhorar a performance da tabela. Esses parâmetros permitem ao DBA:

Esses parâmetros, quando bem configurados, são ferramentas poderosas para otimizar o armazenamento e o desempenho de tabelas no Oracle Database, garantindo uma utilização eficiente dos recursos de hardware e mantendo a performance à medida que a tabela cresce e é atualizada ao longo do tempo.