Abaixo, você encontrará 5 passos essenciais para tornar seu banco de dados Firebird mais rápido e melhor. Nestes passos, daremos instruções claras sobre o que procurar e como consertar ou melhorar. Você deve iniciar as otimizações de desempenho do Firebird com esses 5 passos.

1. Passo 1 de 5: Verifique as configurações de desempenho do SO no seu servidor Firebird

Para executar o FirebirdSQL da maneira mais eficiente, certifique-se de ter definido as configurações necessárias do Sistema Operacional.

1.1. Para Windows

Em geral, os usuários do Windows precisam fazer os seguintes 3 passos:

  1. Ative “Desempenho Máximo” ou “Alto Desempenho”

    Altere seu plano de energia para “Alto Desempenho” (ou Máximo, se você tiver). Isso pode aumentar o desempenho da sua CPU em até 20%, porque faz com que os núcleos da sua CPU funcionem mais rápido com maior consumo de energia. Para alterar seu plano de energia, vá para as configurações de energia do Windows (“Opções de Energia”) e escolha “Alto desempenho” (em vez de “Equilibrado”, que é o usual).

    high performance

    Não é necessário reiniciar o Firebird ou reiniciar o servidor, o efeito é aplicado imediatamente.

    Por favor, note que, às vezes, o Windows Update pode redefinir essa configuração para o padrão “Equilibrado”.

  2. Ative a opção “Permitir que o serviço interaja com a área de trabalho” (“Allow service to interact with desktop”) para o serviço Firebird

    Esta opção é absolutamente necessária para o Firebird 2.5 com arquitetura Classic e será útil também para outras arquiteturas, especialmente para bancos de dados Firebird com alto número de conexões.

    Para ver o efeito, é necessário reiniciar todas as instâncias do Firebird.

    Allow service interact with desktop
  3. Para todos os discos, verifique a Política de Cache de Escrita (Write-Caching Policy)

    Se você não tem RAID, SAN ou outro dispositivo de armazenamento complexo, certifique-se de que o Windows habilitou o cache de escrita. Clique com o botão direito do mouse no disco, selecione Propriedades e a aba Políticas. A opção “Habilitar cache de escrita no dispositivo” deve estar ativada.

    Não é necessário reiniciar o Windows, a menos que seja explicitamente necessário.

    Se você possui RAID — é necessário configurá-lo corretamente. Dedicaremos outro artigo para explicar como configurar RAIDs populares.

    write cache policy

1.1.1. Passos opcionais para Windows

As seguintes recomendações são baseadas em descobertas práticas do suporte da IBSurgeon:

  1. Tamanho do arquivo de Swap. A opção recomendada é permitir que o Windows defina o tamanho do arquivo de swap. Se você decidir limitar o arquivo de swap, certifique-se de que ele tenha pelo menos 32Gb para RAM maior do que 64Gb. Nunca desative o arquivo de swap!

  2. Tempo de atividade. Reinicie seu servidor Windows ou VM pelo menos uma vez a cada 180 dias.

1.2. Para Linux

No Linux, existem 2 passos obrigatórios para servidores Firebird:

  1. Aumente MaxOpenFiles

    Uma instância do Firebird com um alto número de conexões exigirá o aumento do número de arquivos abertos (handles).

    Verifique o valor de MaxOpenFile com o seguinte comando:

    cat /proc/firebird_process_id/limits

    O padrão é 4096, aumente-o se necessário para 49999.

    Defina-o no arquivo de serviço do Firebird LimitNOFILE=49999

    Normalmente, os arquivos de serviço do Firebird estão localizados em /usr/lib/systemd/system/firebird-superserver.service, ou in/usr/lib/systemd/system/firebird

    Firebird fornecido com HQbird (nas versões 2020+) já possui essa configuração.

  2. Verifique e aumente VMA, se necessário

    Instâncias do Firebird com um alto número de conexões, com arquiteturas SuperServer e SuperClassic, podem exigir muitas Áreas de Memória Virtual (VMA).

    Verifique a contagem de VMA com o seguinte comando

    cat /proc/sys/vm/max_map_count

    O padrão é 64K, deve ser configurado para 250K.

    Para aumentá-lo, adicione a seguinte linha ao /etc/sysctl.conf vm.max_map_count=262144

    Para aplicar, reinicie o servidor, ou, para aplicar imediatamente, faça

    sysctl -w vm.max_map_count=262144

    Por favor, note que, para tornar essa configuração permanente, é necessário alterar o sysctl.conf!

