이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.postgresql : 문서 : 17 : 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

pgbench

이름

pgbench -- 벤치마크 테스트 실행포스트그레SQL

시놉시스

pgbench -i [옵션...] [db이름]

pgbench [옵션...] [db이름]

설명

pgbench다음을 위한 간단한 프로그램입니다. 벤치마크 테스트 실행 중포스트그레SQL. 동일한 SQL 시퀀스를 실행합니다. 여러 개의 동시 데이터베이스에서 반복적으로 명령을 수행할 수 있습니다. 세션을 수행한 후 평균 거래율을 계산합니다. (초당 트랜잭션). 기본적으로,pgbench느슨하게 기반을 둔 시나리오를 테스트합니다. TPC-B에서 5개 관련선택, 업데이트삽입트랜잭션당 명령. 그러나 그것은 쉽다 자신만의 트랜잭션 스크립트를 작성하여 다른 사례를 테스트합니다. 파일.

pgbench의 일반적인 출력은 다음과 같습니다.

트랜잭션 유형: TPC-B (일종)
배율 인수: 10
쿼리 모드: 단순
클라이언트 수: 10
스레드 수: 1
클라이언트당 거래 수: 1000
실제로 처리된 트랜잭션 수: 10000/10000
tps = 85.184871(연결 설정 포함)
tps = 85.296346(연결 설정 제외)

처음 6줄은 가장 중요한 매개변수 중 일부를 보고합니다. 설정. 다음 줄은 거래 수를 보고합니다. 완성되고 의도된 것(후자는 숫자의 산물일 뿐임) 클라이언트 수 및 클라이언트당 거래 수) 이것들은 될 것이다 완료되기 전에 실행이 실패하지 않는 한 동일합니다. (에서)-T모드에서는 실제 트랜잭션 수만 인쇄됩니다.) 마지막 두 줄은 당 거래 수를 보고합니다. 둘째, 시작 시간을 세는 것과 계산하지 않고 계산하는 것 데이터베이스 세션.

기본 TPC-B와 유사한 트랜잭션 테스트에는 특정 테이블이 필요합니다 미리 설정해야 합니다.pgbench다음과 함께 호출되어야 합니다.-i(초기화) 이러한 테이블을 생성하고 채우는 옵션입니다. (테스트할 때 사용자 정의 스크립트를 사용하는 경우에는 이 단계가 필요하지 않지만 대신 다음 단계를 수행해야 합니다. 테스트에 필요한 모든 설정을 수행하십시오.) 초기화는 다음과 같습니다.

pgbench -i [ 기타 옵션 ] db이름

어디에서db이름이름은 테스트할 데이터베이스가 이미 생성되었습니다. (필요할 수도 있습니다.-h, -p및/또는-U데이터베이스에 연결하는 방법을 지정하는 옵션 서버.)

주의

pgbench -i테이블 4개 생성pgbench_accounts, pgbench_branches, pgbench_historypgbench_tellers, 기존 테이블 삭제 이 이름들 중. 다른 데이터베이스를 사용하는 경우 매우 주의하십시오. 이 이름을 가진 테이블!

기본값"축척 계수"중 1, 테이블에는 처음에 다음과 같은 행이 포함되어 있습니다.

테이블 행 수
---------------------------------
pgbench_branches 1
pgbench_tellers 10
pgbench_accounts 100000
pgbench_history 0

당신은 를 사용하여 행 수-s(규모 요인) 옵션.-F(채우기 요소) 옵션 이 시점에서도 사용될 수 있습니다.

필요한 설정을 완료하면 다음을 실행할 수 있습니다. 다음을 포함하지 않는 명령을 사용한 벤치마크-i즉,

pgbench [ 옵션 ] db이름

거의 모든 경우에 유용하게 사용하려면 몇 가지 옵션이 필요합니다. 테스트. 가장 중요한 옵션은 다음과 같습니다.-c(클라이언트 수),-t(개수 거래),-T(시간 제한) 및-f(사용자 정의 스크립트 파일 지정). 참조 전체 목록은 아래에서 확인하세요.

옵션

다음은 세 개의 하위 섹션으로 구분됩니다: 다름 옵션은 데이터베이스 초기화 및 실행 중에 사용됩니다. 벤치마크에서는 일부 옵션이 두 경우 모두 유용합니다.

