Teste Firebird OLTP-EMULator
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.5 | Windows | oltp25_config.win.default |
| 2.5 | Linux | oltp25_config.nix.default |
| 3.0 | Windows | oltp30_config.win.default |
| 3.0 | Linux | oltp30_config.nix.default |
| 4.0 | Windows | oltp40_config.win.default |
| 4.0 | Linux | oltp40_config.nix.default |
# Windows copy .\oltp30_config.win.default .\oltp30_config.winLinux
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
isqlna máquina que inicia as sessões - clu - nome opcional não padrão do binário ISQL (ex.:
isql-fbem 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_maxcomo 0 para desabilitar pausas) - sleep_ddl - UDF opcional para pausas (preferível ao
sleep/cscriptdo shell); binários emutil/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:
DefaultDbCachePagesLockHashSlotsLockMemSizeFileSystemCacheThreshold- deve ser definido explicitamente e maior queDefaultDbCachePages(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,30ou40para 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 pastabenchmark- 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:
- Pedidos de clientes (ou internos) de peças
- Pedidos combinados e enviados a um fornecedor
- Nota fiscal do fornecedor (total ou parcial)
- Recebimento de estoque; peças pedidas por clientes reservadas
- Vendas e baixas de estoque
- Cancelamentos possíveis em várias etapas
- Pagamentos parciais/totais e cancelamentos que afetam saldos
- A primeira sessão produz relatórios de desempenho, exceções, estatísticas e validação