지원되는 버전:현재 (18) / 17 / 16 / 15 / 14 / 13
개발 버전:개발
지원되지 않는 버전:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3
이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

F.26. 토토 캔

토토 캔간단한 프로그램입니다 벤치마크 테스트 실행용포스트그레SQL. 동일한 SQL 시퀀스를 실행합니다. 여러 개의 동시 데이터베이스에서 반복적으로 명령을 수행할 수 있습니다. 세션을 수행한 후 평균 거래율을 계산합니다. (초당 트랜잭션). 기본적으로,토토 캔느슨하게 시나리오를 테스트합니다. 5개를 포함하는 TPC-B 기반선택, 업데이트삽입96PostgreSQL: 문서: 9.1: 토토 캔61

토토 캔의 일반적인 출력은 다음과 같습니다:

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

처음 6줄은 가장 중요한 몇 가지 사항을 보고합니다. 매개변수 설정. 다음 줄은 완료되고 의도된 거래(후자는 단지 클라이언트 수와 거래 수의 곱 클라이언트); 이전에 실행이 실패하지 않는 한 이는 동일합니다. 완료. (안에-T모드, 실제 거래 수가 인쇄됩니다.) 마지막 두 줄은 초당 거래 수(포함 여부) 데이터베이스 세션을 시작하는 데 걸리는 시간을 계산합니다.

F.26.1. 개요

기본 TPC-B와 유사한 트랜잭션 테스트에는 특정 항목이 필요합니다. 테이블은 미리 준비해야 합니다.토토 캔다음과 함께 호출되어야 합니다-i(초기화) 옵션을 생성하고 이 테이블을 채웁니다. (사용자 정의 스크립트를 테스트할 때, 이 단계는 필요하지 않지만 대신 무엇이든 수행해야 합니다. 테스트 요구사항을 설정하세요.) 초기화는 다음과 같습니다.

토토 캔 -i [ 기타 옵션 ] DB이름

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

주의

토토 캔 -i4개 생성 테이블토토 캔_accounts, 토토 캔_branches, 토토 캔_history토토 캔_tellers, 파괴 중 이 이름의 기존 테이블. 매우 조심하세요 이러한 테이블이 있는 경우 다른 데이터베이스를 사용하십시오. 이름!

기본값"축척 계수"의 1, 테이블에는 처음에 다음과 같은 행이 포함됩니다.

테이블 행 수
---------------------------------
토토 캔_branches 1
토토 캔_tellers 10
토토 캔_accounts 100000
토토 캔_history 0

당신은 증가할 수 있습니다(대부분의 경우 아마도 그래야 합니다). 를 사용하여 행 수-s(축척계수) 옵션.-F(fillfactor) 옵션도 이 시점에서 사용될 수 있습니다.

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

토토 캔 [ 옵션 ] db이름

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

섹션 F.26.2데이터베이스 중에 사용되는 옵션을 표시합니다. 초기화하는 동안섹션 F.26.3쇼 벤치마크를 실행하는 동안 사용되는 옵션 및섹션 F.26.4쇼 두 경우 모두에 유용한 옵션입니다.

F.26.2.토토 캔초기화 옵션

토토 캔수락합니다 다음 명령줄 초기화 인수:

-i

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

-F 채우기 요소

생성토토 캔_accounts, 토토 캔_tellers그리고토토 캔_branches주어진 테이블이 있는 테이블 채우기 요소. 기본값은 100입니다.

-s scale_factor

규모에 따라 생성된 행 수를 곱합니다. 요인. 예를 들어,-s 100할 것이다 에 10,000,000개의 행을 생성합니다.토토 캔_accounts테이블. 기본값은 1.

F.26.3.토토 캔벤치마킹 옵션

토토 캔수락합니다 다음 명령줄 벤치마킹 인수:

-c 클라이언트

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

-C

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

-d

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

-D varname=

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

-f 파일 이름

다음에서 트랜잭션 스크립트 읽기파일 이름. 자세한 내용은 아래를 참조하세요.-N, -S, 그리고-f서로 독점.

-j 스레드

내부 작업자 스레드 수토토 캔. 둘 이상의 스레드 사용 다중 CPU 시스템에서 도움이 될 수 있습니다. 수 클라이언트는 스레드 수의 배수여야 합니다. 각 스레드에는 동일한 수의 클라이언트가 제공되므로 관리할 세션입니다. 기본값은 1입니다.

-l

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

-M 쿼리모드

질의를 제출하는 데 사용할 프로토콜 서버:

  • 단순: 간단한 쿼리 사용 프로토콜.

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

  • 준비됨: 확장 사용 준비된 문으로 프로토콜을 쿼리합니다.

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

-n

테스트를 실행하기 전에 진공 청소를 수행하지 마십시오. 이 옵션은필요함당신이 그렇다면 포함되지 않은 사용자 정의 테스트 시나리오 실행 표준 테이블토토 캔_accounts, 토토 캔_branches, 토토 캔_history토토 캔_tellers.

-N

업데이트하지 않음토토 캔_tellers그리고토토 캔_branches. 이것은 피할 것입니다 이 테이블에 대한 경합을 업데이트하지만 테스트를 수행합니다. TPC-B와 훨씬 덜 유사한 경우입니다.

-r

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

-s scale_factor

지정된 배율 인수를 보고합니다.토토 캔의 출력입니다. 내장된 테스트는 필요하지 않습니다. 올바른 축척 비율 의 행 수를 계산하여 감지됩니다.토토 캔_branches테이블. 그러나 사용자 정의 벤치마크를 테스트할 때(-f옵션), 배율은 다음과 같습니다. 이 옵션을 사용하지 않으면 1로 보고됩니다.

-S

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

-t 거래

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

-T

