지원되는 버전:현재 (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 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.현재버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

토토 결과

토토 결과 — 벤치마크 테스트 실행포스트그레SQL

시놉시스

토토 결과 -i [옵션...] [db이름]

토토 결과 [옵션...] [db이름]

설명

토토 결과벤치마크 테스트를 실행하기 위한 간단한 프로그램입니다.PostgreSQL. 여러 동시 데이터베이스 세션에서 동일한 일련의 SQL 명령을 계속해서 실행한 다음 평균 트랜잭션 속도(초당 트랜잭션)를 계산합니다. 기본적으로,토토 결과5개가 포함된 TPC-B를 느슨하게 기반으로 한 시나리오를 테스트합니다.선택, 업데이트삽입트랜잭션당 명령. 그러나 자체 트랜잭션 스크립트 파일을 작성하면 다른 사례를 쉽게 테스트할 수 있습니다.

일반적인 출력토토 결과다음과 같습니다:

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

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

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

토토 결과 -i [ 기타 옵션 ] db이름

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

주의

토토 결과 -i테이블 4개 생성토토 결과_accounts, 토토 결과_branches, 토토 결과_history토토 결과_tellers, 해당 이름의 기존 테이블을 모두 삭제합니다. 이러한 이름을 가진 테이블이 있는 경우 다른 데이터베이스를 사용하도록 주의하세요!

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

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

다음을 사용하여 행 수를 늘릴 수 있습니다(그리고 아마도 대부분의 경우 그렇게 해야 합니다).-s(축척계수) 옵션. 그만큼-F(fillfactor) 옵션도 이 시점에서 사용될 수 있습니다.

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

토토 결과 [ 옵션 ] db이름

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

옵션

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

초기화 옵션

토토 결과다음 명령줄 초기화 인수를 허용합니다:

-i
--초기화

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

-나init_steps
--init-steps=init_steps

일반 초기화 단계 중 선택된 세트만 수행합니다.init_steps단계당 하나의 문자를 사용하여 수행할 초기화 단계를 지정합니다. 각 단계는 지정된 순서로 호출됩니다. 기본값은dtgvp. 사용 가능한 단계는 다음과 같습니다.

d(드롭)

기존 항목 삭제토토 결과테이블.

t(테이블 생성)

표준에서 사용하는 테이블 생성토토 결과시나리오, 즉토토 결과_accounts, 토토 결과_branches, 토토 결과_history토토 결과_tellers.

g(데이터 생성)

데이터를 생성하고 표준 테이블에 로드하여 이미 존재하는 데이터를 대체합니다.

v(진공)

호출진공표준 테이블에.

p(기본 키 생성)

표준 테이블에 기본 키 색인을 생성하십시오.

f(외부 키 생성)

표준 테이블 사이에 외래 키 제약 조건을 생성합니다. (이 단계는 기본적으로 수행되지 않습니다.)

-F 채우기 요소
--fillfactor=채우기 요소

생성토토 결과_accounts, 토토 결과_tellers그리고토토 결과_branches주어진 fillfactor가 있는 테이블. 기본값은 100입니다.

-n
--진공 없음

초기화 중에는 진공청소를 수행하지 마십시오. (이 옵션은 다음을 억제합니다.v초기화 단계, 지정된 경우에도-나.)

-q
--조용함

로깅을 자동 모드로 전환하여 5초당 하나의 진행 메시지만 생성합니다. 기본 로깅은 100,000개 행마다 하나의 메시지를 인쇄하며, 이는 종종 초당 많은 줄을 출력합니다(특히 좋은 하드웨어에서).

-s scale_factor
--scale=scale_factor

축척 계수에 의해 생성된 행 수를 곱합니다. 예를 들어,-s 100다음에 10,000,000개의 행을 생성합니다토토 결과_accounts테이블. 기본값은 1입니다. 척도가 20,000 이상이면 계정 식별자(원조열)은 더 큰 정수(를 사용하도록 전환됩니다.비긴트), 계정 식별자 범위를 보유할 수 있을 만큼 충분히 커집니다.

--외래 키

표준 테이블 사이에 외래 키 제약조건을 생성합니다. (이 옵션은 다음을 추가합니다.f초기화 단계 시퀀스로 이동합니다(아직 없는 경우).)

--index-tablespace=index_tablespace

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

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

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

--기록되지 않은 테이블

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

벤치마킹 옵션

토토 결과다음 명령줄 벤치마킹 인수를 허용합니다.

-b 스크립트 이름[@weight]
--내장=스크립트 이름[@weight]

지정된 내장 스크립트를 실행할 스크립트 목록에 추가하세요. 사용 가능한 내장 스크립트는 다음과 같습니다.tpcb와 유사한, 간단한 업데이트그리고선택 전용. 내장 이름의 명확한 접두사가 허용됩니다. 특별한 이름으로목록, 내장 스크립트 목록을 표시하고 즉시 종료합니다.

선택적으로 뒤에 정수 가중치를 쓰세요@다른 스크립트와 비교하여 이 스크립트를 선택할 확률을 조정합니다. 기본 가중치는 1입니다. 자세한 내용은 아래를 참조하세요.

-c 클라이언트
--클라이언트=클라이언트

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

-C
--연결

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

-d
--디버그

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

-D varname=
--정의=varname=

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

-f 파일 이름[@weight]
--파일=파일 이름[@weight]

다음에서 읽은 트랜잭션 스크립트 추가파일 이름실행할 스크립트 목록에.

선택적으로 뒤에 정수 가중치를 쓰세요@다른 스크립트와 비교하여 이 스크립트를 선택할 확률을 조정합니다. 기본 가중치는 1입니다. (다음을 포함하는 스크립트 파일 이름을 사용하려면@문자, 모호함이 없도록 가중치를 추가합니다. 예를 들어filen@me@1.) 자세한 내용은 아래를 참조하세요.

-j 스레드
--작업=스레드

내부 작업자 스레드 수토토 결과. 다중 CPU 시스템에서는 둘 이상의 스레드를 사용하는 것이 도움이 될 수 있습니다. 클라이언트는 사용 가능한 스레드 간에 최대한 균등하게 분산됩니다. 기본값은 1입니다.

-l
--로그

각 거래에 대한 정보를 로그 파일에 기록합니다. 자세한 내용은 아래를 참조하세요.

-L 한계
--대기 시간 제한=한계

다음 이상 지속되는 거래한계밀리초는 다음과 같이 별도로 계산되고 보고됩니다.늦음.

조절이 사용될 때 (--rate=...), 일정보다 많이 지연되는 거래한계ms는 대기 시간 제한을 충족할 희망이 없으며 서버로 전혀 전송되지 않습니다. 다음과 같이 별도로 계산 및 보고됩니다.건너뛰었습니다.

-M 쿼리모드
--프로토콜=쿼리모드

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

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

  • 확장: 확장 쿼리 프로토콜을 사용합니다.

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

기본값은 단순 쿼리 프로토콜입니다. (보다PostgreSQL : 문서 : 11 : 53 장. 프론트 엔드/백엔드 스포츠 토토 결과자세한 내용은.)

-n
--진공 없음

테스트를 실행하기 전에 진공 청소를 수행하지 마십시오. 이 옵션은필요함표준 테이블을 포함하지 않는 사용자 정의 테스트 시나리오를 실행하는 경우토토 결과_accounts, 토토 결과_branches, 토토 결과_history그리고토토 결과_tellers.

-N
--일부 업데이트 건너뛰기

내장된 단순 업데이트 스크립트를 실행합니다. 의 약어-b 단순 업데이트.

-P
--진행=

진행 보고서 표시 간격초. 보고서에는 실행 시작 이후의 시간, 마지막 보고 이후의 TPS, 마지막 보고 이후의 트랜잭션 대기 시간 평균 및 표준 편차가 포함됩니다. 제한 중(-R), 지연 시간은 실제 트랜잭션 시작 시간이 아닌 트랜잭션 예정 시작 시간을 기준으로 계산되므로 평균 일정 지연 시간도 포함됩니다.

-r
--보고 대기 시간

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

-R 비율
--rate=비율

가능한 한 빨리 실행하는 대신(기본값) 지정된 속도를 목표로 하는 트랜잭션을 실행합니다. 비율은 초당 트랜잭션 수로 제공됩니다. 목표 비율이 가능한 최대 비율보다 높으면 비율 제한은 결과에 영향을 미치지 않습니다.

비율은 포아송 분포 일정 시간선을 따라 트랜잭션을 시작하여 목표로 삼습니다. 예상 시작 시간 일정은 이전 트랜잭션이 종료된 시점이 아닌 클라이언트가 처음 시작된 시점을 기준으로 앞으로 이동합니다. 이러한 접근 방식은 트랜잭션이 원래 예정된 종료 시간을 초과하면 나중에 트랜잭션이 다시 따라잡을 수 있음을 의미합니다.

조절이 활성화되면 실행 종료 시 보고된 트랜잭션 대기 시간은 예약된 시작 시간에서 계산되므로 각 트랜잭션이 이전 트랜잭션이 완료될 때까지 기다려야 했던 시간이 포함됩니다. 대기 시간을 일정 지연 시간이라고 하며 평균과 최대도 별도로 보고됩니다. 실제 트랜잭션 시작 시간에 대한 트랜잭션 지연 시간, 즉 데이터베이스에서 트랜잭션을 실행하는 데 소요된 시간은 보고된 지연 시간에서 일정 지연 시간을 빼서 계산할 수 있습니다.

만약--대기 시간 제한다음과 함께 사용됩니다.--rate, 지연 시간은 예약된 시작 시간을 기준으로 계산되므로 이전 트랜잭션이 종료될 때 이미 지연 시간 제한을 초과할 정도로 트랜잭션이 지연될 수 있습니다. 이러한 거래는 서버로 전송되지 않고 모두 건너뛰어 별도로 계산됩니다.

긴 일정 지연 시간은 시스템이 선택한 수의 클라이언트 및 스레드를 사용하여 지정된 속도로 트랜잭션을 처리할 수 없음을 나타냅니다. 평균 트랜잭션 실행 시간이 각 트랜잭션 사이의 예정된 간격보다 길면 각 연속 트랜잭션이 더 뒤쳐지고 테스트 실행이 길어질수록 일정 지연 시간이 계속 증가합니다. 그런 일이 발생하면 지정된 거래율을 줄여야 합니다.

-s scale_factor
--scale=scale_factor

지정된 배율 인수를 보고합니다.토토 결과의 출력입니다. 내장된 테스트에서는 이것이 필요하지 않습니다. 올바른 배율 인수는의 행 수를 계산하여 감지됩니다.토토 결과_branches테이블. 그러나 커스텀 벤치마크만 테스트하는 경우(-f옵션), 이 옵션을 사용하지 않으면 배율 인수가 1로 보고됩니다.

-S
--선택 전용

내장된 선택 전용 스크립트를 실행합니다. 의 약어-b 선택 전용.

-t 거래
--거래=거래

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

-T
--time=

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

-v
--진공-모두

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

--집계-간격=

집계 간격 길이(초). 다음과 함께만 사용할 수 있습니다.-l옵션. 이 옵션을 사용하면 아래에 설명된 대로 로그에 간격별 요약 데이터가 포함됩니다.

--로그-접두사=접두사

다음에 의해 생성된 로그 파일의 파일 이름 접두어 설정--로그. 기본값은토토 결과_log.

--진행-타임스탬프

진행상황을 표시할 때(옵션)-P), 실행 시작 이후의 초 수 대신 타임스탬프(Unix epoch)를 사용합니다. 단위는 초 단위이며 점 뒤의 정밀도는 밀리초입니다. 이는 다양한 도구에서 생성된 로그를 비교하는 데 도움이 됩니다.

