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

      1. 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!
      2. 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

      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ê usar o Firebird HQbird com a opção BlobTempSpace, haverá arquivos temporários de Blob armazenados.
      2. 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:

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:\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

    1. Sistema das archuivos não ideal para Firebird
    2. Ausência de Unidade de Backup de Bateria para RAID (ou bateria descarregada)
    3. 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)
    4. Limite de IOPS para VM (por exemplo, o Azure tem limites de IOPS muito baixos para máquinas virtuais de uso geral)
    5. Processo de backup ativo ou outro processamento (cópia, reorganização, etc.) de grandes dados no disco.
    6. O disco esta morrendo: blocos defeituosos, superaquecimento, etc. Sempre verifique os dados S.M.A.R.T do disco



  • Sem rótulos