이것은 Ubuntu Online, Fedora Online, Windows 온라인 에뮬레이터 또는 MAC OS 온라인 에뮬레이터와 같은 여러 무료 온라인 워크스테이션 중 하나를 사용하여 OnWorks 무료 호스팅 제공업체에서 실행할 수 있는 pgbench 명령입니다.
프로그램:
이름
pgbench - PostgreSQL에서 벤치마크 테스트 실행
개요
피그벤치 -i [option...] [데이터베이스 이름]
피그벤치 [option...] [데이터베이스 이름]
기술
pgbench는 PostgreSQL에서 벤치마크 테스트를 실행하기 위한 간단한 프로그램입니다. 그것은 동일하게 실행
여러 동시 데이터베이스 세션에서 반복적으로 SQL 명령 시퀀스,
그런 다음 평균 트랜잭션 속도(초당 트랜잭션)를 계산합니다. 기본적으로,
pgbench는 TPC-B에 느슨하게 기반한 시나리오를 테스트합니다. SELECT, UPDATE,
그리고 INSERT 트랜잭션당 명령. 그러나 다음을 작성하여 다른 경우를 테스트하기 쉽습니다.
자신의 트랜잭션 스크립트 파일.
pgbench의 일반적인 출력은 다음과 같습니다.
거래 유형: TPC-B(일종의)
배율: 10
쿼리 모드: 단순
클라이언트 수: 10
스레드 수: 1
클라이언트당 트랜잭션 수: 1000
실제 처리된 트랜잭션 수: 10000/10000
tps = 85.184871(연결 설정 포함)
tps = 85.296346(연결 설정 제외)
처음 여섯 줄은 가장 중요한 매개변수 설정 중 일부를 보고합니다. 다음 줄
완료되고 의도된 거래의 수를 보고합니다(후자는 단지
클라이언트 수와 클라이언트당 트랜잭션 수의 곱); 이것들은 평등할 것이다
실행이 완료되기 전에 실패하지 않는 한. (에 -T 모드, 실제 수만
트랜잭션이 인쇄됩니다.) 마지막 두 줄은 초당 트랜잭션 수를 보고하고,
데이터베이스 세션을 시작하는 시간을 계산하거나 계산하지 않고 계산됩니다.
기본 TPC-B와 같은 트랜잭션 테스트에서는 특정 테이블을 미리 설정해야 합니다.
pgbench는 다음과 함께 호출되어야 합니다. -i (초기화) 옵션을 생성하고 채우려면
테이블. (사용자 정의 스크립트를 테스트할 때는 이 단계가 필요하지 않지만 대신
테스트에 필요한 모든 설정을 수행해야 합니다.) 초기화는 다음과 같습니다.
pgbench -i [ 다른 옵션 ] 데이터베이스 이름
어디에 데이터베이스 이름 테스트할 이미 생성된 데이터베이스의 이름입니다.
-h, -p, 및 / 또는 -U 데이터베이스 서버에 연결하는 방법을 지정하는 옵션)
주의
pgbench -i는 XNUMX개의 테이블 pgbench_accounts, pgbench_branches, pgbench_history,
및 pgbench_tellers, 이러한 이름의 기존 테이블을 파괴합니다. 매우 조심하십시오
이러한 이름을 가진 테이블이 있는 경우 다른 데이터베이스를 사용하십시오!
기본 "축척 비율" 1에서 테이블에는 처음에 다음과 같은 많은 행이 포함됩니다.
테이블 행 수
---------------------------------
pgbench_branches 1
pgbench_텔러 10
pgbench_accounts 100000
pgbench_history 0
다음을 사용하여 행 수를 늘릴 수 있습니다(대부분의 경우 아마도 그래야 함).
-s (스케일 팩터) 옵션. NS -F (fillfactor) 옵션도 이 시점에서 사용될 수 있습니다.
필요한 설정을 완료했으면 다음 명령을 사용하여 벤치마크를 실행할 수 있습니다.
포함하지 않습니다 -i, 그건
pg벤치 [ 옵션 ] 데이터베이스 이름
거의 모든 경우에 유용한 테스트를 수행하려면 몇 가지 옵션이 필요합니다. 가장 중요한
옵션은 -c (클라이언트 수), -t (거래 수), -T (시간 제한) 및 -f
(사용자 정의 스크립트 파일 지정). 전체 목록은 아래를 참조하세요.
옵션
다음은 세 개의 하위 섹션으로 나뉩니다.
데이터베이스 초기화 및 벤치마크를 실행하는 동안 일부 옵션은 두 가지 모두에 유용합니다.
경우.
초기화 옵션
pgbench는 다음 명령줄 초기화 인수를 허용합니다.
-i
--초기화
초기화 모드를 호출하는 데 필요합니다.
-F 필팩터
--필팩터=필팩터
다음을 사용하여 pgbench_accounts, pgbench_tellers 및 pgbench_branches 테이블을 생성합니다.
주어진 필팩터. 기본값은 100입니다.
-n
--진공 없음
초기화 후 진공 청소를 수행하지 마십시오.
-q
--조용한
로깅을 자동 모드로 전환하여 5초당 하나의 진행 메시지만 생성합니다. NS
기본 로깅은 100000행마다 하나의 메시지를 인쇄하며, 종종 많은 행을 출력합니다.
초당 (특히 좋은 하드웨어에서).
-s scale_factor
--규모=scale_factor
배율 인수로 생성된 행 수를 곱합니다. 예를 들어 -s 100은
pgbench_accounts 테이블에 10,000,000개의 행을 생성합니다. 기본값은 1입니다.
20,000 이상인 경우 계정 식별자를 보유하는 데 사용되는 열(보조 열)은
범위를 유지할 만큼 충분히 크게 하려면 더 큰 정수(bigint)를 사용하도록 전환합니다.
계정 식별자의.
--외래 키
표준 테이블 간에 외래 키 제약 조건을 만듭니다.
--인덱스 테이블스페이스=index_tablespace
기본 테이블스페이스가 아닌 지정된 테이블스페이스에 인덱스를 생성합니다.
--테이블스페이스=테이블스페이스
기본 테이블스페이스가 아닌 지정된 테이블스페이스에 테이블을 생성합니다.
--기록되지 않은 테이블
모든 테이블을 영구 테이블이 아닌 기록되지 않은 테이블로 만듭니다.
Benchmarking 옵션
pgbench는 다음 명령줄 벤치마킹 인수를 허용합니다.
-c 클라이언트
--클라이언트=클라이언트
시뮬레이션된 클라이언트 수, 즉 동시 데이터베이스 세션 수입니다. 기본
1입니다.
-C
--연결하다
트랜잭션당 한 번만 수행하는 대신 각 트랜잭션에 대해 새 연결을 설정합니다.
클라이언트 세션. 이것은 연결 오버헤드를 측정하는 데 유용합니다.
-d
-디버그
디버깅 출력을 인쇄합니다.
-D 이름=가치
--정의=이름=가치
사용자 정의 스크립트에서 사용할 변수를 정의합니다(아래 참조). 다수의 -D 옵션은
수있었습니다.
-f 파일 이름
--파일=파일 이름
다음에서 트랜잭션 스크립트 읽기 파일 이름. 자세한 내용은 아래를 참조하세요. -N, -S및 -f are
상호 배타적.
-j 스레드
--작업=스레드
pgbench 내의 작업자 스레드 수입니다. 둘 이상의 스레드를 사용하면 다음 작업에 도움이 될 수 있습니다.
다중 CPU 기계. 클라이언트 수는 스레드 수의 배수여야 합니다.
각 스레드에는 관리할 동일한 수의 클라이언트 세션이 제공되기 때문입니다. 기본값은 1입니다.
-l
--통나무
각 트랜잭션에 소요된 시간을 로그 파일에 기록합니다. 자세한 내용은 아래를 참조하세요.
-L 제한
--지연 제한=제한
이상 지속되는 거래 제한 밀리초가 계산되고 보고됩니다.
따로, 늦게.
조절을 사용하는 경우(--율=...), 일정보다 지연된 트랜잭션
보다 제한 ms이므로 대기 시간 제한을 충족할 희망이 없으므로
전혀 서버. 건너뛴 것으로 별도로 계산 및 보고됩니다.
-M 쿼리 모드
--프로토콜=쿼리 모드
서버에 쿼리를 제출하는 데 사용할 프로토콜:
· 단순: 단순 쿼리 프로토콜을 사용합니다.
· 확장: 확장 쿼리 프로토콜을 사용합니다.
· 준비됨: 준비된 명령문과 함께 확장 쿼리 프로토콜을 사용합니다.
기본값은 단순 쿼리 프로토콜입니다. (50장, 프론트엔드/백엔드 프로토콜 참조,
자세한 내용은 설명서를 참조하십시오.)
-n
--진공 없음
테스트를 실행하기 전에 진공 청소를 수행하지 마십시오. 이 옵션은 필요한 당신이있는 경우
표준 테이블을 포함하지 않는 사용자 정의 테스트 시나리오 실행
pgbench_accounts, pgbench_branches, pgbench_history 및 pgbench_tellers.
-N
--일부 업데이트 건너뛰기
pgbench_tellers 및 pgbench_branches를 업데이트하지 마십시오. 이렇게 하면 업데이트 경합을 피할 수 있습니다.
이 테이블에서는 테스트 케이스를 TPC-B와 덜 유사하게 만듭니다.
-P 초
--진행=초
초마다 진행 보고서를 표시합니다. 보고서에는 이후 시간이 포함됩니다.
실행 시작, 마지막 보고서 이후의 tps 및 트랜잭션 대기 시간
마지막 보고서 이후의 평균 및 표준 편차. 조절 중(-R)
대기 시간은 트랜잭션이 예약된 시작 시간을 기준으로 계산되며,
실제 거래 시작 시간이므로 평균 일정 지연도 포함됩니다.
시간.
-r
--보고 대기 시간
명령문당 평균 지연 시간(관점에서 실행 시간)을 보고합니다.
클라이언트) 벤치마크가 완료된 후 각 명령의 자세한 내용은 아래를 참조하세요.
-R 율
--율=율
빠른 속도로 실행하는 대신 지정된 비율을 대상으로 트랜잭션을 실행합니다.
가능합니다(기본값). 속도는 초당 트랜잭션으로 제공됩니다. 대상이 된 경우
속도가 가능한 최대 속도보다 높으면 속도 제한이 결과에 영향을 미치지 않습니다.
요율은 포아송 분포 일정에 따라 거래를 시작하는 것을 목표로 합니다.
타임 라인. 예상 시작 시간 일정은 클라이언트가 언제
이전 트랜잭션이 종료될 때가 아니라 처음 시작되었습니다. 그 접근 방식은 다음을 의미합니다.
트랜잭션이 원래 예정된 종료 시간을 초과하면 나중에 트랜잭션이 가능합니다.
다시 따라잡기 위해.
조절이 활성화되면 실행 종료 시 보고되는 트랜잭션 대기 시간은 다음과 같습니다.
예정된 시작 시간에서 계산되므로 각 트랜잭션의 시간이 포함됩니다.
이전 트랜잭션이 완료될 때까지 기다려야 했습니다. 대기시간이라고 합니다
일정 지연 시간, 평균 및 최대값도 별도로 보고됩니다. NS
실제 트랜잭션 시작 시간에 대한 트랜잭션 대기 시간, 즉 시간
데이터베이스에서 트랜잭션을 실행하는 데 소요된 시간은 다음을 빼서 계산할 수 있습니다.
보고된 대기 시간에서 지연 시간을 예약합니다.
If --지연 제한 함께 사용됩니다 --비율, 거래가 너무 많이 지연될 수 있습니다.
이전 트랜잭션이 종료될 때 이미 대기 시간 제한을 초과했기 때문에
대기 시간은 예약된 시작 시간에서 계산됩니다. 그러한 거래는
서버로 전송되지만 모두 건너뛰고 별도로 계산됩니다.
높은 일정 지연 시간은 시스템이 트랜잭션을 처리할 수 없음을 나타냅니다.
선택한 클라이언트 및 스레드 수와 함께 지정된 속도로 평균
트랜잭션 실행 시간이 각 트랜잭션 간의 예정된 간격보다 깁니다.
트랜잭션, 각 연속 트랜잭션은 더 늦어지고 일정
지연 시간은 테스트 실행이 길어질수록 계속 증가합니다. 그럴 때 당신은
지정된 거래율을 줄여야 합니다.
-s scale_factor
--규모=scale_factor
pgbench의 출력에서 지정된 축척 인수를 보고합니다. 내장된 테스트를 통해 이
필요가 없습니다; 올바른 스케일 팩터는 개수를 세어 감지됩니다.
pgbench_branches 테이블의 행. 그러나 사용자 지정 벤치마크를 테스트할 때(-f
옵션), 이 옵션을 사용하지 않는 한 배율 인수는 1로 보고됩니다.
-S
--선택 전용
TPC-B와 유사한 테스트 대신 선택 전용 트랜잭션을 수행합니다.
-t 업무
--트랜잭션=업무
각 클라이언트가 실행하는 트랜잭션 수입니다. 기본값은 10입니다.
-T 초
--시간=초
당 고정된 수의 트랜잭션이 아니라 몇 초 동안 테스트를 실행합니다.
고객. -t 그리고 -T 상호 배타적입니다.
-v
--진공 전체
테스트를 실행하기 전에 XNUMX개의 표준 테이블을 모두 진공 청소기로 청소하십시오. 둘 다 -n ...도 아니다 -v,
pgbench는 pgbench_tellers 및 pgbench_branches 테이블을 청소하고 자릅니다.
pgbench_history.
--집계 간격=초
집계 간격의 길이(초). -l -와 함께만 사용할 수 있습니다.
이 옵션을 사용하면 로그에 간격별 요약(트랜잭션 수, 최소/최대
지연 및 분산 추정에 유용한 두 개의 추가 필드).
이 옵션은 현재 Windows에서 지원되지 않습니다.
--샘플링 속도=율
로그에 데이터를 쓸 때 사용하는 샘플링 비율로 로그의 양을 줄입니다.
생성. 이 옵션이 주어지면 트랜잭션의 지정된 부분만
기록. 1.0은 모든 거래가 기록됨을 의미하고, 0.05는 전체 거래의 5%만 기록됨을 의미합니다.
거래가 기록됩니다.
로그 파일을 처리할 때 샘플링 속도를 고려해야 합니다. 을위한
예를 들어, tps 값을 계산할 때 그에 따라 숫자를 곱해야 합니다(예:
0.01 샘플 레이트를 사용하면 실제 tps의 1/100만 얻을 수 있습니다.
공통의 옵션
pgbench는 다음 명령줄 공통 인수를 허용합니다.
-h 호스트 이름
--호스트=호스트 이름
데이터베이스 서버의 호스트 이름
-p 포트
--포트=포트
데이터베이스 서버의 포트 번호
-U 로그인
--사용자 이름=로그인
연결할 사용자 이름
-V
--번역
pgbench 버전을 인쇄하고 종료합니다.
-?
--도움
pgbench 명령줄 인수에 대한 도움말을 표시하고 종료합니다.
노트
뭐 is 전에, "거래" 사실은 수행 in 피그벤치?
기본 트랜잭션 스크립트는 트랜잭션당 XNUMX개의 명령을 실행합니다.
1. 시작하다
2. 업데이트 pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
3. pgbench_accounts WHERE에서 잔액을 선택하십시오.
4. 업데이트 pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
5. 업데이트 pgbench_branches SET bbbalance = bbalance + :delta WHERE bid = :bid;
6. INSERT INTO pgbench_history(tid, bid, aid, delta, mtime) VALUES(:tid, :bid, :aid,
:델타, CURRENT_TIMESTAMP);
7. 끝;
지정한 경우 -N, 4단계와 5단계는 거래에 포함되지 않습니다. 지정하는 경우 -S,
만 SELECT 발행됩니다.
관습 스크립트
pgbench는 기본값을 대체하여 사용자 지정 벤치마크 시나리오 실행을 지원합니다.
파일(-f
옵션). 이 경우 "트랜잭션"은 스크립트 파일의 XNUMX회 실행으로 계산됩니다. 당신은 할 수 있습니다
여러 스크립트를 지정할 수도 있습니다(여러 -f 옵션), 이 경우 임의의
스크립트는 클라이언트 세션이 새 트랜잭션을 시작할 때마다 선택됩니다.
스크립트 파일의 형식은 한 줄에 하나의 SQL 명령입니다. 여러 줄 SQL 명령은
지원. 빈 줄과 --로 시작하는 줄은 무시됩니다. 스크립트 파일 행은 다음을 수행할 수도 있습니다.
아래에 설명된 대로 pgbench 자체에서 해석되는 "메타 명령"입니다.
스크립트 파일에 대한 간단한 변수 대체 기능이 있습니다. 변수는 다음과 같이 설정할 수 있습니다.
명령줄 -D 옵션, 위에서 설명한 또는 아래에 설명된 메타 명령에 의해. 에
에 의해 사전 설정된 모든 변수에 추가 -D 명령줄 옵션에는 몇 가지 변수가 있습니다.
자동으로 사전 설정되며 표 221, "자동 변수"에 나열되어 있습니다. 가치
다음을 사용하여 이러한 변수에 대해 지정 -D 자동 사전 설정보다 우선합니다. 한 번
설정하면 다음과 같이 작성하여 변수 값을 SQL 명령에 삽입할 수 있습니다.변수명. 언제
둘 이상의 클라이언트 세션을 실행하는 경우 각 세션에는 고유한 변수 집합이 있습니다.
작업대 221. Automatic 변수
┌──────────┬─────────────────────────────────┐
│변하기 쉬운 │ 기술설명 │
├──────────┼─────────────────────────────────┤
│스케일 │ 현재 스케일 팩터 │
├──────────┼─────────────────────────────────┤
│client_id │ │을 식별하는 고유 번호
│ │ 클라이언트 세션(│부터 시작)
│ │ 제로) │
└──────────┴─────────────────────────────────┘
스크립트 파일 메타 명령은 백슬래시(\)로 시작합니다. 메타 명령에 대한 인수는 다음과 같습니다.
공백으로 구분됩니다. 다음 메타 명령이 지원됩니다.
\세트 이름 표현
변수를 설정 이름 에서 계산된 정수 값으로 표현. 표현식
변수에 대한 참조, 5432와 같은 정수 상수를 포함할 수 있습니다.변수명및
단항(-) 또는 이항 연산자(+, -, *, /, %)로 구성된 표현식
연관성, 괄호.
예 :
\set ntellers 10 * :규모
\set 보조 (1021 * :aid) % (100000 * :scale) + 1
\set무작위 이름 분 최대 [제복 | { 가우스 | 지수 } 매개 변수 ]
변수를 설정 이름 한계 사이의 임의의 정수 값으로 분 그리고 최대
포함한. 각 제한은 정수 상수 또는 다음 중 하나일 수 있습니다.변수명 참고
정수 값을 갖는 변수로.
기본적으로 또는 uniform이 지정된 경우 범위의 모든 값은 동일한 값으로 그려집니다.
개연성. 가우스 또는 지수 옵션을 지정하면 이 동작이 수정됩니다. 각
분포의 정확한 모양을 결정하는 필수 매개변수가 필요합니다.
가우스 분포의 경우 간격은 표준 정규식에 매핑됩니다.
분포(고전적인 종 모양의 가우스 곡선)에서 -parameter에서 잘림
왼쪽과 +파라미터가 오른쪽에 있습니다. 간격 중간에 있는 값이 더 가능성 있음
그려집니다. 정확히 말하면 PHI(x)가 누적 분포 함수인 경우
평균 mu가 (최대 + 최소) / 2.0으로 정의된 표준 정규 분포,
f(x) = PHI(2.0 * 매개변수 * (x - mu) / (최대 - 최소 + 1)) /
(2.0 * PHI(매개변수) - 1.0)
다음 값 i 사이에 분 그리고 최대 포함은 확률로 그려집니다: f(i + 0.5) - f(i
- 0.5). 직관적으로 클수록 매개 변수, 더 자주 값에 가까움
간격의 중간이 그려지고 간격에 가까운 빈도가 낮은 값이 그려집니다. 분 그리고
최대 범위. 값의 약 67%는 중간 1.0 / 매개변수에서 가져옵니다.
상대 0.5 / 평균 주위의 매개 변수, 그리고 중간 95 / 매개 변수의 2.0%, 그
평균 주변의 상대적인 1.0 / 매개변수입니다. 예를 들어, 만약 매개 변수 4.0, 67%
의 값은 간격의 중간 분기(1.0 / 4.0)에서 가져옵니다(즉, 3.0에서
/ 8.0 ~ 5.0 / 8.0) 간격(초)의 중간(95 / 2.0)에서 4.0%
및 XNUMX사분위수). 최소 매개 변수 Box-Muller의 성능은 2.0입니다.
변환.
지수 분포의 경우, 매개 변수 절단하여 분포를 제어합니다.
에서 빠르게 감소하는 지수 분포 매개 변수에 투영한 다음
경계 사이의 정수. 정확히 말하면,
f(x) = exp(-매개변수 * (x - 최소) / (최대 - 최소 + 1)) / (1.0 - exp(-매개변수))
그런 다음 가치 i 사이에 분 그리고 최대 포함은 확률로 그려집니다: f(x) - f(x + 1).
직관적으로 더 큰 매개 변수, 더 자주 값이 에 가깝습니다. 분 are
액세스하고 덜 자주 값을 최대 액세스됩니다. 0에 가까울수록
매개 변수, 더 평평한(더 균일한) 액세스 분포. 조잡한 근사치
분포의 가장 빈번한 1% 값은 범위에 가깝습니다. 분,
그려지다 매개 변수% 그 시간의. 매개 변수 값은 반드시 양수여야 합니다.
예:
\setrandom aid 1 :naccounts 가우스 5.0
\잠 번호 [ 우리 | ms | NS ]
마이크로초(us) 단위로 지정된 기간 동안 스크립트 실행을 잠자기 상태로 만듭니다.
밀리초(ms) 또는 초(s). 단위를 생략하면 초가 기본값입니다.
번호 정수 상수 또는 다음 중 하나일 수 있습니다.변수명 변수에 대한 참조
정수 값을 가집니다.
예:
\수면 10ms
\setshell 이름 명령 [ 논의 ... ]
변수를 설정 이름 쉘 명령의 결과로 명령. 명령은
표준 출력을 통해 정수 값을 반환합니다.
논의 텍스트 상수 또는 :변수명 변수에 대한 참조
모든 유형. 사용하고 싶다면 논의 콜론으로 시작하여 다음을 추가해야 합니다.
시작 부분에 추가 콜론 논의.
예:
\setshell variable_to_be_assigned 명령 literal_argument :variable ::literal_starting_with_colon
\껍데기 명령 [ 논의 ... ]
\setshell과 같지만 결과는 무시됩니다.
예:
\shell 명령 literal_argument :변수 ::literal_starting_with_colon
예를 들어 내장된 TPC-B와 같은 트랜잭션의 전체 정의는 다음과 같습니다.
\set nbranches :스케일
\set ntellers 10 * :규모
\set naccounts 100000 * :규모
\setrandom aid 1 :n계정
\setrandom bid 1 :n분기
\setrandom tid 1 : ntellers
\set랜덤 델타 -5000 5000
시작하다;
업데이트 pgbench_accounts SET abalance = abalance + :delta WHERE 원조 = :aid;
SELECT 잔액 FROM pgbench_accounts WHERE 원조 = :aid;
업데이트 pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
업데이트 pgbench_branches SET bbbalance = bbalance + :delta WHERE bid = :bid;
INSERT INTO pgbench_history(tid, bid, aid, delta, mtime) 값(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
종료;
이 스크립트를 사용하면 트랜잭션의 각 반복이 서로 다른 참조를 수행할 수 있습니다.
무작위로 선택된 행. (이 예는 또한 각 클라이언트 세션에 중요한 이유를 보여줍니다.
자체 변수를 갖기 위해 — 그렇지 않으면 독립적으로 다른 변수를 만지지 않을 것입니다.
행)
거래당 로깅
와 더불어 -l 옵션이 없지만 --집계 간격, pgbench는 소요 시간을 씁니다.
각 트랜잭션을 로그 파일에 저장합니다. 로그 파일의 이름은 pgbench_log입니다.NNN어디로 NNN is
pgbench 프로세스의 PID입니다. 만약 -j 옵션은 2 이상, 여러 작업자 생성
스레드마다 고유한 로그 파일이 있습니다. 첫 번째 작업자는 동일한 이름을 사용합니다.
표준 단일 작업자의 경우와 같이 로그 파일. 다른 사용자에 대한 추가 로그 파일
작업자의 이름은 pgbench_log로 지정됩니다.NNN.음어디로 음 각각에 대한 일련 번호입니다.
1부터 시작하는 작업자.
로그 형식은 다음과 같습니다.
CLIENT_ID transaction_no 시간 파일 번호 시간_에포크 시간_우리 [일정_지연]
어디에 시간 마이크로초 단위의 총 경과된 트랜잭션 시간, 파일 번호 식별
스크립트 파일이 사용되었습니다(여러 스크립트가 -f), 그리고
시간_에포크/시간_우리 Unix 에포크 형식의 타임스탬프와 마이크로초 단위의 오프셋입니다.
(소수 초로 ISO 8601 타임 스탬프를 만드는 데 적합)
거래 완료. 들 일정_지연 트랜잭션의 차이입니다
예약된 시작 시간 및 실제로 시작된 시간(마이크로초). 이건 그냥
때 존재 --비율 옵션이 사용됩니다. 마지막 필드 건너뛴_거래 보고
일정보다 너무 늦어 건너뛴 트랜잭션 수입니다. 이건 그냥
두 옵션이 모두 있을 때 표시 --비율 그리고 --지연 제한 사용됩니다.
다음은 생성된 로그 파일의 스니펫입니다.
0 199 2241 0 1175850568 995598
0 200 2465 0 1175850568 998079
0 201 2513 0 1175850569 608
0 202 2038 0 1175850569 2663
--rate=100 및 --latency-limit=5를 사용하는 또 다른 예(추가 일정_지연
열):
0 81 4621 0 1412881037 912698 3005
0 82 6173 0 1412881037 914578 4304
0 83 건너뜀 0 1412881037 914578 5217
0 83 건너뜀 0 1412881037 914578 5099
0 83 4722 0 1412881037 916203 3108
0 84 4142 0 1412881037 918023 2333
0 85 2465 0 1412881037 919759 740
이 예에서 트랜잭션 82는 지연 시간(6.173ms)이 5를 초과했기 때문에 지연되었습니다.
ms 제한. 다음 두 트랜잭션은 이전에 이미 늦었기 때문에 건너뛰었습니다.
그들은 심지어 시작되었습니다.
많은 트랜잭션을 처리할 수 있는 하드웨어에서 긴 테스트를 실행할 때 로그 파일은
매우 커질 수 있습니다. NS --샘플링 속도 옵션은 임의의 샘플만 기록하는 데 사용할 수 있습니다.
거래의.
집계 로깅
와 더불어 --집계 간격 옵션에서 로그는 약간 다른 형식을 사용합니다.
간격_시작 num_of_transactions Latency_sum Latency_2_sum min_latency 최대 대기 시간 [지연 합계 lag_2_sum min_lag 최대 지연 [건너뛴_거래]]
어디에 간격_시작 간격의 시작입니다(Unix epoch 형식 타임스탬프).
num_of_transactions 간격 내 트랜잭션 수, Latency_sum 하는
대기 시간 합계(평균 대기 시간을 쉽게 계산할 수 있음). 다음 두 필드는
분산 추정에 유용 - Latency_sum 대기 시간의 합계이며 Latency_2_sum 하는
대기 시간의 2승의 합. 마지막 두 필드는 min_latency - 최소 대기 시간
간격 내에서, 그리고 최대 대기 시간 - 간격 내 최대 대기 시간. 거래
커밋된 간격으로 계산됩니다. 필드는 결국, 지연 합계,
lag_2_sum, min_lag및 최대 지연, 다음 경우에만 존재합니다. --비율 옵션이 사용됩니다. 아주
마지막 하나, 건너뛴_거래, 옵션이 있는 경우에만 존재합니다. --지연 제한 존재합니다.
도. 각 트랜잭션이 이전 트랜잭션을 기다려야 했던 시간부터 계산됩니다.
끝내기 위해, 즉 각 거래의 예정된 시작 시간과
실제로 시작된 시간.
다음은 예제 출력입니다.
1345828501 5601 1542744 483552416 61 2573
1345828503 7884 1979812 565806736 60 1479
1345828505 7208 1979422 567277552 59 1391
1345828507 7685 1980268 569784714 60 1398
1345828509 7073 1979779 573489941 236 1411
일반(집계되지 않은) 로그 파일에는 사용자 정의 스크립트의 인덱스가 포함되어 있습니다.
파일과 달리 집계된 로그는 그렇지 않습니다. 따라서 스크립트별 데이터가 필요한 경우 다음을 수행해야 합니다.
스스로 데이터를 집계합니다.
명령문별 대기 시간
와 더불어 -r 옵션, pgbench는 각 명령문의 경과된 트랜잭션 시간을 수집합니다.
모든 클라이언트에 의해 실행됩니다. 그런 다음 해당 값의 평균을 보고합니다.
벤치마크가 완료된 후 각 명령문의 대기 시간.
기본 스크립트의 경우 출력은 다음과 유사합니다.
진공 시작...끝.
거래 유형: TPC-B(일종의)
배율: 1
쿼리 모드: 단순
클라이언트 수: 10
스레드 수: 1
클라이언트당 트랜잭션 수: 1000
실제 처리된 트랜잭션 수: 10000/10000
tps = 618.764555(연결 설정 포함)
tps = 622.977698(연결 설정 제외)
명령문 대기 시간(밀리초):
0.004386 \set nbranches 1 * :규모
0.001343 \set ntellers 10 * :규모
0.001212 \set naccounts 100000 * :규모
0.001310 \set무작위 지원 1 :naccounts
0.001073 \set무작위 입찰 1 :n분기
0.001005 \setrandom tid 1 : ntellers
0.001078 \set랜덤 델타 -5000 5000
0.326152 시작;
0.603376 업데이트 pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
0.454643 SELECT 균형 FROM pgbench_accounts WHERE 원조 = :aid;
5.528491 업데이트 pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
7.335435 업데이트 pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
0.371851 INSERT INTO pgbench_history(tid, bid, aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
1.212976 끝;
여러 스크립트 파일이 지정된 경우 평균은 각각에 대해 별도로 보고됩니다.
스크립트 파일.
명령문별 대기 시간에 필요한 추가 타이밍 정보를 수집합니다.
계산은 약간의 오버헤드를 추가합니다. 이렇게 하면 평균 실행 속도가 느려지고
계산된 TPS. 느려지는 정도는 플랫폼에 따라 크게 다릅니다.
하드웨어. 지연 보고를 활성화한 경우와 활성화하지 않은 경우의 평균 TPS 값을 비교하는 것은
타이밍 오버헤드가 중요한지 측정하는 좋은 방법입니다.
좋은 사례
pgbench를 사용하여 완전히 의미 없는 숫자를 생성하는 것은 매우 쉽습니다. 여기 몇 가지가 있습니다
유용한 결과를 얻는 데 도움이 되는 지침입니다.
우선, 못 몇 초 동안만 실행되는 모든 테스트를 믿으십시오. 사용 -t or
-T 소음을 평균화하기 위해 실행이 최소 몇 분 동안 지속되도록 하는 옵션. 일부에서는
재현 가능한 숫자를 얻으려면 몇 시간이 필요할 수 있습니다. 시도하는 것이 좋습니다.
테스트를 몇 번 실행하여 숫자가 재현 가능한지 여부를 확인합니다.
기본 TPC-B와 같은 테스트 시나리오의 경우 초기화 배율(-s) 해야한다
최소한 테스트하려는 최대 클라이언트 수만큼(-c); 그렇지 않으면 당신은
대부분 업데이트 경합을 측정합니다. 거기 엔 오직 -s pgbench_branches의 행
테이블 및 모든 트랜잭션은 그 중 하나를 업데이트하기를 원하므로 -c 를 초과하는 값 -s
의심할 여지 없이 많은 트랜잭션이 다른 트랜잭션을 기다리면서 차단됩니다.
기본 테스트 시나리오는 또한 테이블 이후 경과된 시간에 매우 민감합니다.
초기화됨: 테이블에 데드 로우 및 데드 스페이스가 누적되면
결과. 결과를 이해하려면 총 업데이트 수와
진공 청소기가 발생할 때. autovacuum이 활성화되면 예측할 수 없는 변화가 발생할 수 있습니다.
측정된 성능.
pgbench의 한계는 테스트를 시도할 때 자체적으로 병목 현상이 발생할 수 있다는 것입니다.
많은 수의 클라이언트 세션. 이것은 다른 환경에서 pgbench를 실행하여 완화할 수 있습니다.
낮은 네트워크 대기 시간이 필수적이기는 하지만 데이터베이스 서버에서 시스템을 제거합니다. 그것은 수도
여러 클라이언트 시스템에서 동시에 여러 pgbench 인스턴스를 실행하는 데 유용합니다.
동일한 데이터베이스 서버에 대해
onworks.net 서비스를 사용하여 온라인으로 pgbench 사용
