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 팁
tmpdir 및 Firebird 임시 폴더(FIREBIRD_TMP / TMP / TEMP, 그리고 firebird.conf의 TempDirectories)에서 바이러스 백신/OS 검색을 제외하세요. 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 |
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를 복사한 다음, 각 비교 실행 전에 해당 복사본을 복원하여 모든 측정이 동일한 지점에서 시작되도록 하세요.
워크로드가 모델링하는 것
시나리오는 자동차 서비스 스타일의 비즈니스 문서를 따릅니다:
- 고객(또는 내부) 부품 주문
- 주문을 통합하여 공급업체에 전송
- 공급업체 인보이스(전체 또는 부분)
- 재고 입고; 고객 주문 부품 예약
- 판매 및 재고 감모
- 여러 단계에서 취소 가능
- 잔액에 영향을 주는 부분/전체 결제 및 취소
- 첫 번째 세션에서 성능, 예외, 통계 및 검증 보고서 생성