이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

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.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. 중요 설정

복사한 구성을 편집하세요. 특히 다음 사항에 주의하십시오:

  • 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.confTempDirectories)에서 바이러스 백신/OS 검색을 제외하세요. FIREBIRD_TMPTempDirectories와 일치시키면 많은 ISQL 세션에서 속도 저하가 줄어듭니다.

최소한 다음 값을 늘리세요:

  • DefaultDbCachePages
  • LockHashSlots
  • LockMemSize
  • FileSystemCacheThreshold - 명시적으로 설정해야 하며 DefaultDbCachePages보다 커야 합니다 (테스트는 누락/주석 처리된 값을 거부합니다. 일부 POSIX 패키지 레이아웃 제외)

페이지 캐시에 RAM의 약 25%를 목표로 하세요. Classic / SuperClassic의 경우 DefaultDbCachePages2048 이상으로 설정하지 마십시오. 페이지 크기는 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를 복사한 다음, 각 비교 실행 전에 해당 복사본을 복원하여 모든 측정이 동일한 지점에서 시작되도록 하세요.

워크로드가 모델링하는 것

시나리오는 자동차 서비스 스타일의 비즈니스 문서를 따릅니다:

  1. 고객(또는 내부) 부품 주문
  2. 주문을 통합하여 공급업체에 전송
  3. 공급업체 인보이스(전체 또는 부분)
  4. 재고 입고; 고객 주문 부품 예약
  5. 판매 및 재고 감모
  6. 여러 단계에서 취소 가능
  7. 잔액에 영향을 주는 부분/전체 결제 및 취소
  8. 첫 번째 세션에서 성능, 예외, 통계 및 검증 보고서 생성