Verifique as configurações de desempenho do sistema operacional no servidor Firebird
Windows
Ativar «Desempenho Máximo» ou «Alto Desempenho»
Mude seu plano de energia para "Alto Desempenho" (ou Ultimate, se você tiver). Isso pode aumentar o desempenho da CPU em até 20%, porque faz com que os núcleos da 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). Veja na imagem abaixo que o WIndows geralmente traz pré-configurado o plano equilibrado, mude para um dos dois citados acima.
Ative a opção "Permitir que o serviço interaja com a área de trabalho" para o serviço Firebird
Esta opção é absolutamente necessária para o Firebird com arquitetura clássica, e será útil para outras arquiteturas também, especialmente para os bancos de dados Firebird com alto número de conexões.
Para ver o efeito, é necessário reiniciar todas as instâncias do Firebird, veja que por padrão essa opção vem desligada.
Para todos os discos, verifique a Política de cache de gravação
Se você não tiver RAID ou SAN ou outro dispositivo de armazenamento complexo, verifique se o Windows habilitou o cache de gravação. Clique com o botão direito do mouse no disco, selecione Propriedades e guia Políticas. A opção "Ativar cache de gravação no dispositivo" deve ser habilitada.
Não há necessidade de reiniciar o Windows, até que ele será explicitamente necessário.
Se você tiver RAID ou SAN - precisa configurá-lo corretamente. Entre em contato com o fabricante para isso.
Etapas opcionais para Windows
- Tamanho do arquivo de SWAP. A opção recomendada é permitir que o Windows defina o tamanho. Se você decidir limitar o arquivo, verifique se ele está definido como pelo menos 32 Gb. Nunca desligue o SWAP!
 - Uptime. Reinicialize o servidor Windows ou a VM pelo menos uma vez a cada 180 dias.
 
Linux
Aumentar MaxOpenFiles
A instância Firebird com alto número de conexões exigirá aumentar o número de arquivos abertos (identificadores).
Verifique o valor de MaxOpenFile com o seguinte comando:
cat /proc/firebird_process_id/limites
O padrão é 4096, aumente-o se necessário para 49999.
Defini-lo no arquivo de serviço Firebird LimitNOFILE=49999
Normalmente, os arquivos de serviço do Firebird estão localizados em /usr/lib/systemd/system/firebird-superserver.service ou em/usr/lib/systemd/system/firebird
Verifique e aumente o VMA, se necessário
Instâncias Firebird com alto número de conexões, com arquiteturas SuperServer e SuperClassic podem exigir muitas áreas de memória virtual (VMA).
Verifique a contagem do VMA com o seguinte comando:
cat /proc/sys/vm/max_map_count
O padrão é 64K, ele deve ser definido como 250K.
Para aumentá-lo, adicione a seguinte linha ao arquivo /etc/sysctl.conf
vm.max_map_count=262144
Para aplicar, reinicialize o servidor ou, para aplicar imediatamente, faça
sysctl -w vm.max_map_count=262144
Por favor, note que, para tornar esta configuração permanente, precisa mudar em sysctl.conf!
Etapas opcionais para Linux
- 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ê usar o Firebird HQbird com a opção BlobTempSpace, haverá arquivos temporários de Blob armazenados.
 - Uptime. Reinicialize o servidor Linux ou a VM pelo menos uma vez a cada 180 dias.
 
