Firebird OLTP-EMULator test
OLTP-EMUL è il test ufficiale Firebird che emula un carico di lavoro OLTP realistico su Firebird 2.5 e versioni successive. Usalo per controlli di prestazioni e regressioni sotto molte sessioni ISQL concorrenti. Leggi attentamente questa guida prima di eseguire il test.
Clona il repository
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
Avvio rapido basato sul lavoro di Pavel Zotov (Mosca). Domande sul test stesso: [email protected]. Supporto IBSurgeon: [email protected].
1. Prerequisiti
Sull'host che eseguirà le sessioni ISQL, installa un client Firebird e assicurati che questi eseguibili siano disponibili:
isql(su alcuni pacchetti POSIX:isql-fb)fbsvcmgr
2. Scegli e copia un file di configurazione
Nella cartella src, scegli la configurazione predefinita che corrisponde alla tua versione principale di Firebird e al tuo sistema operativo, quindi copiala senza il suffisso .default.
| Firebird | SO | File di configurazione |
|---|---|---|
| 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. Impostazioni importanti
Modifica la configurazione copiata. Presta particolare attenzione a:
- fbc - percorso di
isqlsulla macchina che avvia le sessioni - clu - nome binario ISQL non standard opzionale (es.
isql-fbsui pacchetti POSIX) - dbnm - percorso completo e nome file del database sul server (solo ASCII; non un alias se vuoi che lo script lo crei)
- host, port, usr, pwd - parametri di connessione
- tmpdir - directory per i log ISQL e i file di test temporanei
- init_docs - documenti da creare prima del carico di lavoro misurato (prova prima 3000-5000)
- warm_time / test_time - fasi di riscaldamento e misurazione, in minuti
- sleep_min / sleep_max - pausa tra le transazioni (imposta
sleep_maxa 0 per disabilitare le pause) - sleep_ddl - UDF opzionale per le pause (preferito rispetto a
sleep/cscriptdella shell); binari inutil/udf64/ - wait_for_copy - pausa dopo l'init per poter fare uno snapshot del DB prima di riscaldamento/misurazione (utile per esecuzioni ripetute)
Dopo l'init, il test esegue il riscaldamento per warm_time minuti, quindi misura per test_time minuti.
4. Suggerimenti per Windows e firebird.conf
Escludi la scansione antivirus / di sistema da tmpdir e dalle cartelle temporanee di Firebird (FIREBIRD_TMP / TMP / TEMP e TempDirectories in firebird.conf). Allineare FIREBIRD_TMP con TempDirectories riduce i rallentamenti sotto molte sessioni ISQL.
Aumenta almeno:
DefaultDbCachePagesLockHashSlotsLockMemSizeFileSystemCacheThreshold- deve essere impostato esplicitamente e maggiore diDefaultDbCachePages(il test rifiuta un valore mancante/commentato, tranne alcune disposizioni di pacchetti POSIX)
Punta a circa il 25% della RAM per la cache delle pagine. Non impostare DefaultDbCachePages sopra 2048 per Classic / SuperClassic. La dimensione della pagina è hardcoded a 8192.
Esempio di carico medio (~100 sessioni):
| Parametro | 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 |
Per configurazioni già pronte, consulta il Calcolatore di configurazione e le configurazioni di riferimento.
5. Esegui il test
Apri una shell, vai in src ed esegui:
1run_oltp_emul <FbMajor> <NumSessions> [nostop]
- FbMajor -
25,30o40per Firebird 2.5 / 3.0 / 4.0 - NumSessions - numero di sessioni ISQL da avviare
- nostop - opzionale; salta le pause interattive (utile da un pianificatore)
Se il file del database non esiste e dbnm è un percorso completo (non un alias), lo script può crearlo. I database precedenti incompleti o vuoti vengono ricreati secondo necessità.
6. Report e arresto
Dopo il tempo di riscaldamento + misurazione, le sessioni si fermano automaticamente. La prima sessione ISQL scrive il report finale in tmpdir. Con make_html = 1 su Windows, viene prodotto anche un report HTML (più lento).
La denominazione del report dipende da file_name_with_test_params:
- Commentato (predefinito) - es.
oltp**.report.txt regular- nomi con timestamp adatti alla navigazione di molte esecuzioni in un elenco di cartellebenchmark- nomi adatti al confronto di impostazioni/varianti DDL
I report includono architettura e impostazioni, prestazioni complessive e per intervallo (CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE), dettagli di monitoraggio opzionali, eccezioni, statistiche del database, rapporti versione/record, validazione per le tabelle modificate e un diff prima/dopo di firebird.log.
Puoi anche interrogare:
select * from srv_mon_perf_dynamic; select * from srv_mon_perf_total;
Fermare prima
Usa 1stoptest.tmp (.bat / .sh) creato in tmpdir a ogni avvio. Per avvii multi-host, puoi invece abilitare ExternalFileAccess in firebird.conf, impostare use_external_to_stop nella configurazione OLTP e scrivere un carattere in quel file di stop (cancellalo prima di ogni nuova esecuzione).
Baseline ripetibili
Imposta wait_for_copy = 1, lascia finire l'init, copia il DB, quindi ripristina quella copia prima di ogni esecuzione comparativa in modo che ogni misurazione parta dallo stesso punto.
Cosa modella il carico di lavoro
Lo scenario segue documenti aziendali in stile officina automobilistica:
- Ordini del cliente (o interni) per parti
- Ordini combinati e inviati a un fornitore
- Fattura del fornitore (totale o parziale)
- Ricevimento merce; parti ordinate dal cliente riservate
- Vendite e scarichi di magazzino
- Cancellazioni possibili in più fasi
- Pagamenti parziali/totali e cancellazioni che influiscono sui saldi
- La prima sessione produce report su prestazioni, eccezioni, statistiche e validazione