본문 바로가기

PostgreSQL

PostgreSQL pgbench

pgbench

PostgreSQL 상에서 벤치마킹을 수행하는 간단한 프로그램입니다.
동일한 순서의 SQL 구문들을 반복 수행하며,
Transactions per second 값을 산출합니다.

SQL 은 SELECT, UPDATE 그리고 INSERT 가 하나의 트랜잭션으로 묶여있습니다.
스크립트 파일 수정을 통해 트랜잭션의 커스터마이징이 가능합니다.

 

벤치마킹 구성과정

옵션

-s 스케일 팩터
-F fillfactor 
--> default 는 100 입니다.
--index-tablespace=index_tablespace
--tablespace=tablespace
--unlogged-tables

pgbench -i test

pgbench -i 옵션은 initialize 를 의미하며, 4개의 테이블을 생성합니다.

  1. pgbench_accounts
  2. pgbench_branches
  3. pgbench_history
  4. pgbench_tellers

위 과정에 동명 테이블은 삭제됩니다.

벤치마킹 옵션

pgbench [options] dbname
--> 벤치마킹을 시작합니다.

-c 클라이언트 수 ( default = 1 )
-t 트랜잭션 수
-T 타임리미트
-f 커스터마이징 된 스크립트
-n 초기화 이후 vacumming 을 수행하지 않습니다.
-v 테스트 테이블에 대해 모두 vacuum 을 수행
-q quiet 5초에 수행 과정에 대한 하나의 row 를 프린트
-s scale_factor
1 은 1,000,000 rows 를 의미합니다.
-d debug
-C 트랜잭션마다 새로운 커넥션을 할당한다.
-D varname=value 커스텀 스크립트의 변수에 대해 값을 할당합니다.
-f filename 커스텀 스크립트를 사용합니다.
-j threads pgbench 에서 worker threads 의 수를 지정합니다.
-l 트랜잭션 당 사용된 시간 정보를 씁니다.
-L limit limit milliseconds 를 넘어가는 트랜잭션에 대해 별도로 report 됩니다.
-S select-only
-t transactions 각 클라이언트가 수행하는 트랜잭션 수 ( 기본은 10 )
--sampling-rate=rate 예 :  0.05 = 5%

공통옵션

-h hostname
-p port
-U username
-V version

테스트

$ ./pgbench -i -U test
NOTICE: table "pgbench_history" does not exist, skipping
NOTICE: table "pgbench_tellers" does not exist, skipping
NOTICE: table "pgbench_accounts" does not exist, skipping
NOTICE: table "pgbench_branches" does not exist, skipping
creating tables...
100000 of 100000 tuples (100%) done (elapsed 0.10 s, remaining 0.00 s)
vacuum...
set primary keys...
done.

./pgbench -U test -c 10 -t 10000 -n -s 1 -j 10

$ ./pgbench -U test -c 10 -t 10000 -n -s 1 -j 10
scale option ignored, using count from pgbench_branches table (1)
transaction type: <builtin: TPC-B (sort of)>
scaling factor: 1
query mode: simple
number of clients: 10
number of threads: 10
number of transactions per client: 10000
number of transactions actually processed: 100000/100000
latency average = 4.716 ms
tps = 2120.248629 (including connections establishing)
tps = 2120.725447 (excluding connections establishing)