초기화 옵션

pgbench다음을 수락합니다 명령줄 초기화 인수:

-i

초기화 모드를 호출하는 데 필요합니다.

-F 채우기 요소

만들기pgbench_accounts, pgbench_tellers그리고pgbench_branches주어진 테이블이 있는 테이블 채우기 요소. 기본값은 100입니다.

-n

초기화 후에는 진공 청소를 수행하지 마십시오.

-q

로깅을 자동 모드로 전환하여 한 번의 진행만 생성 5초마다 메시지를 보냅니다. 기본 로깅은 각각 하나의 메시지를 인쇄합니다. 100000행, 초당 많은 라인을 출력하는 경우가 많습니다(특히 좋은 하드웨어에서).

-s scale_factor

축척 계수에 의해 생성된 행 수를 곱합니다. 에 대한 예-s 10010,000,000을 생성합니다 의 행pgbench_accounts테이블. 기본값은 1입니다. 척도가 20,000 이상이면 사용되는 열은 계정 식별자를 보유하기 위해(도움열)은 더 큰 정수(를 사용하도록 전환됩니다.비긴트), 계정 식별자.

--외래 키

표준 테이블 스포츠 토토 사이트에 외래 키 제약 조건을 생성합니다.

--색인-테이블스페이스=index_tablespace

다음 테이블스페이스가 아닌 지정된 테이블스페이스에 인덱스를 생성하십시오. 기본 테이블스페이스입니다.

--테이블스페이스=테이블스페이스

테이블이 아닌 지정된 테이블스페이스에 테이블을 생성하십시오. 기본 테이블스페이스입니다.

--기록되지 않은 테이블

모든 테이블을 영구 테이블이 아닌 기록되지 않은 테이블로 생성 테이블.

벤치마킹 옵션

pgbench다음을 수락합니다 명령줄 벤치마킹 인수:

-c 클라이언트

시뮬레이션된 클라이언트 수, 즉 동시 클라이언트 수 데이터베이스 세션. 기본값은 1입니다.

-C

각 거래에 대해 새로운 연결을 설정하십시오. 클라이언트 세션당 한 번만 수행합니다. 이는 측정하는 데 유용합니다. 연결 오버헤드.

-d

디버깅 출력을 인쇄합니다.

-D varname=

사용자 정의 스크립트에서 사용할 변수를 정의하십시오(아래 참조). 다중-D옵션이 허용됩니다.

-f 파일 이름

다음에서 트랜잭션 스크립트 읽기파일 이름. 자세한 내용은 아래를 참조하세요.-N, -S-f상호 배타적스포츠 토토 사이트.

-j 스레드

내부 작업자 스레드 수pgbench. 하나 이상의 스레드를 사용하면 다중 CPU 시스템에 유용합니다. 클라이언트 수는 다음과 같아야 합니다. 스레드 수의 배수입니다. 각 스레드에는 관리할 클라이언트 세션 수가 동일합니다. 기본값은 1입니다.

-l

각 트랜잭션에 소요된 시간을 로그 파일에 기록합니다. 참조 자세한 내용은 아래를 참조하세요.

-M 쿼리모드

서버에 쿼리를 제출하는 데 사용하는 프로토콜:

  • 단순: 간단한 쿼리 프로토콜을 사용합니다.

  • 확장: 확장 쿼리 사용 프로토콜.

  • 준비됨: 확장 쿼리 프로토콜 사용 준비된 진술로.

기본값은 단순 쿼리 프로토콜입니다. (참조48장자세한 내용은.)

-n

테스트를 실행하기 전에 진공 청소를 수행하지 마십시오. 이 옵션은필요함당신이 그렇다면 표준을 포함하지 않는 사용자 정의 테스트 시나리오 실행 테이블pgbench_accounts, pgbench_branches, pgbench_historypgbench_tellers.

-N

업데이트하지 않음pgbench_tellers그리고pgbench_branches. 이것은 피할 것입니다 이 테이블에 대한 경합을 업데이트하지만 테스트 사례가 균일해집니다. TPC-B와 덜 비슷합니다.

-r

문별 평균 대기 시간(실행 시간: 클라이언트의 관점) 벤치마크 이후 각 명령의 끝납니다. 자세한 내용은 아래를 참조하세요.