1.2.1. Passos opcionais para Linux

  1. Verifique se você tem espaço suficiente em /tmp. Recomendamos ter pelo menos 50Gb. O Firebird armazena arquivos temporários em /tmp e /tmp/firebird, e eles podem ser bastante grandes. Se você usa o Firebird HQbird com a opção BlobTempSpace, os arquivos temporários de Blob serão armazenados lá.

  2. Tempo de atividade. Reinicie seu servidor pelo menos uma vez a cada 90 dias.

  3. Swap. Nunca desative o swap no Linux.

2. Passo 2 de 5: Crie o firebird.conf ideal para o seu servidor Firebird

2.1. Qual é o problema com a configuração padrão?

Você está usando o arquivo firebird.conf padrão que acompanha o Firebird regular (vanilla), instalado a partir do instalador padrão ou repositório Linux? Se sim, temos más notícias para você. Seu arquivo firebird.conf não é o melhor para o seu banco de dados Firebird.

O arquivo firebird.conf padrão é feito para funcionar no hardware ou VM mais simples e pequenos. Mas isso não é o que a maioria dos servidores de produção precisa.

Se você está usando HQbird com Firebird, está em uma situação melhor. O HQbird fornece um arquivo firebird.conf que é melhor para o servidor médio.

2.2. Criar configuração ótima do Firebird

Você quer melhorar seus arquivos firebird.conf (e databases.conf) para o seu hardware ou VM? Essa é uma ideia inteligente. Temos um serviço gratuito que pode ajudá-lo com isso. É chamado “Calculadora de Configuração para Firebird”, e pode fazer seu banco de dados Firebird usar seus recursos de maneira mais eficiente. O serviço criará uma configuração melhor que a padrão para você e, mais importante, ajudará você a evitar erros comuns na configuração do Firebird.