--무작위 시드=SEED

무작위 생성기 시드를 설정합니다. 시스템 난수 생성기를 시드하여 각 스레드에 하나씩 일련의 초기 생성기 상태를 생성합니다. 값:SEED아마도:시간(기본값, 시드는 현재 시간을 기준으로 함),랜드(강력한 무작위 소스 사용, 사용 가능한 것이 없으면 실패) 또는 부호 없는 십진 정수 값. 무작위 생성기는 토토 결과 스크립트에서 명시적으로 호출됩니다(무작위...함수) 또는 암시적으로(예: 옵션--rate트랜잭션을 예약하는 데 사용합니다). 명시적으로 설정하면 시드에 사용된 값이 터미널에 표시됩니다. 허용되는 모든 값SEED환경 변수를 통해서도 제공될 수 있습니다PGBENCH_RANDOM_SEED. 제공된 시드가 가능한 모든 용도에 영향을 미치도록 하려면 이 옵션을 먼저 넣거나 환경 변수를 사용하세요.

시드를 명시적으로 설정하면 a를 재현할 수 있습니다.토토 결과난수에 관한 한 정확하게 실행됩니다. 임의의 상태가 스레드별로 관리되므로 이는 정확히 동일함을 의미합니다.토토 결과스레드당 하나의 클라이언트가 있고 외부 또는 데이터 종속성이 없는 경우 동일한 호출을 위해 실행됩니다. 통계적 관점에서 실행을 정확하게 재현하는 것은 성능 변동성을 숨기거나 이전 실행과 동일한 페이지를 히트하는 등의 방식으로 성능을 과도하게 향상시킬 수 있기 때문에 좋지 않은 생각입니다. 그러나 오류가 발생하는 까다로운 사례를 다시 실행하는 등 디버깅에도 큰 도움이 될 수 있습니다. 현명하게 사용하세요.