-s scale_factor

지정된 배율 인수를 보고합니다.pgbench의 출력입니다. 내장된 테스트를 통해, 이것은 필요하지 않습니다. 올바른 스케일 팩터는 다음과 같이 감지됩니다. 의 행 수 계산pgbench_branches테이블. 그러나 테스트할 때 사용자 정의 벤치마크(-f옵션), 규모 이 옵션을 사용하지 않으면 계수는 1로 보고됩니다.

-S

TPC-B와 유사한 테스트 대신 선택 전용 트랜잭션을 수행합니다.

-t 거래

각 클라이언트가 실행하는 트랜잭션 수. 기본값은 10입니다.

-T

정해진 횟수가 아닌 이 시간 동안 테스트를 실행합니다. 클라이언트당 거래 수입니다.-t그리고-T상호 배타적스포츠 토토 사이트.

-v

테스트를 실행하기 전에 표준 테이블 4개를 모두 비우세요. 와 둘 다-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 포트

데이터베이스 서버의 포트 번호

-유 로그인

연결할 사용자 이름

-V
--버전

인쇄pgbench버전 및 종료.

-?
--도움말

다음에 관한 도움말 표시pgbench명령 줄 인수를 입력하고 종료합니다.

참고

이것이 무엇입니까"거래"사실 pgbench에서 수행되었나요?

기본 트랜잭션 스크립트는 각각 7개의 명령을 발행합니다. 거래:

  1. 시작;

  2. 업데이트 pgbench_accounts SET 균형 = 불균형 + :delta 여기서 보조 = :aid;

  3. pgbench_accounts에서 균형을 선택하세요. 원조 = : 원조;

  4. 업데이트 pgbench_tellers SET tbalance = tbalance + :delta tid = :tid;

  5. 업데이트 pgbench_branches SET bbalance = bbalance + :delta 입찰 = :bid;

  6. INSERT INTO pgbench_history(tid, bid,aid, 델타, mtime) 값(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);

  7. END;

지정하는 경우-N, 4단계와 5단계는 그렇지 않습니다. 거래에 포함됩니다. 지정하는 경우-S, 오직선택이다 발행되었습니다.

맞춤 스크립트

pgbench실행을 지원합니다 기본 트랜잭션을 대체하여 사용자 정의 벤치마크 시나리오 파일에서 읽은 트랜잭션 스크립트가 있는 스크립트(위에 설명됨) (-f옵션). 이 경우에는 a"거래"스크립트 실행 1회로 계산됩니다. 파일. 여러 스크립트를 지정할 수도 있습니다(다중-f옵션), 이 경우 다음 중 임의의 하나가 선택됩니다. 클라이언트 세션이 새 세션을 시작할 때마다 스크립트가 선택됩니다. 거래.

스크립트 파일의 형식은 한 줄에 하나의 SQL 명령입니다. 여러 줄 SQL 명령은 지원되지 않습니다. 빈 줄과 줄 로 시작하는--무시됩니다. 스크립트 파일 라인도 가능합니다"메타 명령", 다음으로 해석됩니다.pgbench그 자체, 아래에 설명된 대로입니다.

스크립트에 대한 간단한 변수 대체 기능이 있습니다. 파일. 변수는 명령줄로 설정할 수 있습니다.-D25359_25467-D명령줄 옵션, 변수규모은 현재 배율로 사전 설정되어 있습니다. 한 번 설정하면 변수 값을 SQL 명령에 삽입할 수 있습니다. 쓰기:변수이름. 여러 개를 실행할 때 클라이언트 세션마다 각 세션에는 고유한 변수 세트가 있습니다.

스크립트 파일 메타 명령은 백슬래시로 시작합니다(\). 메타 명령에 대한 인수는 다음으로 구분됩니다. 공백. 다음 메타 명령이 지원됩니다.

\세트varname 피연산자1 [ 연산자 피연산자2 ]

변수 설정varname에 계산된 정수 값. 각각피연산자은 정수 상수이거나 a스포츠 토토 사이트.:변수이름다음을 갖는 변수에 대한 참조 정수 값.연산자할 수 있다 수+, -, *또는/.

예:

\set ntellers 10 * :scale
\setrandomvarname 최대