Se você quiser melhorar ainda mais sua configuração, podemos fazer mais coisas para você no âmbito dos nossos [Serviços de Otimização](https://ib-aid.com/en/firebird-interbase-performance-optimization-service/), como analisar suas consultas, a estrutura do seu banco de dados e mais.

Para experimentar a Calculadora de Configuração, basta clicar neste link: https://cc.ib-aid.com/democalc.html ou, melhor ainda, registre-se em https://cc.ib-aid.com, para acessar outras ferramentas para Firebird.

Selecione a versão do Firebird, arquitetura e depois detalhes do seu hardware/VM (RAM/núcleos de CPU), e características do banco de dados e carga: tamanho do banco de dados, tamanho da página do banco de dados e clique em “Criar”:

calculate configuration

Em seguida, você precisa copiar e colar os resultados nos seus arquivos firebird.conf e databases.conf.

Mas antes de fazer isso, certifique-se de deletar tudo que já está nesses arquivos, até mesmo os comentários. Dessa forma, você não terá problemas com as configurações antigas e novas.

2.3. Coisa muito importante!

Certifique-se de que você não tenha valor para a linha de Buffers de Página na página de cabeçalho do seu banco de dados!

Se você tiver que garantir isso, execute no terminal (prompt de comando):

/opt/firebird/bin/gstat -h /path/to/database.fdb

ou (para Windows)

<pasta de Firebird bin>\gstat.exe -h Disk:Pathtodatabase.fdb

Output será assim:

Gstat execution time Mon Nov 28 11:25:03 2022

Database header page information:
Flags 0
Generation 5914
System Change Number 0
Page size 16384
ODS version 12.0
Oldest transaction 6194
Oldest active 6195
Oldest snapshot 6195
Next transaction 6220
Sequence number 0
Next attachment ID 63
Implementation HW=AMD/Intel/x64 little-endian OS=Windows CC=MSVC
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 3
Creation date Nov 24, 2022 16:42:58
Attributes
Variable header data:
Sweep interval: 20000
Database GUID: {260809FC-FFF7-488F-7ABF-FEF0A84F6900}
*END*
Gstat completion time Mon Nov 28 11:25:03 2022

Verifique se a linha com o parâmetro Page Buffers está em 0.

Se estiver configurado para outro valor, ele substituirá as configurações em firebird.conf e databases.conf.

Para usar os valores da configuração, defina Page Buffers no cabeçalho para 0 com o comando

gfix -buff 0 /caminho/para/banco_de_dados.fdb -user SYSDBA -pass masterkey

Para aplicar a nova configuração, reinicie todas as instâncias do Firebird.

Como resultado, você verá um desempenho melhorado da sua instância Firebird.

3. Passo 3 de 5: Verifique o Desempenho do Disco no Servidor Firebird

Uma das causas comuns de lentidão do banco de dados Firebird é quando seu disco não é rápido o suficiente: seu disco é onde seu banco de dados Firebird armazena e lê seus dados, então ele precisa ser rápido. Vamos testar o quão bem o seu disco funciona com o seu banco de dados Firebird.

3.1. CrystalDiskMark (Windows)

Existem várias ferramentas universais para medir o desempenho do disco de maneira comum, elas fornecem a estimativa em MB/seg ou em IOPS. A mais popular é o CrystalDiskMark ([https://crystalmark.info](https://crystalmark.info)).

Em nossa experiência, o CrystalDiskMark fornece uma estimativa adequada da velocidade do disco e pode ser usado como um ponto de partida. O exemplo de saída do CrystalDiskMark em formato de texto:

------------------------------------------------------------------------------
CrystalDiskMark 8.0.4 x64 (C) 2007-2021 hiyohiyo
                                  Crystal Dew World: https://crystalmark.info/
------------------------------------------------------------------------------
* MB/s = 1,000,000 bytes/s [SATA/600 = 600,000,000 bytes/s]
* KB = 1000 bytes, KiB = 1024 bytes

[Read]
  SEQ    1MiB (Q=  8, T= 1):  2334.517 MB/s [   2226.4 IOPS] <  3588.90 us>
  SEQ    1MiB (Q=  1, T= 1):  1799.226 MB/s [   1715.9 IOPS] <   582.13 us>
  RND    4KiB (Q= 32, T= 1):   411.333 MB/s [ 100423.1 IOPS] <   318.20 us>
  RND    4KiB (Q=  1, T= 1):    25.074 MB/s [   6121.6 IOPS] <   163.02 us>

[Write]
  SEQ    1MiB (Q=  8, T= 1):   999.476 MB/s [    953.2 IOPS] <  8341.94 us>
  SEQ    1MiB (Q=  1, T= 1):  1543.671 MB/s [   1472.2 IOPS] <   675.37 us>
  RND    4KiB (Q= 32, T= 1):    83.297 MB/s [  20336.2 IOPS] <  1564.70 us>
  RND    4KiB (Q=  1, T= 1):    70.380 MB/s [  17182.6 IOPS] <    57.63 us>

Profile: Default
   Test: 64 GiB (x5) [C: 89% (828/931GiB)]
   Mode: [Admin]
   Time: Measure 5 sec / Interval 5 sec
   Date: 2022/11/29 17:32:33
     OS: Windows 11  [10.0 Build 22621] (x64)

No entanto, esse teste não é suficiente para ter uma garantia de que o disco é realmente rápido para o Firebird, porque o teste é muito sintético.

3.2. O Teste Simples de Inserção, Atualização e Exclusão

Para medir o desempenho do disco a partir do Firebird, a IBSurgeon desenvolveu um script que cria o banco de dados, insere 1 milhão de registros, atualiza esses registros e, em seguida, os exclui.

O script é executado pela ferramenta padrão isql.exe, com a configuração atual do Firebird.

Essencialmente, é um teste de thread único que mede o desempenho do Firebird para o caso de uma operação de processamento de “pico” — o resultado do teste é um arquivo de banco de dados com tamanho de 3.6 Gb.

O resultado é apresentado na forma ou número de milissegundos para realizar Inserção de 1 Mln, Atualização de 1 Mln, Exclusão de 1 Mln. registros separadamente para a operação e para o tempo de commit.

Desde a criação do script, as pessoas o executaram em centenas de servidores (muitas pessoas da comunidade executaram o teste em vários servidores e enviaram seus resultados), e agora há a tabela e o diagrama com os resultados.

Para facilitar a comparação, o resultado é apresentado no formato de Inserções/segundos, Atualizações/segundos, Exclusões/segundo.

3.3. Como executar o Teste Simples de Inserção, Atualização e Exclusão

3.3.1. Teste de velocidade com HQbird

Você pode usar o HQbird para testar a velocidade do seu disco com o “Teste Simples de IUD”. Vá para o console web e procure pelo ícone que diz “Teste de Velocidade” no lado direito. Então, escolha a pasta onde você quer fazer o teste no menu suspenso. E então, é só clicar em Iniciar. É isso.

speed test 0

Após 5-10-20 minutos, você verá os resultados de um teste de velocidade:

speed test 1

3.3.2. Teste de velocidade em servidor com qualquer Firebird.

Para executar o teste em qualquer servidor Firebird, copie e cole o script do site: [https://ib-aid.com/en/simple-insert-update-delete-test-for-firebird/#how_to_run_firebird_performance_test](https://ib-aid.com/en/simple-insert-update-delete-test-for-firebird/#how_to_run_firebird_performance_test) e salve-o no arquivo, por exemplo, /opt/script1.sql ou c:\temp\script1.sql.

Em seguida, edite o caminho na primeira linha do script para o banco de dados de teste a ser criado — ele deve estar na mesma unidade onde o banco de dados principal está localizado:

create database "localhost:<DISK>:<PATH>inserttest4.fdb"
user "SYSDBA" password "masterkey" page_size 16384;

ou, para Linux

create database "localhost:/<path>/inserttest4.fdb"
user "SYSDBA" password "masterkey" page_size 16384;

Evite situações em que o disco testado esteja carregado com uma operação longa como backup ou cópia de grandes volumes de dados, ou simplesmente tenha um número elevado de usuários. A melhor opção é executar o script em modo exclusivo, sem usuários.

Execute o script a partir do prompt de comando com um comando como este:

/opt/firebird/bin/isql -i /opt/script1.sql

ou

"C\:Program Files\Firebird\Firebird_4_0\isql.exe" -i .\script1.sql

A saída será exibida na tela (apenas a primeira parte para INSERTs é mostrada abaixo):

C:\HQbird\Firebird30> isql -i c:\Temp\test1.sql
Use CONNECT or CREATE DATABASE to specify a database
INSERTED_ROWS 1000000
ELAP_MS 58890
Current memory = 702384256
Delta memory = 3215392
Max memory = 704756112
Elapsed time= 58.894 sec
Buffers = 40960
Reads = 9
Writes = 88015
Fetches = 25332353
Current memory = 702342416
Delta memory = -41840
Max memory = 704756112
Elapsed time= 4.846 sec
Buffers = 40960
Reads = 1
Writes = 40254
Fetches = 2

3.3.3. Como interpretar os resultados

Por favor, note que é necessário somar o tempo da operação e o tempo de seu commit, e então dividir 1000000 pelo tempo total.

Para o exemplo acima,

VELOCIDADE DE INSERÇÃO = 1000000 / (58.984+4.846) = 15666 inserções /segundos

Resultados na forma de Operação por segundo — por exemplo, 6000 Inserções/segundo, 5200 Atualizações/segundo, 7300 exclusões/segundo, podem ser comparados contra a tabela/gráfico de medições de desempenho.

Se você ver os resultados acima da metade do gráfico/tabela, significa que a velocidade do disco está Ok, e a razão para a lentidão estará em outra área que não o hardware.

Outra coisa a verificar é o tempo para commit. Se você ver que o tempo total do teste contém mais de 20% do commit, significa que pode haver problema com o cache de escrita.

Se você ver que o resultado do teste está abaixo da média, e você tem discos SSD, significa que há algum problema com a configuração do disco ou driver.

3.4. As possíveis razões pelas quais o disco pode ser lento

  1. Sistema de arquivos errado para o drive onde reside o banco de dados Firebird

  2. Ausência de Unidade de Backup de Bateria para RAID (ou bateria descarregada)

  3. Ausência de driver adequado (ou driver desativado pelo fornecedor para impedir que você use disco de nível consumidor em sistema operacional de servidor)

  4. Limite de IOPS para VM (por exemplo, Azure tem limites muito baixos de IOPS para máquinas virtuais de uso geral)

  5. Processo de backup ativo ou outro processamento (cópia, rearranjo, etc) de grandes dados no disco.

  6. Disco prestes a falhar: blocos ruins, superaquecimento, etc. Sempre verifique os dados S.M.A.R.T do disco

4. Passo 4 de 5: Verifique os índices do seu banco de dados Firebird para problemas comuns

Para manter o banco de dados Firebird em boa forma, todos os índices devem estar saudáveis, com estatísticas atualizadas e ser eficazes.

Vamos ver como realizar essas verificações.

4.1. Verificar índices não ativos ou não ativados

Índices de banco de dados Firebird podem existir em um de três estados: ativo, inativo ou não ativado.

  1. Um índice ativo é um índice regular que otimiza o desempenho da consulta.

  2. Um índice inativo é um índice que foi explicitamente desativado pelo comando ALTER INDEX …​ INACTIVE. Um índice inativo não será usado em consultas.

  3. Um índice não ativado é um índice que deveria ter sido habilitado durante o processo de restauração gbak, mas o processo foi encerrado prematuramente (tipicamente devido a um erro). Índices não ativados normalmente não devem estar presentes no banco de dados. Um índice não ativado não será usado em consultas.

Para inspecionar o estado dos índices em um banco de dados Firebird, execute a seguinte consulta:

SELECT count(*) FROM RDB$INDICES WHERE RDB$INDEX_INACTIVE<>0;

Se o resultado for 0, todos os índices estão ativos. Se o resultado não for 0, faça a seguinte consulta para ver a lista de índices problemáticos:

SELECT RDB$INDEX_NAME, RDB$INDEX_INACTIVE
FROM RDB$INDICES WHERE RDB$INDEX_INACTIVE<>0;

e verifique os estados dos índices listados. O valor 1 significa que o índice está inativo, e o valor 3 significa que o índice está em estado não ativo.

Para ativar um índice, execute o comando para cada índice:

ALTER INDEX <indexnamexxx> ACTIVE;

4.2. Recalcule a seletividade (estatísticas) dos índices no seu banco de dados Firebird

O otimizador no Firebird (e no InterBase) usa 2 critérios principais ao analisar uma consulta e escolher um plano de execução — o tamanho das tabelas (cardinalidade) e a seletividade dos índices (seletividade).

A seletividade dos índices é calculada como 1 dividido pelo número de valores únicos na coluna indexada (ou colunas). Por exemplo, se este é um índice em uma chave primária, e há 10 mil registros na tabela, então sua seletividade será igual a 1 / 10000 = 0.0001. E se a mesma tabela tem uma coluna com 10 valores diferentes, então o índice nesta coluna terá uma seletividade de 1 / 10 = 0.1. Para o otimizador, quanto menor a seletividade do índice, melhor.

Se o otimizador sempre determina o tamanho da tabela mais ou menos precisamente, então a seletividade dos índices não é recalculada automaticamente. Como resultado, o otimizador poderia estimar a seletividade que está longe da realidade. Então, a seletividade precisa ser recalculada manualmente.

O recálculo da seletividade dos índices ocorre quando eles são criados, quando ALTER INDEX ACTIVE, e quando SET STATISTICS INDEX nomedoindice.

Por exemplo, você criou uma tabela, criou índices, e então preencheu a tabela com dados. A seletividade de todos os índices desta tabela permanecerá 0 até você recalcular a seletividade.

Ou, você criou uma tabela, índices, preencheu-a com dados, fez um backup-restauração (quando restaurando, os índices são recriados, e a seletividade será relevante). E então você mudou 30-40% dos dados em algumas tabelas (adicionados, deletados ou modificados). E a seletividade também será irrelevante.

Você pode visualizar a seletividade armazenada dos índices com uma consulta (a seletividade dos índices inativos será igual a -1)

select i.rdb$relation_name, i.rdb$index_name, i.rdb$statistics
from rdb$indices i
-- do not show indices for system tables
-- where coalesce (rdb$system_flag, 0) = 0
order by 1, 2

Recalcular as estatísticas dos índices no banco de dados Firebird é uma maneira de melhorar o desempenho de suas consultas. As estatísticas informam ao Firebird quão seletivos são seus índices e ajudam a escolher o melhor plano de execução. Aqui estão os passos para recalcular as estatísticas dos índices no banco de dados Firebird:

  • Conecte-se ao seu banco de dados usando uma ferramenta como isql, FlameRobin, etc.

  • Execute o comando SET STATISTICS INDEX <nome_do_indice>; para cada índice que deseja atualizar. Você também pode usar ALL em vez de <nome_do_indice> para atualizar todos os índices no banco de dados.

  • Confirme suas alterações com o comando COMMIT;

  • Você pode verificar as estatísticas atualizadas com o comando SHOW INDEX <nome_do_indice>; ou SHOW INDEX ALL;

É isso. Você recalculou as estatísticas dos índices no banco de dados Firebird. Você pode fazer isso periodicamente, especialmente após grandes alterações em seus dados, para manter seus índices eficientes.

4.3. Como verificar o estado dos índices e recalcular as estatísticas com o HQbird

Para verificar o estado dos índices com o HQbird, siga estes passos:

  • Acesse a interface web em http://localhost:8082 e escolha o trabalho “Recálculo de estatísticas de índices” para o banco de dados registrado. Este trabalho realizará ambas as tarefas.

    job index stat
  • Abra o diálogo e habilite o trabalho.

    update index stat conf
  • O trabalho executará tanto o recálculo das estatísticas quanto a verificação do estado dos índices. O cronograma padrão é semanalmente aos sábados às 02:00 da manhã.

    Se você precisar fazer o recálculo imediato das estatísticas dos índices (por exemplo, se você acabou de instalar o HQbird), você pode clicar em “Executar Agora” no widget do trabalho.

  • Para bancos de dados maiores que 20 GB, sugerimos recalcular os índices mensalmente em vez de semanalmente.

5. Passo 5 de 5. Escolha o tamanho de página adequado para o seu banco de dados Firebird

5.1. Um pouco de teoria

Seu banco de dados Firebird é composto por peças que têm todas o mesmo tamanho. Essas peças são chamadas de páginas. O tamanho das páginas depende da versão do Firebird que você usa. No Firebird 1, o tamanho padrão das páginas era de 1024 bytes. No Firebird 2.5, o tamanho padrão da página era de 4096 bytes. E no Firebird 3.0 e posteriores, os bancos de dados são criados com tamanho de página de 8192 bytes. Para bancos de dados maiores, o Firebird 2.5 e 3 têm opções de até 16384, e a v4 + tem 32768 bytes.

1024

2048

4096

8192

16384

32768

2.5

possivel

possivel

padrão

possivel

possivel

Não implementado

3.0

Não suportado

Não suportado

possivel

padrão

possivel

Não implementado

4.0

Não suportado

Não suportado

possivel

padrão

possivel

possivel

5.0

Não suportado

Não suportado

possivel

padrão

possivel

possivel

Para ver qual é o tamanho da página do seu banco de dados, por favor, use o comando:

No Windows

gstat.exe -h Disco:caminho\banco_de_dados.fdb

No Linux

/opt/firebird/bin/gstat -h /caminho_para/banco_de_dados.fdb

e veja a linha “Page size”.

O tamanho das páginas é muito importante para o seu banco de dados Firebird, então você precisa escolher o certo.

Para alterar o tamanho da página, você precisa usar a ferramenta gbak para fazer backup e restaurar seu banco de dados, e adicionar a opção -page <NNN>. Mas tenha cuidado, isso pode levar muito tempo se o seu banco de dados for grande. Então, é melhor escolher o tamanho de página certo desde o início.

Como você escolhe o tamanho de página certo para o seu banco de dados Firebird? Há as seguintes coisas a considerar:

  1. Tamanho de página padrão

  2. Tamanho do banco de dados

  3. Profundidade dos índices

  4. Tamanho dos registros comprimidos armazenados nas páginas para as tabelas grandes

  5. A fazer — recalcular configuração após mudança do tamanho da página

Vamos considerar todos esses pontos:

5.2. Tamanho de página padrão

Como você pode entender, o tamanho da página não pode ser menor que o padrão no banco de dados específico. Se o banco de dados for criado com o comando CREATE DATABASE sem a opção PAGE_SIZE, o banco de dados será criado por padrão com o tamanho de página padrão. Se o banco de dados foi criado em uma versão anterior do Firebird e convertido com backup/restauração, o tamanho da página pode ser preservado, e pode ser menor que o padrão, ou seja, não otimizado. Neste caso, você precisa mudar o tamanho da página para o padrão ou superior. Na prática, isso significa 8192 como mínimo.

5.3. Tamanho do banco de dados

Para bancos de dados menores que 20Gb em tamanho, ou sem intenção de crescer além deste tamanho sem backup/restauração (quando haverá a possibilidade de mudar o tamanho da página), a recomendação geral é usar 8192 bytes como tamanho de página (e é o tamanho padrão para as versões 3+).

Para bancos de dados maiores use 16384 bytes.

E quanto a 32768, seria melhor usar a maior opção disponível?

Nós fizemos testes com bancos de dados de até 1Tb em tamanho, e não encontramos melhoria direta de desempenho em comparação com 16384. Um de nossos clientes com um banco de dados de 4Tb relatou que a página de 32768 melhorou o desempenho. Então, a decisão de usar o tamanho de página de 16K ou 32K dependerá dos próximos passos.

5.4. Profundidade dos índices

Para manter o desempenho dos índices no nível ótimo, eles devem ter profundidade ⇐3.

Como verificar a profundidade?

Usando apenas a ferramenta padrão, é um processo um pouco longo:

  1. Execute a ferramenta gstat para coletar estatísticas

    gstat -r -user SYSDBA -pass masterkey localhost:Disk:pathdb.fdb > stats.txt
  2. Abra as estatísticas no editor de texto e encontre todas as ocorrências das palavras “Depth: 3”, “Depth: 4”, “Depth: 5”. Deveriam existir índices com profundidade 2 e 3 (3, se o banco de dados não for muito pequeno), e, para um desempenho ótimo, não deveriam existir índices com Profundidade 4 e 5.

No HQbird, você precisa usar a ferramenta HQbird Database Analyst do pacote HQbird Admin, que é projetada para analisar estatísticas de bancos de dados.

Abra o HQbird Database Analyst, recupere as estatísticas do banco de dados (ou abra o arquivo com estatísticas coletadas manualmente pelo gstat -r), vá para a aba Índices e ordene por Profundidade:

hqbird page size

Se você ver índices com Depth > 3, é necessário aumentar o tamanho da página do banco de dados.

Se você já estiver usando o tamanho máximo possível de página, por exemplo 16384 na v3, considere a migração para v4-5, onde o tamanho máximo de página é 32768.

5.5. Tamanho dos registros comprimidos

O Firebird mantém os dados das tabelas em forma comprimida. Você pode ver nas estatísticas dos bancos de dados do passo anterior uma informação sobre o tamanho dos registros na tabela, algo assim: (a saída pode ser diferente para diferentes versões):

TST (128)

Primary pointer page: 148, Index root page: 149
Average record length: 20.99, total records: 100000
Average version length: 0.00, total versions: 0, max versions: 0
Data pages: 1516, data page slots: 1516, average fill: 62%

Fill distribution:
0 - 19% = 1
20 - 39% = 0
40 - 59% = 3
60 - 79% = 1512
80 - 99% = 0

É necessário verificar o tamanho dos registros para as maiores tabelas e compará-lo com o tamanho da página.

A ideia é calcular quantos registros são armazenados em uma única página — se houver registros com tamanho médio de 700 bytes em páginas de 4096 bytes, o Firebird precisará ler muitas páginas de dados.

Claro, isso depende da estrutura do banco de dados e da lógica de negócios, mas quanto maior o tamanho dos registros, maior o tamanho da página necessário.

No “HQbird Database Analyst” podemos ver os tamanhos dos registros para tabelas em forma de tabela simples: abra ou recupere estatísticas, aba “Tabelas” (“Tables”), e ordene por Comprimento do Registro.

Além do “Record Length” (“Comprimento do Registro”), o “HQbird Database Analyst” mostra o parâmetro “Average Fill” (“Preenchimento Médio”) e calcula o parâmetro derivado “Preenchimento Real”, para mostrar quão eficientemente os dados são armazenados nas páginas do banco de dados.

hqbird page size records

5.6. Recalcular configuração após mudança do tamanho da página

Lembre-se de que o tamanho do cache do Firebird é medido em páginas? Se o tamanho da página for alterado, o tamanho absoluto do cache também será alterado. Se você definiu 1 milhão de páginas para o tamanho de página de 8192, o tamanho absoluto do cache é de 8Gb, e se o tamanho da página for aumentado para 16384 bytes, o tamanho absoluto do cache se tornará 16Gb.

Para evitar problemas com um cache muito grande, após a mudança do tamanho da página, recalcule a configuração no Calculador de Configuração cc.ib-aid.com.

6. Resumo

Embora as etapas acima sejam cruciais para melhorar o desempenho, elas podem não ser abrangentes. Se você descobrir que, apesar de verificações minuciosas, o desempenho permanecer ruim, pode ser necessário refinar suas consultas, otimizar sua arquitetura e ajustar suas transações.

Para assistência especializada em otimização de desempenho, sinta-se à vontade para contratar nossos serviços de otimização entrando em contato conosco em [email protected].