지원되는 버전:현재 (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.23. 토토 캔

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

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

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

처음 6줄은 가장 중요한 몇 가지 사항을 보고합니다. 매개변수 설정. 다음 줄은 완료되고 의도된 거래(후자는 단지 클라이언트 수와 거래 수의 곱 클라이언트); 이전에 실행이 실패하지 않는 한 이는 동일합니다. 완료. 마지막 두 줄은 TPS 속도를 보고합니다. 데이터베이스 세션을 시작하는 시간을 계산하지 않고.

F.23.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.23.2데이터베이스 중에 사용되는 옵션을 표시합니다. 초기화하는 동안섹션 F.23.3쇼 벤치마크를 실행하는 동안 사용되는 옵션 및섹션 F.23.4쇼 두 경우 모두에 유용한 옵션입니다.

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

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

-F 채우기 요소

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

-i

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

-s scale_factor

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

F.23.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와 훨씬 덜 유사한 경우입니다.

-s scale_factor

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

-S

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

-t 거래

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

-T

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

-v

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

F.23.4.토토 캔공통 옵션

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

-h 호스트 이름

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

-p 포트

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

-U 로그인

연결할 사용자 이름

F.23.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.23.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.23.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.23.8. 모범 사례

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

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

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

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

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