변수 설정varname에 한계 스포츠 토토 사이트의 임의의 정수 값그리고최대포함. 각 한계는 정수 상수이거나 a일 수 있습니다.:변수이름다음을 갖는 변수에 대한 참조 정수 값입니다.

예:

\set무작위 지원 1 :naccounts
\수면번호[ 우리 | ms | 초 ]

스크립트 실행이 지정된 기간 동안 잠자기 상태가 되도록 합니다. 마이크로초(우리), 밀리초 (ms) 또는 초(s). 단위를 생략하면 초가 됩니다. 기본값.번호다음 중 하나일 수 있습니다. 정수 상수 또는 a:변수이름다음을 갖는 변수에 대한 참조 정수 값입니다.

예:

\수면 10ms
\setshellvarname 명령 [ 인수 ... ]

변수 설정varname에 쉘 명령의 결과명령. 명령은 정수를 반환해야 합니다. 표준 출력을 통해 값을 얻습니다.

인수텍스트일 수 있음 상수 또는 a:변수이름모든 변수에 대한 참조 유형. 사용하고 싶다면인수콜론으로 시작하면, 의 시작인수.

예:

\setshell 변수_to_be_할당 명령 literal_argument :variable ::literal_starting_with_colon
\쉘명령 [ 인수 ... ]

다음과 같습니다\setshell, 하지만 결과는 무시됩니다.

예:

\쉘 명령 literal_argument :variable ::literal_starting_with_colon

예를 들어, 내장된 TPC-B와 유사한 전체 정의는 거래는 다음과 같습니다:

\set nbranches :scale
\set ntellers 10 * :scale
\set naccounts 100000 * :scale
\setrandom 보조 1 :naccounts
\setrandom bid 1 :n분기
\setrandom tid 1 :ntellers
\set임의 델타 -5000 5000
시작;
업데이트 pgbench_accounts SET abalance = abalance + :delta WHERE 보조 = :aid;
pgbench_accounts에서 잔고 선택 WHEREaid = :aid;
업데이트 pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
업데이트 pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
pgbench_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
끝;

이 스크립트는 각 거래 반복을 허용합니다. 무작위로 선택된 다른 행을 참조합니다. (이 예는 또한 각 클라이언트 세션마다 고유한 세션을 갖는 것이 중요한 이유 변수 — 그렇지 않으면 독립적으로 접촉되지 않을 것입니다 행이 다릅니다.)

트랜잭션별 로깅

와 함께-l옵션이 없지만--집계-간격, pgbench각각 소요된 시간을 기록합니다. 트랜잭션을 로그 파일로 보냅니다. 로그 파일의 이름은 다음과 같습니다.pgbench_log.nnn, 어디서nnnpgbench의 PID입니다. 프로세스. 만약-j옵션이 2 이상입니다. 여러 작업자 스레드를 생성하면 각각 자체 로그 파일이 생깁니다. 첫 번째 작업자는 로그 파일에 대해 동일한 이름을 사용합니다. 표준 단일 작업자 사례. 다른 사용자에 대한 추가 로그 파일 근로자의 이름이 지정됩니다.pgbench_log.nnn., 어디서순차번호입니다 1로 시작하는 각 작업자에 대해.

로그 형식은 다음과 같습니다:

클라이언트_ID transaction_no 시간 file_no time_epoch time_us

어디에서시간총 경과 시간입니다 트랜잭션 시간(마이크로초),file_no어떤 스크립트 파일이 사용되었는지 식별합니다. (여러 스크립트가 지정된 경우에 유용합니다.-f) 및time_epoch/time_us는 UNIX epoch 형식 타임스탬프이며 마이크로초 단위의 오프셋(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

많은 양의 작업을 처리할 수 있는 하드웨어에서 장기간 테스트를 실행할 때 트랜잭션이 발생하면 로그 파일이 매우 커질 수 있습니다.--샘플링 속도옵션은 로그에만 사용할 수 있습니다. 무작위 거래 샘플.

집계된 로깅

와 함께--집계-간격옵션, 로그는 약간 다른 형식을 사용합니다.

interval_start num_of_transactions latency_sum latency_2_sum 최소 지연 시간 max_latency

어디에서interval_start이것은 간격의 시작(UNIX 에포크 형식 타임스탬프),num_of_transactions수는 간격 내의 거래,latency_sum은 지연 시간의 합계입니다. 평균 대기 시간을 쉽게 계산할 수 있습니다). 다음 두 필드는 분산 추정에 유용합니다 -latency_sum는 지연 시간의 합계이며latency_2_sum2번째의 합입니다 대기 시간의 힘. 마지막 두 필드는 다음과 같습니다.min_latency- 최소 대기 시간 간격 및max_latency- 최대 간격 내의 대기 시간. 거래는 다음으로 계산됩니다. 커밋된 간격입니다.

