pgbench
pgbench (pgbench)
pgbench는 PostgreSQL에서 벤치마크 테스트를 돌리기 위한 간단한 프로그램이에요. 같은 SQL 명령 시퀀스를 반복해서 실행하고(여러 동시 데이터베이스 세션에서 실행할 수도 있어요), 평균 트랜잭션 비율, 즉 초당 트랜잭션 수(transactions per second)를 계산해줘요. 기본적으로 pgbench는 TPC-B를 대략적으로 본뜬 시나리오를 테스트하는데, 트랜잭션마다 SELECT, UPDATE, INSERT 명령 다섯 개가 포함돼요. 물론 자신만의 트랜잭션 스크립트 파일을 작성해 다른 경우를 테스트하는 것도 쉬워요.
pgbench의 전형적인 출력은 이렇게 생겼어요.
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 10
query mode: simple
number of clients: 10
number of threads: 1
maximum number of tries: 1
number of transactions per client: 1000
number of transactions actually processed: 10000/10000
number of failed transactions: 0 (0.000%)
latency average = 11.013 ms
latency stddev = 7.351 ms
initial connection time = 45.758 ms
tps = 896.967014 (without initial connection time)
처음 일곱 줄은 가장 중요한 매개변수 설정을 보여줘요. 여섯 번째 줄은 직렬화(serialization)나 교착(deadlock) 오류가 있는 트랜잭션에 대한 최대 시도 횟수를 보고해요. 여덟 번째 줄은 완료된 트랜잭션 수와 의도한 트랜잭션 수를 보여주는데, 후자는 클라이언트 수와 클라이언트당 트랜잭션 수의 곱이에요. 실행이 끝나기 전에 실패했거나 일부 SQL 명령이 실패하지 않는 한 이 둘은 같아요. (-T 모드에서는 실제 트랜잭션 수만 인쇄돼요.) 그다음 줄은 직렬화나 교착 오류로 실패한 트랜잭션 수를 보고하고, 마지막 줄이 초당 트랜잭션 수예요.
기본 TPC-B류 트랜잭션 테스트는 미리 특정 테이블을 만들어 둬야 해요. 그 테이블들을 만들고 채우려면 pgbench를 -i(initialize) 옵션으로 실행해야 해요. (커스텀 스크립트를 테스트할 때는 이 단계가 필요 없고, 대신 테스트에 필요한 자신만의 설정을 하면 돼요.) 초기화는 이렇게 생겼어요.
pgbench -i [ other-options ] dbname
여기서 dbname은 테스트할 이미 생성된 데이터베이스 이름이에요. (서버에 연결하는 방법을 지정하려면 -h, -p, -U 옵션이 추가로 필요할 수도 있어요.)
⚠️ 주의
pgbench -i는pgbench_accounts,pgbench_branches,pgbench_history,pgbench_tellers라는 네 개의 테이블을 만들면서, 같은 이름의 기존 테이블을 파괴해요. 이런 이름을 가진 테이블이 있다면 반드시 별도의 데이터베이스를 사용하세요!
기본 '스케일 팩터(scale factor)'가 1일 때, 테이블에는 처음에 이만큼의 행이 들어있어요.
table # of rows
---------------------------------
pgbench_branches 1
pgbench_tellers 10
pgbench_accounts 100000
pgbench_history 0
행 수는 -s(스케일 팩터) 옵션으로 늘릴 수 있어요. 대부분의 목적에는 행 수를 늘리는 편이 좋아요.
필요한 설정을 마쳤다면 -i 없이 벤치마크를 실행하면 돼요.
pgbench [ options ] dbname
거의 모든 경우, 쓸모 있는 테스트를 하려면 몇 가지 옵션이 필요해요. 가장 중요한 옵션은 -c(클라이언트 수), -t(트랜잭션 수), -T(시간 제한), -f(커스텀 스크립트 파일 지정)예요. 예를 들어 100000개의 계좌 행이 있는 스케일 10 데이터베이스에서, 각각 1000개의 트랜잭션을 처리하는 10개 클라이언트로 벤치마크를 돌리고 싶다면 이렇게 실행해요.
pgbench -i -s 10 mydb
pgbench -c 10 -t 1000 mydb
더 알아보기 (Learn more)
- PostgreSQL 문서 — pgbench (전체 참조) — 초기화 옵션, 벤치마킹 옵션, 커스텀 스크립트, 로깅 전체
- PostgreSQL 문서 — PostgreSQL 클라이언트 애플리케이션 — pgbench가 속한 클라이언트 도구 목록