Crie o firebird.conf customizado para o seu servidor Firebird
Qual é o problema com a configuração padrão?
Você está usando o arquivo firebird.conf padrão que vem com o Firebird regular (Vanilla), instalado a partir do instalador padrão ou repositório Linux? Se sim, temos algumas más notícias para você. Seu arquivo firebird.conf não é o melhor para seu banco de dados Firebird.
O arquivo firebird.conf padrão é feito para funcionar no menor e mais simples hardware ou VM. Mas não é disso que a maioria dos servidores de produção precisa.
Crie a configuração ideal para o seu servidor Firebird
Você deseja tornar seus arquivos firebird.conf (e databases.conf) melhores para seu hardware ou VM? Essa é uma ideia inteligente. Existe um serviço gratuito que pode ajudá-lo com isso. Chama-se "Configuration Calculator for Firebird" e pode configurá-lo usando as instruções na seguinte página: Otimização do Banco de Dados Firebird
Coisa muito importante
Certifique-se de que você não tem valor para a linha de buffers de página na página de cabeçalho do seu banco de dados!
você pode verificar usando o GSTAT dessa forma
gstat -h /caminho/para/database.fdb
e corrigir usando o GFIX
gfix -buff 0 /path/to/database.fdb -user SYSDBA -pass masterkey
Verifique o desempenho do disco no servidor Firebird
Entre os motivos de lentidão, a situação mais frequente é quando o subsistema de disco funciona mais lentamente do que o esperado e leva à lentidão do banco de dados Firebird. É estritamente necessário verificar o desempenho do subsistema de disco do ponto de vista do Firebird.
Existem várias ferramentas universais para medir o desempenho do disco da maneira comum, elas fornecem a estimativa em MB/s ou em IOPS. O mais popular é o CrystalDiskMark (https://crystalmark.info/).
Em nossa experiência, o CrystalDiskMark fornece uma estimativa adequada da velocidade do disco e pode ser usado como ponto de partida. O exemplo da saída do CrystalDiskMark no 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)
Porém, não basta ter a garantia de que o disco é realmente rápido para o Firebird, pois o teste é sintético.
Simples ”Insert Update Delete Test”
Para medir o desempenho do disco do Firebird, a IBSurgeon desenvolveu o script, que cria o banco de dados, insere 1 milhão de registros, atualiza esses registros e depois os exclui.
O script é executado pela ferramenta padrão isql.exe, com a própria configuração 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 executar Insert 1 Mln, Update 1 Mln, Delete 1 Mln. registros separadamente para a operação e para o tempo de confirmação.
Desde a criação do script, pessoas o rodaram em vários servidores (pessoas da comunidade rodaram o teste em vários servidores e enviaram seus resultados), e agora temos a tabela e o diagrama com os resultados: https://ib-aid.com/images/testresult/insert_update_delete_results.xls
Para facilitar a comparação, o resultado é apresentado no formato de Inserções/segundos, Atualizações/segundos, Exclusões/segundo.
Como executar Simples Insert Update Delete Test
Para executar o teste com Firebird padrao, copie e cole o script do site:
e salve-o no arquivo, por exemplo, /opt/script1.sql ou c:\tempscript1.sql.
Em seguida, edite o caminho na 1ª linha do script para o banco de dados de teste a ser criado – ele deve estar no mesmo drive onde está localizado o banco de dados principal:
create database "localhost:DISK:PATHinserttest4.fdb" 
user "SYSDBA" password "masterkey" page_size 16384;
Evite situações em que o disco testado é carregado com operação longa, como backup ou cópia de grandes volumes de dados ou número máximo de usuários.
A melhor opção é executar o script no modo exclusivo.
Execute o script no prompt de comando com um comando como este:
"C:\Program Files\Firebird\Firebird_3_0\isql.exe” -i /c:\tempscript1.sql
A saída estará na tela (apenas a 1ª parte para INSERTs é mostrada abaixo):
"C:\Program Files\Firebird\Firebird_3_0\isql.exe” -i c:\Temptest1.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
Como interpretar os resultados
Observe que é necessário somar o tempo da operação e seu tempo de confirmação e, em seguida, dividir 1000000 pelo tempo total.
Para o exemplo acima:
INSERT SPEED = 1000000 / (58.984+4.846) = 15666 inserts /seconds
Resultados na forma de operação por segundo - por exemplo, 6.000 inserções/segundo, 5.200 atualizações/segundo, 7.300 exclusões/segundo, podem ser comparados com a tabela/gráfico de medições de desempenho.
A tabela está aqui: https://ib-aid.com/images/testresult/insert_update_delete_results.xls
Se você vir os resultados acima do meio do gráfico/tabela, isso significa que a velocidade do disco está OK e o motivo da lentidão estará em outra área que não seja o hardware.
Outra coisa a verificar é a hora de cometer. Se você perceber que o tempo total de teste contém mais de 20% do commit, isso significa que pode haver um problema com o cache de gravação.
Se você perceber que o resultado do teste está abaixo da média e você possui discos SSD, significa que há algum problema com a configuração do disco ou driver.
As possíveis razões pelas quais o disco pode ser lento
- Sistema das archuivos não ideal para Firebird
 - Ausência de Unidade de Backup de Bateria para RAID (ou bateria descarregada)
 - Ausência de driver adequado (ou o driver foi desativado pelo fornecedor para impedir que você use o disco de nível de consumidor no sistema operacional do servidor)
 - Limite de IOPS para VM (por exemplo, o Azure tem limites de IOPS muito baixos para máquinas virtuais de uso geral)
 - Processo de backup ativo ou outro processamento (cópia, reorganização, etc.) de grandes dados no disco.
 - O disco esta morrendo: blocos defeituosos, superaquecimento, etc. Sempre verifique os dados S.M.A.R.T do disco
 