다음은 예시 출력입니다:

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 * :scale
        0.001343 \set ntellers 10 * :scale
        0.001212 \set naccounts 100000 * :scale
        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;
        0.454643 pgbench_accounts에서 균형 선택 WHERE help = :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 pgbench_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
        1.212976 종료;

여러 스크립트 파일이 지정된 경우 평균은 다음과 같습니다. 각 스크립트 파일에 대해 별도로 보고됩니다.

추가 타이밍 정보를 수집하는 데 필요한 사항에 유의하세요. 명령문별 대기 시간 계산의 경우 약간의 오버헤드가 추가됩니다. 이것은 평균 실행 속도가 느려지고 계산된 TPS가 낮아집니다. 금액 속도 저하 정도는 플랫폼과 하드웨어. 대기 시간이 있는 경우와 없는 경우의 평균 TPS 값 비교 보고 활성화는 타이밍 오버헤드가 있는지 측정하는 좋은 방법입니다. 중요합니다.

우수 사례

사용이 매우 쉽습니다pgbench완전히 의미 없는 숫자를 생성합니다. 다음은 몇 가지 지침입니다. 유용한 결과를 얻는 데 도움이 됩니다.

먼저,절대로다음을 위해 실행되는 모든 테스트를 믿으십시오. 단 몇 초. 다음을 사용하세요.-t또는-T실행을 적어도 한 시간 동안 지속시키는 옵션 몇 분 동안 소음을 평균화합니다. 어떤 경우에는 다음을 수행할 수 있습니다. 재현 가능한 숫자를 얻으려면 몇 시간이 필요합니다. 좋은 생각이야 테스트 실행을 몇 번 시도하여 숫자가 맞는지 알아보세요. 재현 가능 여부.

기본 TPC-B와 유사한 테스트 시나리오의 경우 초기화 축척계수(-s)은 최소한 다음과 같아야 합니다. 테스트하려는 클라이언트의 최대 수만큼 커집니다. (-c); 그렇지 않으면 대부분 측정하게 될 것입니다. 업데이트 경합. 뿐입니다-s행 에서pgbench_branches테이블, 그리고 모든 거래는 그 중 하나를 업데이트하려고 하므로-c다음을 초과하는 값-s의심할 여지없이 많은 거래가 차단될 것입니다. 다른 거래.

기본 테스트 시나리오는 또한 기간에 매우 민감합니다. 테이블이 초기화된 이후입니다. 죽은 항목이 누적되었습니다. 테이블의 행과 데드 스페이스에 따라 결과가 변경됩니다. 받는 사람 결과를 이해하고 총 횟수를 추적해야 합니다. 업데이트 및 진공 청소가 발생할 때. Autovacuum이 활성화된 경우 다음을 수행할 수 있습니다. 측정된 성능에 예측할 수 없는 변화가 발생합니다.

제한사항pgbench그건 대규모 테스트를 시도할 때 자체적으로 병목 현상이 발생할 수 있습니다. 클라이언트 세션 수. 이는 다음을 실행하여 완화할 수 있습니다.pgbench다른 기계에 네트워크 대기 시간이 짧기는 하지만 데이터베이스 서버에서 필수. 여러 개를 실행하는 것이 유용할 수도 있습니다.pgbench인스턴스를 동시에 여러 인스턴스에서 클라이언트 머신, 동일한 데이터베이스 서버에 대해.

보안

신뢰할 수 없는 사용자가 신뢰할 수 없는 데이터베이스에 접근할 수 있는 경우 채택됨안전하다 스키마 사용 패턴, 실행하지 마세요pgbench해당 데이터베이스에 있습니다.pgbench부적절한 이름을 사용하며 그렇지 않습니다. 검색 경로를 조작하세요.