Logo

Page Size

Por que o tamanho da página é vital no momento da criação do banco de dados

Por que o Page Size é vital na criação do banco?

O Page Size (tamanho da página) é um dos parâmetros mais críticos na criação de um banco de dados Firebird, pois ele é irreversível após a criação do banco. Uma vez definido, não é possível alterá-lo sem recriar todo o banco de dados. Esta decisão afeta diretamente a performance, o uso de espaço em disco, os limites de índices e a capacidade de armazenamento de registros grandes.

Atenção: Decisão Irreversível

O Page Size é definido apenas no momento da criação do banco de dados e não pode ser alterado posteriormente. Para mudar o Page Size, é necessário fazer backup completo, recriar o banco com o novo tamanho e restaurar os dados.

O que é Page Size?

O Page Size é o tamanho físico de cada página de dados no arquivo do banco Firebird. O Firebird organiza os dados em páginas, que são unidades de leitura/escrita do disco. Cada página contém uma quantidade fixa de bytes, e todos os dados (tabelas, índices, metadados) são armazenados dentro dessas páginas.

Os tamanhos de página disponíveis no Firebird são:

Impactos do Page Size

1. Limites de Índices

O tamanho da página determina diretamente o tamanho máximo de uma chave de índice. No Firebird, o tamanho máximo de uma chave de índice é calculado como ¼ do tamanho da página.

Fórmula do Firebird: A partir do Firebird 2.0, o comprimento máximo de uma string indexada é calculado pela fórmula:

max_char_length = FLOOR((page_size / 4 - 9) / N)

onde N é o número de bytes por caractere no charset.

Exemplos práticos:

Se você usar UTF8 (onde cada caractere pode ocupar até 4 bytes), esses limites são ainda mais restritivos. Por exemplo, com Page Size de 8KB e UTF8, você pode ter apenas cerca de 500 caracteres em uma chave de índice composta.

2. Tamanho Máximo de Registro

O Firebird limita o tamanho máximo de um registro individual. Este limite está relacionado ao Page Size:

Se você precisa armazenar campos BLOB grandes ou registros com muitos campos VARCHAR grandes, um Page Size maior é essencial.

3. Performance e I/O

O Page Size afeta diretamente a performance de leitura e escrita:

Em sistemas modernos com SSDs e grandes quantidades de RAM, páginas maiores tendem a ser mais eficientes, pois reduzem o número de operações de I/O necessárias.

4. Uso de Espaço em Disco

Páginas maiores podem resultar em melhor aproveitamento do espaço em disco, especialmente para tabelas com registros grandes. No entanto, se você tem muitas tabelas pequenas com poucos registros, páginas maiores podem resultar em mais desperdício de espaço (fragmentação interna).

5. Fragmentação

Páginas maiores tendem a reduzir a fragmentação do banco de dados, pois mais dados cabem em uma única página, reduzindo a necessidade de split de páginas durante inserções e atualizações.

Recomendações por Cenário

Page Size 4KB (4096 bytes)

Use quando:

Evite se: Você precisa de índices grandes, registros grandes ou alta performance.

Page Size 8KB (8192 bytes) - RECOMENDADO

Use quando:

Vantagens: Equilíbrio ideal entre performance, limites de índices e uso de recursos.

Page Size 16KB (16384 bytes)

Use quando:

Vantagens: Melhor performance para leituras grandes, índices maiores, menos fragmentação.

Page Size 32KB (32768 bytes)

Use quando:

Atenção: Pode não ser suportado em todas as versões do Firebird (disponível desde Firebird 3.0).

Interação com Charset

O Page Size interage diretamente com o charset escolhido, especialmente quando se usa UTF8:

UTF8 e Page Size:

Quando você usa charset UTF8, cada caractere pode ocupar de 1 a 4 bytes. Isso significa que os limites de índices calculados com base no Page Size são ainda mais restritivos. Por exemplo:

  • Com Page Size 8KB e ISO8859_1 (1 byte/caractere): ~2000 caracteres em índice
  • Com Page Size 8KB e UTF8 (até 4 bytes/caractere): ~500 caracteres em índice

Por isso, se você planeja usar UTF8, considere usar um Page Size maior (16KB ou 32KB) para compensar essa limitação.

Como Criar um Banco com Page Size Específico

Usando ISQL (linha de comando):

CREATE DATABASE 'C:\CAMINHO\BANCO.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 8192
DEFAULT CHARACTER SET UTF8
COLLATION UNICODE_CI_AI;

Usando IBExpert:

No IBExpert, ao criar um novo banco de dados, você pode especificar o Page Size na janela de criação. Procure pela opção "Page Size" e selecione o tamanho desejado (4096, 8192, 16384 ou 32768).

Usando FlameRobin:

No FlameRobin, ao criar um banco, você pode especificar o Page Size no campo apropriado da janela de criação.

Como Verificar o Page Size de um Banco Existente

Para verificar o Page Size de um banco de dados já criado, execute a seguinte query:

SELECT 
    MON$PAGE_SIZE AS PAGE_SIZE_BYTES,
    MON$PAGE_SIZE / 1024 AS PAGE_SIZE_KB
FROM MON$DATABASE;

Ou usando a função do sistema:

SELECT 
    RDB$PAGE_SIZE AS PAGE_SIZE_BYTES
FROM RDB$DATABASE;

Migrando para um Page Size Diferente

Como o Page Size não pode ser alterado em um banco existente, a única forma de mudá-lo é:

  1. Fazer backup completo: Use gbak para fazer backup do banco atual
  2. Recriar o banco: Crie um novo banco com o Page Size desejado
  3. Restaurar os dados: Use gbak para restaurar o backup no novo banco

Exemplo prático:

-- 1. Fazer backup
gbak -b -user SYSDBA -password masterkey 
     localhost:C:\CAMINHO\BANCO_ANTIGO.FDB 
     C:\BACKUP\BANCO.FBK

-- 2. Criar novo banco com Page Size 16KB
CREATE DATABASE 'C:\CAMINHO\BANCO_NOVO.FDB'
USER 'SYSDBA' PASSWORD 'masterkey'
PAGE_SIZE 16384
DEFAULT CHARACTER SET UTF8;

-- 3. Restaurar backup no novo banco
gbak -c -user SYSDBA -password masterkey 
     C:\BACKUP\BANCO.FBK 
     localhost:C:\CAMINHO\BANCO_NOVO.FDB
Importante:

Durante a migração, o banco ficará indisponível. Planeje uma janela de manutenção adequada. Além disso, certifique-se de que o charset e collation do novo banco sejam compatíveis com os dados que serão restaurados.

Resumo e Recomendações Finais

Page Size Tamanho Limite de Índice Uso Recomendado
4KB 4096 bytes ~1KB Bancos muito pequenos, sistemas embarcados
8KB 8192 bytes ~2KB Recomendado para maioria dos casos
16KB 16384 bytes ~4KB Bancos grandes, data warehouses, índices grandes
32KB 32768 bytes ~8KB Casos muito específicos, Firebird 3.0+

Recomendações práticas:

← Voltar para o Guia Firebird