--샘플링 속도=비율

로그에 데이터를 쓸 때 생성되는 로그 양을 줄이기 위해 사용되는 샘플링 속도입니다. 이 옵션을 지정하면 지정된 트랜잭션 부분만 기록됩니다. 1.0은 모든 거래가 기록된다는 의미이고, 0.05는 거래의 5%만 기록된다는 의미입니다.

로그 파일을 처리할 때 샘플링 속도를 고려하는 것을 기억하십시오. 예를 들어 TPS 값을 계산할 때 그에 따라 숫자를 곱해야 합니다. 예를 들어 샘플링 레이트가 0.01이면 실제 TPS의 1/100만 얻을 수 있습니다.

공통 옵션

토토 결과다음 명령줄 공통 인수를 허용합니다:

-h 호스트 이름
--호스트=호스트 이름

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

-p 포트
--포트=포트

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

-U 로그인
--사용자 이름=로그인

연결할 사용자 이름

-V
--버전

인쇄토토 결과버전 및 종료.

-?
--도움말

다음에 관한 도움말 보기토토 결과명령줄 인수 및 종료.

참고

이것이 무엇입니까거래실제로 수행된 날짜:토토 결과?

토토 결과지정된 목록에서 무작위로 선택된 테스트 스크립트를 실행합니다. 스크립트에는 다음으로 지정된 내장 스크립트가 포함될 수 있습니다.-b및 다음으로 지정된 사용자 제공 스크립트-f. 각 스크립트에는 뒤에 지정된 상대적 가중치가 부여될 수 있습니다.@선택 확률을 변경합니다. 기본 가중치는1. 가중치가 있는 스크립트0무시됩니다.