테스트를 실행하는 대신 이 시간 동안 테스트를 실행하세요. 클라이언트당 고정된 트랜잭션 수입니다.-t그리고-T있습니다 상호 배타적입니다.

-v

실행하기 전에 4개의 표준 테이블을 모두 진공화하십시오. 테스트. 둘 다 없음-n아니요-v, 토토 캔가 진공 청소기로 청소합니다토토 캔_tellers그리고토토 캔_branches테이블 및 잘립니다.토토 캔_history.

F.26.4.토토 캔공통 옵션

토토 캔수락합니다 다음 명령줄 공통 인수:

-h 호스트 이름

데이터베이스 서버의 호스트 이름

-p 포트

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

-U 로그인

연결할 사용자 이름

F.26.5. 은 무엇입니까?"거래"사실 토토 캔에서 수행되었나요?

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

  1. 시작;

  2. 토토 캔_accounts 업데이트 잔액 설정 = 불균형 + :delta 여기서 지원 = :aid;

  3. 선택 균형 FROM 토토 캔_accounts 여기서 지원 = :aid;

  4. 토토 캔_tellers 세트 tbalance 업데이트 = tbalance + :delta tid = :tid;

  5. 토토 캔_branches 설정 bbalance 업데이트 = bbalance + :delta 입찰가 = :bid;

  6. 토토 캔_history에 삽입(tid, 입찰, 보조, 델타, mtime) 값(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);

  7. END;

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

F.26.6. 맞춤 스크립트

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

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

스크립트에 대한 간단한 변수 대체 기능이 있습니다. 파일. 변수는 명령줄로 설정할 수 있습니다.-D옵션, 위에 설명됨 또는 메타별 아래에 설명된 명령. 모든 변수 사전 설정 외에도 으로-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
시작;
업데이트 토토 캔_accounts SET abalance = abalance + :delta WHERE 보조 = :aid;
토토 캔_accounts에서 잔고 선택 WHEREaid = :aid;
업데이트 토토 캔_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
업데이트 토토 캔_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
토토 캔_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
끝;

이 스크립트는 각 거래 반복을 허용합니다. 무작위로 선택된 다른 행을 참조합니다. (이 예 역시 각 클라이언트 세션에서 자신의 변수 — 그렇지 않으면 독립적으로 접촉하지 않을 것입니다 행이 다릅니다.)

F.26.7. 트랜잭션별 로깅

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

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

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

어디에서시간합계입니다 경과된 트랜잭션 시간(마이크로초),file_no어떤 스크립트 파일이 있었는지 식별합니다. 사용됨(여러 스크립트가 지정된 경우 유용함-f) 및time_epoch/time_usUNIX 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

F.26.8. 문별 대기 시간

와 함께-r옵션,토토 캔경과된 거래를 수집합니다. 모든 클라이언트가 실행한 각 명령문의 시간입니다. 그러면 대기 시간이라고 하는 해당 값의 평균을 보고합니다. 벤치마크가 완료된 후 각 문에 대해.

기본 스크립트의 경우 출력은 다음과 유사합니다. 이:

진공 시작...끝.
거래 유형: 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 업데이트 토토 캔_accounts SET abalance = abalance + :delta WHERE 보조 = :aid;
        0.454643 토토 캔_accounts에서 균형 선택 WHERE help = :aid;
        5.528491 업데이트 토토 캔_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
        7.335435 업데이트 토토 캔_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
        0.371851 토토 캔_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
        1.212976 종료;

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

추가 타이밍 정보를 수집한다는 점에 유의하세요. 문별 대기 시간 계산에 필요한 일부 추가 머리 위. 이렇게 하면 평균 실행 속도가 느려지고 TPS를 계산했습니다. 감속 정도가 크게 달라집니다 플랫폼과 하드웨어에 따라 다릅니다. 평균 TPS 비교 대기 시간 보고가 활성화되거나 활성화되지 않은 값은 좋은 방법입니다. 타이밍 오버헤드가 중요한지 측정합니다.

F.26.9. 모범 사례

사용이 매우 쉽습니다토토 캔완전히 무의미한 생산을 하다 숫자. 다음은 유용한 정보를 얻는 데 도움이 되는 몇 가지 지침입니다. 결과.

먼저,절대로실행되는 모든 테스트를 믿으세요 단 몇 초 동안만. 다음을 사용하세요.-t또는-T실행을 마지막으로 만드는 옵션 소음을 평균화하려면 최소 몇 분 정도 소요됩니다. 어떤 경우에는 재현 가능한 숫자를 얻으려면 몇 시간이 필요할 수 있습니다. 그것은 테스트 실행을 몇 번 시도하여 확인하는 것이 좋습니다. 귀하의 숫자는 재현 가능 여부입니다.

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

기본 테스트 시나리오는 또한 방법에 매우 민감합니다. 테이블이 초기화된 지 오래되었습니다: 누적 테이블의 데드 행과 데드 스페이스로 인해 결과가 변경됩니다. 결과를 이해하려면 총계를 추적해야 합니다. 업데이트 횟수 및 진공 청소가 발생하는 시기. 자동 진공이 있는 경우 활성화하면 측정된 값에 예측할 수 없는 변화가 발생할 수 있습니다. 성능.

제한사항토토 캔이다 테스트하려고 할 때 자체적으로 병목 현상이 발생할 수 있습니다. 클라이언트 세션 수가 많습니다. 이는 다음을 통해 완화될 수 있습니다. 달리기토토 캔다른 곳에 네트워크 대기 시간은 짧지만 데이터베이스 서버의 머신 필수적일 것입니다. 여러 개를 실행하는 것이 유용할 수도 있습니다.토토 캔인스턴스 동시에 여러 클라이언트 시스템에서 동일한 시스템에 대해 데이터베이스 서버.