Esta página foi traduzida por máquina. Leia o original em inglês. English

OLTP-EMUL é o teste oficial do Firebird que emula uma carga de trabalho OLTP realista no Firebird 2.5 e superior. Use-o para verificações de desempenho e regressão sob muitas sessões ISQL concorrentes. Leia este guia com atenção antes de executar o teste.

Clone o repositório

Windows

git clone --config core.autocrlf=true https://github.com/FirebirdSQL/oltp-emul

Linux / POSIX

git clone --config core.autocrlf=false https://github.com/FirebirdSQL/oltp-emul

Início rápido baseado no trabalho de Pavel Zotov (Moscou). Perguntas sobre o teste em si: [email protected]. Suporte IBSurgeon: [email protected].

1. Pré-requisitos

No host que executará as sessões ISQL, instale um cliente Firebird e garanta que estes binários estejam disponíveis:

  • isql (em alguns pacotes POSIX: isql-fb)
  • fbsvcmgr

2. Escolha e copie um arquivo de configuração

Na pasta src, escolha a configuração padrão que corresponde à sua versão principal do Firebird e ao seu SO, depois copie-a sem o sufixo .default.

Firebird SO Arquivo de configuração
2.5Windowsoltp25_config.win.default
2.5Linuxoltp25_config.nix.default
3.0Windowsoltp30_config.win.default
3.0Linuxoltp30_config.nix.default
4.0Windowsoltp40_config.win.default
4.0Linuxoltp40_config.nix.default
# Windows
copy .\oltp30_config.win.default .\oltp30_config.win

Linux

cp ./oltp30_config.nix.default ./oltp30_config.nix

3. Configurações importantes

Edite a configuração copiada. Preste atenção especial a:

  • fbc - caminho para isql na máquina que inicia as sessões
  • clu - nome opcional não padrão do binário ISQL (ex.: isql-fb em pacotes POSIX)
  • dbnm - caminho completo e nome do arquivo do banco de dados no servidor (somente ASCII; não é um alias se você quiser que o script o crie)
  • host, port, usr, pwd - parâmetros de conexão
  • tmpdir - diretório para logs do ISQL e arquivos temporários de teste
  • init_docs - documentos a criar antes da carga medida (tente 3000-5000 primeiro)
  • warm_time / test_time - fases de aquecimento e medição, em minutos
  • sleep_min / sleep_max - pausa entre transações (defina sleep_max como 0 para desabilitar pausas)
  • sleep_ddl - UDF opcional para pausas (preferível ao sleep / cscript do shell); binários em util/udf64/
  • wait_for_copy - pausa após a inicialização para que você possa tirar um snapshot do banco de dados antes do aquecimento/medição (útil para execuções repetidas)

Após a inicialização, o teste executa o aquecimento por warm_time minutos e depois mede por test_time minutos.

4. Dicas para Windows e firebird.conf

Exclua a verificação de antivírus / SO de tmpdir e das pastas temporárias do Firebird (FIREBIRD_TMP / TMP / TEMP e TempDirectories em firebird.conf). Alinhar FIREBIRD_TMP com TempDirectories reduz lentidões sob muitas sessões ISQL.

Aumente pelo menos:

  • DefaultDbCachePages
  • LockHashSlots
  • LockMemSize
  • FileSystemCacheThreshold - deve ser definido explicitamente e maior que DefaultDbCachePages (o teste rejeita um valor ausente/comentado, exceto em alguns layouts de pacotes POSIX)

Mire aproximadamente 25% da RAM para o cache de páginas. Não defina DefaultDbCachePages acima de 2048 para Classic / SuperClassic. O tamanho da página é fixado em 8192.

Exemplo de carga média (~100 sessões):

Parâmetro SuperServer 3.0+ [Super]Classic 3.0+ [Super]Classic 2.5
DefaultDbCachePages ~0,25 × RAM / 8192 1024 1024
LockHashSlots 8191 16001 16001
LockMemSize 4194304 16777216 16777216

Para configurações prontas, veja a Calculadora de Configuração e as configurações de referência.

5. Execute o teste

Abra um shell, mude para src e execute:

1run_oltp_emul <FbMajor> <NumSessions> [nostop]
  • FbMajor - 25, 30 ou 40 para Firebird 2.5 / 3.0 / 4.0
  • NumSessions - número de sessões ISQL a iniciar
  • nostop - opcional; pula pausas interativas (útil a partir de um agendador)

Se o arquivo do banco de dados não existir e dbnm for um caminho completo (não um alias), o script pode criá-lo. Bancos de dados anteriores incompletos ou vazios são recriados conforme necessário.

6. Relatórios e parada

Após o tempo de aquecimento + medição, as sessões param automaticamente. A primeira sessão ISQL grava o relatório final em tmpdir. Com make_html = 1 no Windows, um relatório HTML também é produzido (mais lento).

A nomeação do relatório depende de file_name_with_test_params:

  • Comentado (padrão) - ex.: oltp**.report.txt
  • regular - nomes com carimbo de data/hora adequados para navegar por muitas execuções em uma listagem de pasta
  • benchmark - nomes adequados para comparar configurações/variantes de DDL

Os relatórios incluem arquitetura e configurações, desempenho geral e por intervalo (CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE), detalhes opcionais de monitoramento, exceções, estatísticas do banco de dados, proporções de versão/registro, validação para tabelas modificadas e um diff de firebird.log antes/depois.

Você também pode consultar:

select * from srv_mon_perf_dynamic;
select * from srv_mon_perf_total;

Parar antecipadamente

Use 1stoptest.tmp (.bat / .sh) criado em tmpdir em cada execução. Para execuções em vários hosts, você pode em vez disso habilitar ExternalFileAccess em firebird.conf, definir use_external_to_stop na configuração do OLTP e gravar um caractere nesse arquivo de parada (limpe-o antes de cada nova execução).

Linhas de base repetíveis

Defina wait_for_copy = 1, deixe a inicialização terminar, copie o banco de dados e restaure essa cópia antes de cada execução comparativa para que cada medição comece do mesmo ponto.

O que a carga de trabalho modela

O cenário segue documentos de negócios no estilo de serviços automotivos:

  1. Pedidos de clientes (ou internos) de peças
  2. Pedidos combinados e enviados a um fornecedor
  3. Nota fiscal do fornecedor (total ou parcial)
  4. Recebimento de estoque; peças pedidas por clientes reservadas
  5. Vendas e baixas de estoque
  6. Cancelamentos possíveis em várias etapas
  7. Pagamentos parciais/totais e cancelamentos que afetam saldos
  8. A primeira sessão produz relatórios de desempenho, exceções, estatísticas e validação