기본 내장 트랜잭션 스크립트(다음으로도 호출됨-b tpcb와 유사)는 무작위로 선택된 트랜잭션당 7개의 명령을 실행합니다.도움, tid, 입찰그리고델타. 이 시나리오는 TPC-B 벤치마크에서 영감을 얻었지만 실제로는 TPC-B가 아니므로 이름이 붙었습니다.

  1. 시작;

  2. 업데이트 토토 결과_accounts SET abalance = abalance + :delta WHERE 지원 = :aid;

  3. 토토 결과_accounts에서 abalance 선택 WHERE 지원 = :aid;

  4. 업데이트 토토 결과_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;

  5. UPDATE 토토 결과_branches SET bbalance = bbalance + :delta WHERE bid = :bid;

  6. 토토 결과_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);

  7. END;

다음을 선택하는 경우간단한 업데이트내장 (또한-N), 4단계와 5단계는 트랜잭션에 포함되지 않습니다. 이렇게 하면 해당 테이블에 대한 업데이트 경합이 방지되지만 테스트 사례가 TPC-B와 훨씬 덜 비슷해집니다.

다음을 선택하는 경우선택 전용내장 (또한-S), 오직선택발행되었습니다.

맞춤 스크립트

토토 결과기본 트랜잭션 스크립트(위에 설명됨)를 파일에서 읽은 트랜잭션 스크립트로 대체하여 사용자 정의 벤치마크 시나리오 실행을 지원합니다(-f옵션). 이 경우에는 a거래스크립트 파일의 한 실행으로 계산됩니다.

