| 젠 토토 : 문서 : 9.6 : 젠 토토 | |||
|---|---|---|---|
| postgresql : 문서 : 9.6 : 범퍼카 토토 | 롤 토토 : 문서 : 9.6 : 롤 토토 클라이언트 응용 프로그램 | 사설 토토 사이트 : 문서 : 9.6 : PG_CONFIG | |
pgbench벤치마크 테스트를 실행하기 위한 간단한 프로그램입니다.포스트그레SQL. 여러 동시 데이터베이스 세션에서 동일한 일련의 SQL 명령을 계속해서 실행한 다음 평균 트랜잭션 속도(초당 트랜잭션)를 계산합니다. 기본적으로,pgbench5개가 포함된 TPC-B를 느슨하게 기반으로 한 시나리오를 테스트합니다.SELECT, 업데이트및삽입배트맨 토토당 명령. 그러나 자체 배트맨 토토 스크립트 파일을 작성하면 다른 사례를 쉽게 테스트할 수 있습니다.
일반적인 출력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_history및pgbench_tellers, 해당 이름의 기존 테이블을 모두 삭제합니다. 이러한 이름을 가진 테이블이 있는 경우 다른 데이터베이스를 사용하도록 주의하세요! |
기본값"축척 계수"of 1, 테이블에는 처음에 다음과 같은 행이 포함되어 있습니다.
테이블 행 수 --------------------------------- pgbench_branches 1 pgbench_tellers 10 pgbench_accounts 100000 pgbench_history 0
다음을 사용하여 행 수를 늘릴 수 있습니다(대부분의 경우 아마도 그래야 합니다).-s(축척계수) 옵션.-F(fillfactor) 옵션도 이 시점에서 사용될 수 있습니다.
필요한 설정을 완료한 후에는 다음을 포함하지 않는 명령으로 벤치마크를 실행할 수 있습니다.-i즉,
pgbench [ 옵션 ] db이름
거의 모든 경우에 유용한 테스트를 수행하려면 몇 가지 옵션이 필요합니다. 가장 중요한 옵션은 다음과 같습니다.-c(클라이언트 수),-t(거래 수),-T(시간 제한) 및-f(사용자 정의 스크립트 파일 지정). 전체 목록은 아래를 참조하세요.
다음은 세 개의 하위 섹션으로 나뉩니다. 데이터베이스 초기화 및 벤치마크 실행 중에 서로 다른 옵션이 사용되며 일부 옵션은 두 경우 모두에 유용합니다.
pgbench다음 명령줄 초기화 인수를 허용합니다:
초기화 모드를 호출하는 데 필요합니다.
생성pgbench_accounts, pgbench_tellers그리고pgbench_branches주어진 fillfactor가 있는 테이블. 기본값은 100입니다.
초기화 후에는 진공청소를 수행하지 마십시오.
로깅을 자동 모드로 전환하여 5초당 하나의 진행 메시지만 생성합니다. 기본 로깅은 100,000개 행마다 하나의 메시지를 인쇄하며, 이는 종종 초당 많은 줄을 출력합니다(특히 좋은 하드웨어에서).
축척 계수에 의해 생성된 행 수를 곱합니다. 예를 들어,-s 100다음에 10,000,000개의 행을 생성합니다pgbench_accounts테이블. 기본값은 1입니다. 척도가 20,000 이상이면 계정 식별자(도움열)은 더 큰 정수()를 사용하도록 전환됩니다.비긴트), 계정 식별자 범위를 보유할 수 있을 만큼 충분히 커집니다.
표준 테이블 사이에 외래 키 제약조건을 생성합니다.
기본 테이블스페이스가 아닌 지정된 테이블스페이스에 인덱스를 생성합니다.
기본 테이블스페이스가 아닌 지정된 테이블스페이스에 테이블을 생성하십시오.
모든 테이블을 영구 테이블이 아닌 기록되지 않은 테이블로 생성하십시오.
pgbench다음 명령줄 벤치마킹 인수를 허용합니다:
지정된 내장 스크립트를 실행될 스크립트 목록에 추가하십시오. 사용 가능한 내장 스크립트는 다음과 같습니다.tpcb와 유사한, 간단한 업데이트그리고선택 전용. 내장 이름의 명확한 접두사가 허용됩니다. 특별한 이름으로목록, 내장 스크립트 목록을 표시하고 즉시 종료합니다.
선택적으로 뒤에 정수 가중치를 씁니다.@다른 스크립트와 비교하여 이 스크립트를 선택할 확률을 조정합니다. 기본 가중치는 1입니다. 자세한 내용은 아래를 참조하세요.
시뮬레이트된 클라이언트 수, 즉 동시 데이터베이스 세션 수입니다. 기본값은 1입니다.
클라이언트 세션당 한 번만 수행하는 대신 각 트랜잭션에 대해 새 연결을 설정하십시오. 이는 연결 오버헤드를 측정하는 데 유용합니다.
디버깅 출력을 인쇄합니다.
사용자 정의 스크립트에서 사용할 변수를 정의하십시오(아래 참조). 다중-D옵션이 허용됩니다.
다음에서 읽은 트랜잭션 스크립트 추가파일 이름실행할 스크립트 목록에.
선택적으로 뒤에 정수 가중치를 씁니다.@다른 스크립트와 비교하여 이 스크립트를 선택할 확률을 조정합니다. 기본 가중치는 1입니다. (다음을 포함하는 스크립트 파일 이름을 사용하려면@문자, 모호함이 없도록 가중치를 추가합니다. 예를 들어filen@me@1.) 자세한 내용은 아래를 참조하세요.
내부 작업자 스레드 수pgbench. 다중 CPU 시스템에서는 둘 이상의 스레드를 사용하는 것이 도움이 될 수 있습니다. 클라이언트는 사용 가능한 스레드 간에 최대한 균등하게 분산됩니다. 기본값은 1입니다.
각 배트맨 토토에 소요된 시간을 로그 파일에 기록합니다. 자세한 내용은 아래를 참조하세요.
다음 이상 지속되는 거래한도밀리초는 다음과 같이 별도로 계산되고 보고됩니다.늦게.
조절이 사용되는 경우 (--rate=...), 일정보다 많이 지연되는 거래한계ms는 대기 시간 제한을 충족할 희망이 없으며 서버로 전혀 전송되지 않습니다. 다음과 같이 별도로 계산 및 보고됩니다.건너뛰었습니다.
서버에 쿼리를 제출하는 데 사용할 프로토콜:
간단한: 간단한 쿼리 프로토콜을 사용합니다.
확장: 확장 쿼리 프로토콜을 사용합니다.
준비됨: 준비된 문과 함께 확장 쿼리 프로토콜을 사용합니다.
기본값은 단순 쿼리 프로토콜입니다. (참조스포츠 토토 : 문서 : 9.6 : Frontend/백엔드 프로토콜자세한 내용은.)
테스트를 실행하기 전에 진공 청소를 수행하지 마십시오. 이 옵션은필요함표준 테이블을 포함하지 않는 사용자 정의 테스트 시나리오를 실행하는 경우pgbench_accounts, pgbench_branches, pgbench_history및pgbench_tellers.
내장된 단순 업데이트 스크립트를 실행합니다. 의 약어-b 단순 업데이트.
진행 보고서 표시 간격초초. 보고서에는 실행 시작 이후의 시간, 마지막 보고 이후의 tps, 마지막 보고 이후의 배트맨 토토 대기 시간 평균 및 표준 편차가 포함됩니다. 제한 중(-R), 지연 시간은 실제 배트맨 토토 시작 시간이 아닌 배트맨 토토 예정 시작 시간을 기준으로 계산되므로 평균 일정 지연 시간도 포함됩니다.
벤치마크가 완료된 후 각 명령의 평균 문당 대기 시간(클라이언트 관점에서 실행 시간)을 보고합니다. 자세한 내용은 아래를 참조하세요.
가능한 한 빨리 실행하는 대신(기본값) 지정된 속도를 목표로 하는 트랜잭션을 실행합니다. 비율은 초당 트랜잭션 수로 제공됩니다. 목표 비율이 가능한 최대 비율보다 높으면 비율 제한은 결과에 영향을 미치지 않습니다.
비율은 포아송 분포 일정 시간선을 따라 트랜잭션을 시작하여 목표로 삼습니다. 예상 시작 시간 일정은 이전 트랜잭션이 종료된 시점이 아닌 클라이언트가 처음 시작된 시점을 기준으로 앞으로 이동합니다. 이러한 접근 방식은 트랜잭션이 원래 예정된 종료 시간을 초과하면 나중에 트랜잭션이 다시 따라잡을 수 있음을 의미합니다.
조절이 활성화되면 실행 종료 시 보고되는 트랜잭션 대기 시간은 예약된 시작 시간에서 계산되므로 각 트랜잭션이 이전 트랜잭션이 완료될 때까지 기다려야 했던 시간이 포함됩니다. 대기 시간을 일정 지연 시간이라고 하며 평균과 최대도 별도로 보고됩니다. 실제 트랜잭션 시작 시간에 대한 트랜잭션 지연 시간, 즉 데이터베이스에서 트랜잭션을 실행하는 데 소요된 시간은 보고된 지연 시간에서 일정 지연 시간을 빼서 계산할 수 있습니다.
만약--대기 시간 제한다음과 함께 사용됩니다.--rate, 지연 시간은 예약된 시작 시간을 기준으로 계산되므로 이전 트랜잭션이 종료될 때 이미 지연 시간 제한을 초과할 정도로 트랜잭션이 지연될 수 있습니다. 이러한 거래는 서버로 전송되지 않고 모두 건너뛰어 별도로 계산됩니다.
긴 일정 지연 시간은 시스템이 선택한 수의 클라이언트 및 스레드를 사용하여 지정된 속도로 트랜잭션을 처리할 수 없음을 나타냅니다. 평균 트랜잭션 실행 시간이 각 트랜잭션 간의 예정된 간격보다 길면 각 연속 트랜잭션이 더 뒤쳐지고 테스트 실행이 길어질수록 일정 지연 시간이 계속 증가합니다. 그런 일이 발생하면 지정된 거래율을 줄여야 합니다.
지정된 배율 인수를 보고합니다.pgbench의 출력입니다. 내장된 테스트에서는 이것이 필요하지 않습니다. 올바른 배율 인수는의 행 수를 계산하여 감지됩니다.pgbench_branches테이블. 그러나 커스텀 벤치마크만 테스트하는 경우(-f옵션), 이 옵션을 사용하지 않으면 배율 인수가 1로 보고됩니다.
내장된 선택 전용 스크립트를 실행합니다. 의 약어-b 선택 전용.
각 클라이언트가 실행하는 트랜잭션 수. 기본값은 10입니다.
클라이언트당 고정된 트랜잭션 수 대신 이 시간 동안 테스트를 실행하십시오.-t그리고-티상호 배타적입니다.
테스트를 실행하기 전에 4개의 표준 테이블을 모두 진공화하십시오. 둘 다 없음-n아니요-v, pgbench청소할 것입니다pgbench_tellers그리고pgbench_branches테이블이 잘립니다.pgbench_history.
집계 간격 길이(초). 다음과 함께만 사용할 수 있습니다.-l- 이 옵션을 사용하면 로그에 간격별 요약(트랜잭션 수, 최소/최대 지연 시간 및 분산 추정에 유용한 두 개의 추가 필드)이 포함됩니다.
이 옵션은 현재 Windows에서는 지원되지 않습니다.
진행상황을 표시할 때(옵션)-P), 실행 시작 이후의 초 수 대신 타임스탬프(Unix epoch)를 사용합니다. 단위는 초 단위이며 점 뒤의 정밀도는 밀리초입니다. 이는 다양한 도구에서 생성된 로그를 비교하는 데 도움이 됩니다.
로그에 데이터를 쓸 때 생성되는 로그 양을 줄이기 위해 사용되는 샘플링 속도입니다. 이 옵션을 지정하면 지정된 트랜잭션 부분만 기록됩니다. 1.0은 모든 거래가 기록된다는 의미이고, 0.05는 거래의 5%만 기록된다는 의미입니다.
로그 파일을 처리할 때 샘플링 속도를 고려해야 한다는 것을 기억하십시오. 예를 들어 tps 값을 계산할 때 그에 따라 숫자를 곱해야 합니다. 예를 들어 샘플링 레이트가 0.01이면 실제 tps의 1/100만 얻을 수 있습니다.
pgbench지정된 목록에서 무작위로 선택된 테스트 스크립트를 실행합니다. 스크립트에는 다음으로 지정된 내장 스크립트가 포함될 수 있습니다.-b및 다음으로 지정된 사용자 제공 스크립트-f. 각 스크립트에는 뒤에 지정된 상대적 가중치가 부여될 수 있습니다.@선택 확률을 변경합니다. 기본 가중치는1. 가중치가 있는 스크립트0무시됩니다.
기본 내장 트랜잭션 스크립트(다음으로도 호출됨-b tpcb와 유사)는 무작위로 선택된 트랜잭션당 7개의 명령을 실행합니다.도움, tid, 입찰그리고델타. 이 시나리오는 TPC-B 벤치마크에서 영감을 얻었지만 실제로는 TPC-B가 아니므로 이름이 붙었습니다.
시작;
업데이트 pgbench_accounts SET abalance = abalance + :delta WHERE 지원 = :aid;
pgbench_accounts에서 abalance를 선택하세요. 여기서 help = :aid;
업데이트 pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
pgbench_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
END;
다음을 선택하는 경우간단한 업데이트내장 (또한-N), 4단계와 5단계는 트랜잭션에 포함되지 않습니다. 이렇게 하면 해당 테이블에 대한 업데이트 경합이 방지되지만 테스트 사례가 TPC-B와 훨씬 덜 비슷해집니다.
다음을 선택하는 경우선택 전용내장 (또한-S), 오직선택발행되었습니다.
pgbench기본 트랜잭션 스크립트(위에 설명됨)를 파일에서 읽은 트랜잭션 스크립트로 대체하여 사용자 정의 벤치마크 시나리오 실행을 지원합니다(-f옵션). 이 경우에는 a"거래"스크립트 파일의 한 실행으로 계산됩니다.
스크립트 파일에는 세미콜론으로 끝나는 하나 이상의 SQL 명령이 포함되어 있습니다. 빈 줄과 로 시작하는 줄--무시됩니다. 스크립트 파일에는 다음도 포함될 수 있습니다."메타 명령", 다음으로 해석됨pgbench아래 설명된 대로 자체적으로.
참고:이전포스트그레SQL9.6, 스크립트 파일의 SQL 명령은 줄바꿈으로 종료되었으므로 여러 줄에 걸쳐 계속될 수 없습니다. 이제 세미콜론은필수연속적인 SQL 명령을 분리하기 위해(단, SQL 명령 뒤에 메타 명령이 오는 경우에는 필요하지 않습니다). 이전 버전과 새 버전 모두에서 작동하는 스크립트 파일을 생성해야 하는 경우pgbench, 세미콜론으로 끝나는 한 줄에 각 SQL 명령을 작성해야 합니다.
스크립트 파일을 위한 간단한 변수 대체 기능이 있습니다. 변수는 명령줄로 설정할 수 있습니다.-D33182_33290-D명령줄 옵션에는 자동으로 사전 설정된 몇 가지 변수가 나열되어 있습니다.표 1. 다음을 사용하여 이러한 변수에 대해 지정된 값은-D자동 사전 설정보다 우선합니다. 일단 설정되면 다음을 작성하여 변수 값을 SQL 명령에 삽입할 수 있습니다.:변수이름. 둘 이상의 클라이언트 세션을 실행하는 경우 각 세션에는 고유한 변수 세트가 있습니다.
스크립트 파일 메타 명령은 백슬래시로 시작합니다(\) 줄 끝까지 확장합니다. 메타 명령에 대한 인수는 공백으로 구분됩니다. 다음 메타 명령이 지원됩니다.
변수 설정varname다음에서 계산된 값으로표현. 표현식에는 다음과 같은 정수 상수가 포함될 수 있습니다.5432, 다음과 같은 이중 상수3.14159, 변수에 대한 참조:변수 이름, 단항 연산자(+, -) 및 이진 연산자(+, -, *, /, %) 일반적인 우선순위 및 연관성으로,함수 호출및 괄호.
예:
\set ntellers 10 * :scale \set 보조 (1021 * random(1, 100000 * :scale)) % (100000 * :scale) + 1
마이크로초 단위로 지정된 기간 동안 스크립트 실행을 휴면 상태로 만듭니다. (우리), 밀리초(ms) 또는 초(s). 단위를 생략하면 초가 기본값입니다.번호정수 상수이거나 a일 수 있습니다.:변수 이름정수 값을 갖는 변수에 대한 참조입니다.
예:
\수면 10ms
변수 설정varname셸 명령의 결과명령주어진 내용으로인수(들). 명령은 표준 출력을 통해 정수 값을 반환해야 합니다.
명령그리고 각각인수텍스트 상수이거나 a일 수 있습니다.:변수 이름변수에 대한 참조입니다. 을 사용하고 싶다면인수콜론으로 시작하고, 시작 부분에 추가 콜론을 쓰세요.인수.
예:
\setshell 변수_to_be_할당 명령 literal_argument :variable ::literal_starting_with_colon
다음과 동일\setshell, 그러나 명령 결과는 삭제됩니다.
예:
\쉘 명령 literal_argument :variable ::literal_starting_with_colon
다음에 나열된 함수표 2내장되어 있습니다pgbench다음에 나타나는 표현에 사용될 수 있습니다.\세트.
표 2. pgbench 함수
| 기능 | 반환 유형 | 설명 | 예 | 결과 |
|---|---|---|---|---|
복근(a) |
다음과 같습니다a | 절대값 | 복근(-17) | 17 |
디버그(a) |
다음과 같음a | 인쇄a에stderr그리고 돌아가기a | 디버그(5432.1) | 5432.1 |
더블(i) |
더블 | 더블 캐스팅 | 더블(5432) | 5432.0 |
최고(a [, ... ] ) |
있는 경우 두 배a이중이고, 그렇지 않으면 정수 | 인수 중 가장 큰 값 | 가장 큰(5, 4, 3, 2) | 5 |
정수(x) |
정수 | 정수로 캐스트 | 정수(5.4 + 3.8) | 9 |
최소(a [, ... ] ) |
있는 경우 두 배a이중이고, 그렇지 않으면 정수 | 인수 중 가장 작은 값 | 최소(5, 4, 3, 2.1) | 2.1 |
파이() |
더블 | 상수 PI 값 | 파이() | 3.14159265358979323846 |
무작위(lb, ub) |
정수 | 균일하게 분포된 임의의 정수[lb, ub] | 임의(1, 10) | 사이의 정수1그리고10 |
random_exponential(lb, ub, 매개변수) |
정수 | 지수적으로 분포된 임의의 정수[lb, ub], 아래 참조 | random_exponential(1, 10, 3.0) | 사이의 정수1그리고10 |
random_gaussian(lb, ub, 매개변수) |
정수 | 가우스 분포 임의 정수[lb, ub], 아래 참조 | random_gaussian(1, 10, 2.5) | 사이의 정수1그리고10 |
sqrt(x) |
더블 | 제곱근 | sqrt(2.0) | 1.414213562 |
그무작위함수는 균등 분포를 사용하여 값을 생성합니다. 즉, 모든 값이 지정된 범위 내에서 동일한 확률로 그려집니다.random_exponential그리고random_gaussian함수에는 분포의 정확한 모양을 결정하는 추가 이중 매개변수가 필요합니다.
지수 분포의 경우,매개변수빠르게 감소하는 지수 분포를 잘라서 분포를 제어합니다.매개변수, 경계 사이의 정수로 투영합니다. 정확히 말하자면,
f(x) = exp(-매개변수 * (x - min) / (최대 - 최소 + 1)) / (1 - exp(-매개변수))
그러면 값i사이분그리고최대포함은 확률로 추첨됩니다:f(i) - f(i + 1).직관적으로, 더 클수록매개변수, 더 자주 값이에 가까울수록분액세스되며 빈도가 낮은 값이 다음에 가깝습니다.최대액세스되었습니다. 0에 가까울수록매개변수는 액세스 분포가 더 평평할수록(더 균일합니다). 분포의 대략적인 근사치는 범위에서 가장 빈번한 1% 값이 다음과 같다는 것입니다.분, 그려집니다매개변수%의 시간입니다.매개변수값은 반드시 양수여야 합니다.
가우스 분포의 경우 간격은 다음에서 잘린 표준 정규 분포(고전적인 종 모양의 가우스 곡선)에 매핑됩니다.-매개변수왼쪽 및+매개변수오른쪽. 간격 중간에 있는 값이 그려질 가능성이 더 높습니다. 정확히 말하면, 만약PHI(x)는 평균을 갖는 표준 정규 분포의 누적 분포 함수입니다.뮤다음으로 정의됨(최대 + 최소) / 2.0, 와
f(x) = PHI(2.0 * 매개변수 * (x--mu) / (최대 - 최소 + 1)) /
(2.0 * PHI(매개변수) - 1)
예를 들어, 내장된 TPC-B와 유사한 트랜잭션의 전체 정의는 다음과 같습니다:
\set 보조 무작위(1, 100000 * :scale) \입찰 무작위 설정(1, 1 * :scale) \set tid 무작위(1, 10 * :scale) \세트 델타 무작위(-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, 여기서nnn는 다음의 PID입니다.pgbench프로세스. 만약-j옵션이 2 이상인 경우 여러 작업자 스레드를 생성하면 각각 자체 로그 파일이 있습니다. 첫 번째 작업자는 표준 단일 작업자의 경우와 동일한 로그 파일 이름을 사용합니다. 다른 작업자에 대한 추가 로그 파일의 이름은 다음과 같습니다.pgbench_log.nnn.음, 여기서음은 1로 시작하는 각 작업자의 일련 번호입니다.
로그 형식은 다음과 같습니다:
클라이언트_ID transaction_no 시간 script_no time_epoch time_us [schedule_lag]
어디에서시간마이크로초 단위의 총 경과된 트랜잭션 시간입니다.script_no사용된 스크립트 파일을 식별합니다(여러 스크립트가 지정된 경우 유용함-f또는-b) 및time_epoch/time_us은 Unix epoch 형식 타임스탬프와 트랜잭션이 완료된 시기를 보여주는 마이크로초 단위의 오프셋(소수 초로 ISO 8601 타임스탬프를 생성하는 데 적합)입니다. 필드schedule_lag은 트랜잭션의 예약된 시작 시간과 실제로 시작된 시간 간의 차이(마이크로초)입니다. 이는 다음과 같은 경우에만 존재합니다.--rate옵션이 사용됩니다. 둘 다일 때--rate그리고--대기 시간 제한사용됩니다.시간건너뛴 거래에 대해 다음과 같이 보고됩니다.건너뛰었습니다.
다음은 생성된 로그 파일의 일부입니다:
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를 사용한 또 다른 예(추가 사항 참고schedule_lag열):
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)이 5ms 제한을 초과했기 때문에 지연되었습니다. 다음 두 트랜잭션은 시작하기도 전에 이미 늦었기 때문에 건너뛰었습니다.
많은 배트맨 토토을 처리할 수 있는 하드웨어에서 장기간 테스트를 실행할 때 로그 파일이 매우 커질 수 있습니다.--샘플링 속도옵션은 임의의 트랜잭션 샘플만 기록하는 데 사용할 수 있습니다.
와 함께--집계-간격옵션, 로그는 약간 다른 형식을 사용합니다.
interval_start num_of_transactions latency_sum latency_2_sum 최소 지연 시간 최대_지연 시간 [lag_sum lag_2_sum min_lag max_lag [skipped_transactions]]
어디에서interval_start간격의 시작입니다(Unix epoch 형식 타임스탬프).num_of_transactions은 간격 내의 배트맨 토토 수입니다.latency_sum는 지연 시간의 합계입니다(평균 지연 시간을 쉽게 계산할 수 있음). 다음 두 필드는 분산 추정에 유용합니다. -latency_sum는 지연 시간의 합계이며latency_2_sum는 지연 시간의 2제곱의 합입니다. 다음 두 필드는 다음과 같습니다.min_latency- 간격 내의 최소 대기 시간 및max_latency- 간격 내의 최대 대기 시간입니다. 트랜잭션은 커밋된 간격으로 계산됩니다. 결국 필드는,lag_sum, lag_2_sum, min_lag및max_lag, 다음 경우에만 존재합니다.--rate옵션이 사용됩니다. 가장 마지막 것,skipped_transactions, 옵션이 있는 경우에만 존재합니다.--대기 시간 제한도 존재합니다. 각 트랜잭션이 이전 트랜잭션이 완료될 때까지 기다려야 했던 시간, 즉 각 트랜잭션의 예정된 시작 시간과 실제로 시작된 시간 간의 차이로 계산됩니다.
다음은 예시 출력입니다:
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
평균 지연 시간 = 15.844ms
대기 시간 표준 편차 = 2.715ms
tps = 618.764555(연결 설정 포함)
tps = 622.977698(연결 설정 제외)
스크립트 통계:
- 명령문 대기 시간(밀리초):
0.002 \set 보조 무작위(1, 100000 * :scale)
0.005 \set 입찰 무작위(1, 1 * :scale)
0.002 \set tid 무작위(1, 10 * :scale)
0.001 \set 델타 무작위(-5000, 5000)
0.326 시작;
0.603 업데이트 pgbench_accounts SET abalance = abalance + :delta WHERE 보조 = :aid;
0.454 pgbench_accounts에서 잔액 선택 WHEREaid = :aid;
5.528 업데이트 pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
7.335 업데이트 pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
0.371 pgbench_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
1.212 끝;
여러 스크립트 파일이 지정된 경우 평균은 각 스크립트 파일에 대해 별도로 보고됩니다.
문별 대기 시간 계산에 필요한 추가 타이밍 정보를 수집하면 약간의 오버헤드가 추가된다는 점에 유의하세요. 이렇게 하면 평균 실행 속도가 느려지고 계산된 TPS가 낮아집니다. 속도 저하 정도는 플랫폼과 하드웨어에 따라 크게 다릅니다. 지연 시간 보고가 활성화된 상태와 활성화되지 않은 상태의 평균 TPS 값을 비교하는 것은 타이밍 오버헤드가 중요한지 측정하는 좋은 방법입니다.
사용이 매우 쉽습니다pgbench완전히 의미 없는 숫자를 생성합니다. 다음은 유용한 결과를 얻는 데 도움이 되는 몇 가지 지침입니다.
먼저,절대로단 몇 초 동안만 실행되는 테스트를 믿으세요. 다음을 사용하세요.-t또는-T노이즈를 평균화하기 위해 실행이 최소 몇 분 동안 지속되도록 하는 옵션입니다. 어떤 경우에는 재현 가능한 수치를 얻으려면 몇 시간이 필요할 수도 있습니다. 테스트를 여러 번 시도하여 수치가 재현 가능한지 확인하는 것이 좋습니다.
기본 TPC-B와 유사한 테스트 시나리오의 경우 초기화 배율 인수(-s)는 최소한 테스트하려는 최대 클라이언트 수만큼 커야 합니다(-c); 그렇지 않으면 대부분 업데이트 경합을 측정하게 될 것입니다. 뿐입니다-s행pgbench_branches테이블이며, 모든 트랜잭션은 그 중 하나를 업데이트하려고 합니다. 따라서-c값 초과-s의심할 여지 없이 많은 배트맨 토토이 다른 배트맨 토토을 기다리면서 차단될 것입니다.
기본 테스트 시나리오는 또한 테이블이 초기화된 이후 얼마나 오래되었는지에 매우 민감합니다. 테이블에 데드 행과 데드 스페이스가 누적되면 결과가 변경됩니다. 결과를 이해하려면 총 업데이트 수와 데이터 정리가 발생하는 시기를 추적해야 합니다. autovacuum이 활성화되면 측정된 성능에 예측할 수 없는 변화가 발생할 수 있습니다.
제한사항pgbench많은 수의 클라이언트 세션을 테스트하려고 할 때 자체적으로 병목 현상이 발생할 수 있다는 것입니다. 이는 다음을 실행하여 완화할 수 있습니다.pgbench데이터베이스 서버와 다른 시스템에 있지만 네트워크 대기 시간이 짧아야 합니다. 여러 개를 실행하는 것이 유용할 수도 있습니다.pgbench동일한 데이터베이스 서버에 대해 여러 클라이언트 시스템에서 동시에 인스턴스.
신뢰할 수 없는 사용자가 다음을 채택하지 않은 데이터베이스에 접근할 수 있는 경우보안 스키마 사용 패턴, 실행하지 마세요pgbench해당 데이터베이스에 있습니다.pgbench규정되지 않은 이름을 사용하며 검색 경로를 조작하지 않습니다.