Firebird OLTP-EMULator 测试
OLTP-EMUL は、Firebird 2.5 以降で現実的な OLTP ワークロードをエミュレートする公式の Firebird テストです。多数の同時 ISQL セッションでのパフォーマンスおよびリグレッションチェックに使用します。テストを実行する前に、このガイドをよくお読みください。
リポジトリのクローン
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
クイックスタートは Pavel Zotov(モスクワ)の作業に基づいています。テスト自体に関する質問: [email protected]。IBSurgeon サポート: [email protected]。
1. 前提条件
ISQL セッションを実行するホストに Firebird クライアントをインストールし、以下のバイナリが利用可能であることを確認してください:
isql(一部の POSIX パッケージではisql-fb)fbsvcmgr
2. 設定ファイルの選択とコピー
src フォルダで、Firebird のメジャーバージョンと OS に一致するデフォルト設定を選択し、.default サフィックスを付けずにコピーします。
| Firebird | OS | 設定ファイル |
|---|---|---|
| 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. 重要な設定項目
コピーした設定を編集します。特に以下に注意してください:
- fbc - セッションを起動するマシン上の
isqlへのパス - clu - オプションの非標準 ISQL バイナリ名(例: POSIX パッケージの
isql-fb) - dbnm - サーバー上のデータベースの完全パスとファイル名(ASCII のみ。スクリプトで作成する場合はエイリアス不可)
- host、port、usr、pwd - 接続パラメータ
- tmpdir - ISQL ログと一時テストファイル用のディレクトリ
- init_docs - 測定ワークロードの前に作成するドキュメント数(最初は 3000〜5000 を試してください)
- warm_time / test_time - ウォームアップおよび測定フェーズ(分単位)
- sleep_min / sleep_max - トランザクション間の一時停止(
sleep_maxを 0 に設定すると一時停止を無効化) - sleep_ddl - 一時停止用のオプション UDF(シェルの
sleep/cscriptよりも推奨); バイナリはutil/udf64/配下 - wait_for_copy - ウォームアップ/測定前に DB のスナップショットを取れるよう init 後に一時停止(繰り返し実行に便利)
init 後、テストは warm_time 分間ウォームアップを実行し、その後 test_time 分間測定します。
4. Windows と firebird.conf のヒント
ウイルス対策 / OS スキャンを tmpdir と Firebird の一時フォルダ(FIREBIRD_TMP / TMP / TEMP、および firebird.conf の TempDirectories)から除外してください。FIREBIRD_TMP を TempDirectories に合わせると、多数の ISQL セッションでの速度低下が軽減されます。
少なくとも以下を増やしてください:
DefaultDbCachePagesLockHashSlotsLockMemSizeFileSystemCacheThreshold- 明示的に設定し、DefaultDbCachePagesより大きくする必要があります(テストは欠落/コメントアウトされた値を拒否します。一部の POSIX パッケージレイアウトを除く)
ページキャッシュには RAM の約 25% を目安にしてください。Classic / SuperClassic では DefaultDbCachePages を 2048 より大きく設定しないでください。ページサイズは 8192 にハードコードされています。
中程度の負荷の例(約 100 セッション):
| パラメータ | 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 |
既製の設定については、Configuration Calculator と リファレンス設定 を参照してください。
5. テストの実行
シェルを開き、src に移動して実行します:
1run_oltp_emul <FbMajor> <NumSessions> [nostop]
- FbMajor - Firebird 2.5 / 3.0 / 4.0 に対応する
25、30、または40 - NumSessions - 起動する ISQL セッション数
- nostop - オプション。対話式の一時停止をスキップ(スケジューラからの実行に便利)
データベースファイルが存在せず、dbnm が完全パス(エイリアスではない)の場合、スクリプトで作成できます。不完全または空の以前の DB は必要に応じて再作成されます。
6. レポートと停止
ウォームアップ + 測定時間の後、セッションは自動的に停止します。最初の ISQL セッションが最終レポートを tmpdir 配下に書き込みます。Windows で make_html = 1 の場合、HTML レポートも生成されます(低速)。
レポートの命名は file_name_with_test_params に依存します:
- コメントアウト(デフォルト)- 例:
oltp**.report.txt regular- フォルダ一覧で多数の実行を閲覧するのに適したタイムスタンプ付きの名前benchmark- 設定やDDLのバリエーションを比較するのに適した名前
レポートには、アーキテクチャと設定、全体および間隔ごとのパフォーマンス(CNT_OK_PER_MINUTE / AVG_TIMES_PER_MINUTE)、オプションの監視詳細、例外、DB統計、バージョン/レコード比率、変更されたテーブルの検証、および firebird.log の前後差分が含まれます。
次のようにクエリを実行することもできます:
select * from srv_mon_perf_dynamic; select * from srv_mon_perf_total;
早期停止
各起動時に tmpdir に作成される 1stoptest.tmp(.bat / .sh)を使用します。マルチホスト起動の場合は、代わりに firebird.conf で ExternalFileAccess を有効にし、OLTP設定で use_external_to_stop を設定し、その停止ファイルに文字を書き込むことができます(新しい実行の前にクリアしてください)。
再現可能なベースライン
wait_for_copy = 1 を設定し、初期化を完了させ、DBをコピーしてから、各比較実行の前にそのコピーを復元して、すべての測定が同じポイントから開始されるようにします。
ワークロードがモデル化するもの
このシナリオは、カーサービス形式のビジネス文書に従います:
- 顧客(または内部)の部品注文
- 注文をまとめてサプライヤーに送信
- サプライヤー請求書(全額または一部)
- 在庫受け入れ;顧客注文部品の予約
- 販売と在庫の償却
- 複数のステップでキャンセルが可能
- 残高に影響する一部/全額支払いとキャンセル
- 最初のセッションがパフォーマンス、例外、統計、検証レポートを生成