스크립트 파일에는 세미콜론으로 끝나는 하나 이상의 SQL 명령이 포함되어 있습니다. 빈 줄과 로 시작하는 줄--무시됩니다. 스크립트 파일에는 다음도 포함될 수 있습니다.메타 명령, 다음으로 해석됨토토 결과아래에 설명된 대로 자체적으로.

참고

이전포스트그레SQL9.6, 스크립트 파일의 SQL 명령은 줄바꿈으로 종료되었으므로 여러 줄에서 계속될 수 없습니다. 이제 세미콜론은필수연속적인 SQL 명령을 분리합니다(단, SQL 명령 뒤에 메타 명령이 오면 필요하지 않습니다). 이전 버전과 새 버전 모두에서 작동하는 스크립트 파일을 생성해야 하는 경우토토 결과, 세미콜론으로 끝나는 한 줄에 각 SQL 명령을 작성해야 합니다.

스크립트 파일을 위한 간단한 변수 대체 기능이 있습니다. 변수 이름은 문자(라틴 문자가 아닌 문자 포함), 숫자, 밑줄로 구성되어야 하며 첫 번째 문자는 숫자가 아니어야 합니다. 변수는 명령줄로 설정할 수 있습니다.-D44033_44141-D명령줄 옵션에는 자동으로 사전 설정된 몇 가지 변수가 나열되어 있습니다.테이블 242. 다음을 사용하여 이러한 변수에 대해 지정된 값은-D자동 사전 설정보다 우선합니다. 일단 설정되면 다음을 작성하여 변수 값을 SQL 명령에 삽입할 수 있습니다.:변수이름. 둘 이상의 클라이언트 세션을 실행하는 경우 각 세션에는 고유한 변수 세트가 있습니다.

표 242. 자동 변수

변수 설명
클라이언트_ID 클라이언트 세션을 식별하는 고유 번호(0부터 시작)
default_seed 기본적으로 해시 함수에 사용되는 시드
random_seed 무작위 생성기 시드(덮어쓰지 않는 한-D)
규모 현재 배율 인자

스크립트 파일 메타 명령은 백슬래시로 시작합니다(\) 백슬래시-리턴을 작성하여 추가 라인으로 계속될 수 있지만 일반적으로 라인 끝까지 확장됩니다. 메타 명령에 대한 인수는 공백으로 구분됩니다. 다음 메타 명령이 지원됩니다.

\if 표현
\elif 표현
\else
\endif

이 명령 그룹은 다음과 유사하게 중첩 가능한 조건부 블록을 구현합니다.psql\if 표현. 조건식은 다음과 동일합니다.\세트, 0이 아닌 값은 true로 해석됩니다.

\세트varname 표현

변수 설정varname에서 계산된 값으로표현. 표현식에는 다음이 포함될 수 있습니다.NULL상수, 부울 상수그리고거짓, 정수 상수(예:)5432, 다음과 같은 이중 상수3.14159, 변수에 대한 참조:변수 이름, 연산자일반적인 SQL 우선 순위 및 연관성을 사용하여함수 호출, SQL사례일반 조건식및 괄호.

함수 및 대부분의 연산자가 반환됨NULL켜짐NULL입력합니다.

조건부 목적으로 0이 아닌 숫자 값은 다음과 같습니다., 숫자 값이 0이고NULL아르거짓.

마지막이 없을 때ELSE절은 a에 제공됩니다.사례, 기본값은NULL.

예:

\set ntellers 10 * :scale
\ set 보조 (1021 * random(1, 100000 * :scale)) % \
           (100000 * :규모) + 1
\set divx CASE WHEN :x < 0 THEN :y/:x ELSE NULL END
\수면번호[ 우리 | 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

내장 연산자

다음에 나열된 산술, 비트, 비교 및 ​​논리 연산자테이블 243내장되어 있습니다토토 결과다음에 나타나는 표현에 사용될 수 있습니다.\세트.

표 243. 우선순위를 높이는 토토 결과 연산자

운영자 설명 결과
또는 논리적 또는 5 또는 0
그리고 논리적이고 3과 0 거짓
아님 논리적이지 않음 거짓이 아님
IS [NOT] (NULL|TRUE|FALSE) 가치 테스트 1은 null입니다. 거짓
ISNULL|NOTNULL 널 테스트 1 notnull
= 같음 5 = 4 거짓
< 같지 않음 5 < 4
!= 같지 않음 5 != 5 거짓
< 보다 낮음 5 < 4 거짓
<= 낮거나 같음 5 <= 4 거짓
보다 큼 5 4
= 크거나 같음 5 = 4
| 정수 비트 OR 1 | 2 3
# 정수 비트 XOR 1 # 3 2
& 정수 비트 AND 1 & 3 1
~ 정수 비트 NOT ~ 1 -2
<< 정수 비트 왼쪽으로 이동 1 << 2 4
정수 비트 오른쪽으로 이동 8 2 2
+ 추가 5 + 4 9
- 뺄셈 3 - 2.0 1.0
* 곱셈 5 * 4 20
/ 나눗셈(정수는 결과를 자릅니다) 5 / 3 1
% 모듈로 3 % 2 1
- 반대 - 2.0 -2.0

내장 기능

다음에 나열된 기능표 244내장되어 있습니다토토 결과다음에 나오는 표현에 사용될 수 있습니다.\세트.

표 244. 토토 결과 함수

기능 반환 유형 설명 결과
복근(a) 동일a 절대값 복근(-17) 17
디버그(a) 동일a 인쇄astderr및 반환a 디버그(5432.1) 5432.1
더블(i) 더블 더블 캐스팅 더블(5432) 5432.0
특급(x) 더블 지수 exp(1.0) 2.718281828459045
최고(a [, ... ] ) 있는 경우 두 배a이중이고, 그렇지 않으면 정수 인수 중 가장 큰 값 가장 큰(5, 4, 3, 2) 5
해시(a [, 씨앗 ] ) 정수 별칭hash_murmur2() 해시(10, 5432) -5817877081768721676
hash_fnv1a(a [, 씨앗 ] ) 정수 FNV-1a 해시 hash_fnv1a(10, 5432) -7793829335365542153
hash_murmur2(a [, 씨앗 ] ) 정수 MurmurHash2 해시 hash_murmur2(10, 5432) -5817877081768721676
정수(x) 정수 정수로 캐스트 정수(5.4 + 3.8) 9
최소(a [, ... ] ) 있는 경우 두 배a이중이고, 그렇지 않으면 정수 인수 중 가장 작은 값 최소(5, 4, 3, 2.1) 2.1
ln(x) 더블 자연로그 ln(2.718281828459045) 1.0
모드(i, j) 정수 모듈로 모드(54, 32) 22
파이() 더블 상수 PI 값 파이() 3.14159265358979323846
펑(x, y), 힘(x, y) 더블 지수 파우(2.0, 10), 힘(2.0, 10) 1024.0
무작위(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
random_zipfian(lb, ub, 매개변수) 정수 Zipfian 분산 임의 정수[lb, ub], 아래 참조 random_zipfian(1, 10, 1.5) 사이의 정수1그리고10
sqrt(x) 더블 제곱근 sqrt(2.0) 1.414213562

무작위함수는 균등 분포를 사용하여 값을 생성합니다. 즉, 모든 값이 지정된 범위 내에서 동일한 확률로 그려집니다. 그만큼random_exponential, random_gaussian그리고random_zipfian함수에는 분포의 정확한 모양을 결정하는 추가 이중 매개변수가 필요합니다.

  • 지수 분포의 경우,매개변수빠르게 감소하는 지수 분포를 잘라서 분포를 제어합니다.매개변수, 경계 사이의 정수로 투영합니다. 정확히 말하자면,


    f(x) = exp(-매개변수 * (x - 최소) / (최대 - 최소 + 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)

    다음 값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.05.0 / 8.0) 및 중간 절반에서 95%(2.0 / 4.0) 간격(두 번째 및 세 번째 사분위수). 최소매개변수Box-Muller 변환 성능은 2.0입니다.

  • random_zipfian근사된 경계가 있는 Zipfian 분포를 생성합니다. 을 위한매개변수in (0, 1), 근사 알고리즘은 "Quickly Genelating Billion-Record Synthetic Databases", Jim Gray 외, SIGMOD 1994에서 가져왔습니다. For매개변수in (1, 1000)에서는 "Non-Uniform Random Variate Generation", Luc Devroye, p.를 기반으로 거부 방법이 사용됩니다. 550-551, Springer 1986. 매개변수 값이 1.0인 경우 분포가 정의되지 않습니다. 매개변수 값이 1.0에 가까우며 범위가 작을 경우 함수 성능이 저하됩니다.

    매개변수분포의 편향 정도를 정의합니다. 더 클수록매개변수, 간격의 시작 부분에 더 가까운 값이 더 자주 그려집니다. 0에 가까울수록매개변수는 출력 분포가 더 평평할수록(더 균일합니다). 분포는 범위가 1부터 시작한다고 가정할 때 추첨 확률의 비율이 됩니다.k그림과 비교k+1is((k+1)/k)**매개변수. 예를 들어,random_zipfian(1, ..., 2.5)값을 생성합니다1정보(2/1)**2.5 = 5.66다음보다 몇 배 더 자주2, 자체적으로 생성됨(3/2)**2.5 = 2.76다음보다 배 더 자주3등.

해시 함수해시, hash_murmur2그리고hash_fnv1a입력 값과 선택적 시드 매개변수를 허용합니다. 시드 값이 제공되지 않은 경우:default_seed사용되며 명령줄에서 설정하지 않는 한 무작위로 초기화됩니다.-D옵션. 해시 함수는 다음과 같은 임의 함수의 분포를 분산하는 데 사용될 수 있습니다.random_zipfian또는random_exponential. 예를 들어 다음 토토 결과 스크립트는 과도한 로드를 생성하는 계정이 거의 없는 소셜 미디어 및 블로그 플랫폼에 일반적으로 발생할 수 있는 실제 워크로드를 시뮬레이션합니다.

\set r random_zipfian(0, 100000000, 1.07)
\set k abs(hash(:r)) % 1000000

어떤 경우에는 서로 상관되지 않는 몇 가지 별개의 분포가 필요하며 이때 암시적 시드 매개변수가 유용합니다.

\set k1 abs(hash(:r, :default_seed + 123)) % 1000000
\set k2 abs(hash(:r, :default_seed + 321)) % 1000000

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

\set 보조 무작위(1, 100000 * :scale)
\입찰 무작위 설정(1, 1 * :scale)
\set tid 무작위(1, 10 * :scale)
\세트 델타 무작위(-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);
끝;

이 스크립트를 사용하면 트랜잭션이 반복될 때마다 무작위로 선택된 서로 다른 행을 참조할 수 있습니다. (이 예는 또한 각 클라이언트 세션이 자체 변수를 갖는 것이 중요한 이유를 보여줍니다. 그렇지 않으면 독립적으로 다른 행을 건드리지 않을 것입니다.)

트랜잭션별 로깅

와 함께-l옵션(그러나 없음--집계-간격옵션),토토 결과각 트랜잭션에 대한 정보를 로그 파일에 기록합니다. 로그 파일의 이름은 다음과 같습니다.접두사.nnn, 여기서접두사기본값은토토 결과_lognnn는의 PID입니다.토토 결과프로세스. 접두사는를 사용하여 변경할 수 있습니다.--로그 접두사옵션. 만약-j옵션은 2 이상이므로 여러 작업자 스레드가 있고 각 스레드에는 자체 로그 파일이 있습니다. 첫 번째 작업자는 표준 단일 작업자의 경우와 동일한 로그 파일 이름을 사용합니다. 다른 작업자에 대한 추가 로그 파일의 이름은 다음과 같습니다.접두사.nnn., 여기서은 1로 시작하는 각 작업자의 일련 번호입니다.

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

클라이언트_ID transaction_no 시간 script_no time_epoch time_us [ schedule_lag ]

어디에서클라이언트_ID트랜잭션을 실행한 클라이언트 세션을 나타냅니다.transaction_no해당 세션에서 실행된 트랜잭션 수를 계산합니다.시간마이크로초 단위의 총 경과된 트랜잭션 시간입니다.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_transactions sum_latency sum_latency_2 최소 지연 시간 max_latency [ sum_lag sum_lag_2 min_lag max_lag [ 건너뛰었습니다 ] ]

어디에서interval_start은 간격의 시작입니다(Unix epoch 타임스탬프로서).num_transactions은 해당 간격 내의 트랜잭션 수입니다.sum_latency은 해당 간격 내의 트랜잭션 지연 시간의 합입니다.sum_latency_2은 해당 간격 내 트랜잭션 지연 시간의 제곱의 합입니다.최소 지연 시간은 간격 내 최소 지연 시간이며max_latency은 간격 내의 최대 대기 시간입니다. 다음 필드는,sum_lag, sum_lag_2, min_lagmax_lag, 다음의 경우에만 존재합니다.--rate옵션이 사용됩니다. 각 트랜잭션이 이전 트랜잭션이 완료될 때까지 기다려야 했던 시간, 즉 각 트랜잭션의 예정된 시작 시간과 실제로 시작된 시간 간의 차이에 대한 통계를 제공합니다. 가장 마지막 필드인건너뛰었습니다은 다음과 같은 경우에만 존재합니다.--대기 시간 제한옵션도 사용됩니다. 너무 늦게 시작되었기 때문에 건너뛴 트랜잭션 수를 계산합니다. 각 트랜잭션은 커밋된 간격으로 계산됩니다.

다음은 몇 가지 출력 예입니다:

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옵션,토토 결과모든 클라이언트가 실행한 각 명령문의 경과된 트랜잭션 시간을 수집합니다. 그런 다음 벤치마크가 완료된 후 각 문의 지연 시간이라고 하는 해당 값의 평균을 보고합니다.

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

진공 시작...끝.
거래 유형: <내장: 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 업데이트 토토 결과_accounts SET abalance = abalance + :delta WHERE 보조 = :aid;
        0.454 토토 결과_accounts에서 잔액 선택 WHEREaid = :aid;
        5.528 업데이트 토토 결과_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
        7.335 업데이트 토토 결과_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
        0.371 토토 결과_history에 삽입(tid, bid,aid, delta, mtime) VALUES(:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
        1.212 종료;

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

문별 대기 시간 계산에 필요한 추가 타이밍 정보를 수집하면 약간의 오버헤드가 추가된다는 점에 유의하세요. 이렇게 하면 평균 실행 속도가 느려지고 계산된 TPS가 낮아집니다. 속도 저하 정도는 플랫폼과 하드웨어에 따라 크게 다릅니다. 지연 시간 보고가 활성화된 상태와 활성화되지 않은 상태의 평균 TPS 값을 비교하는 것은 타이밍 오버헤드가 중요한지 측정하는 좋은 방법입니다.

우수 사례

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

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

기본 TPC-B와 유사한 테스트 시나리오의 경우 초기화 배율 인수(-s)는 적어도 테스트하려는 최대 클라이언트 수만큼 커야 합니다(-c); 그렇지 않으면 대부분 업데이트 경합을 측정하게 될 것입니다. 뿐입니다-s토토 결과_branches테이블이며, 모든 트랜잭션은 그 중 하나를 업데이트하려고 합니다. 따라서-c다음을 초과하는 값-s확실히 다른 트랜잭션을 기다리면서 많은 트랜잭션이 차단될 것입니다.

기본 테스트 시나리오는 또한 테이블이 초기화된 이후 얼마나 오래되었는지에 매우 민감합니다. 테이블에 데드 행과 데드 스페이스가 누적되면 결과가 변경됩니다. 결과를 이해하려면 총 업데이트 수와 데이터 정리가 발생하는 시기를 추적해야 합니다. autovacuum이 활성화되면 측정된 성능에 예측할 수 없는 변화가 발생할 수 있습니다.

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

보안

신뢰할 수 없는 사용자가 다음을 채택하지 않은 데이터베이스에 액세스할 수 있는 경우보안 스키마 사용 패턴, 실행하지 마세요토토 결과해당 데이터베이스에 있습니다.토토 결과규정되지 않은 이름을 사용하며 검색 경로를 조작하지 않습니다.