PostgreSQL Uzaktan 벤치마크 Testi

Merhaba는 HAProxy 아키텍처에서 PostgreSQL 클러스터를 사용하여 벤치마크 테스트를 수행할 수 있습니다.

Başlamadan önce yazıyı yazarken tasarladığım ortamın hangi elemanlardan oluştuğundan bahsetmekte fayda var.
  • 1 adetHAProxy
  • 2 adet Etcd
  • Postgresql-14 노드 2개(2GB RAM, 32GB 디스크 용량)

  • Öncelikle eğer yedekli bir yapımız olmasaydı nasıl 벤치마크 testi yapabileceğimizden bahsedebiliriz. Bunun için tek bir gereksinimimiz bulunmakta, o da postgresql-contrib 파케티. PostgreSQL kurulu debian tabanlı bir sunucuda aşağıdaki gibi bağımlılığımızı kuralım.

    sudo apt install postgresql-contrib
    


    Bu paket ile beraber pgbench komutu kullanıma hazır hale gelmiş oluyor. Doğru kurulduğunu görmek için aşağıdaki gibi yardım parametresini çalıştırabiliriz.

    zeki@kubuntu21:~$ pgbench --help
    pgbench is a benchmarking tool for PostgreSQL.
    
    Usage:
      pgbench [OPTION]... [DBNAME]
    
    Initialization options:
      -i, --initialize         invokes initialization mode
      -I, --init-steps=[dtgGvpf]+ (default "dtgvp")
                               run selected initialization steps
      -F, --fillfactor=NUM     set fill factor
      -n, --no-vacuum          do not run VACUUM during initialization
      -q, --quiet              quiet logging (one message each 5 seconds)
      -s, --scale=NUM          scaling factor
      --foreign-keys           create foreign key constraints between table
    .
    ..
    ....
    


    Komutumuzun çalıştığından emin olduktan sonra işlemlerimize başlayabiliriz.

    1. Pgbench için gerekli tabloları initalize etmek



    Pgbench'i kullanmadan önce -i parametresi ile aşağıdaki gibi initalize edelim.

    sudo -u $DATABASE_USER pgbench -i -p $DATABASE_PORT -d $DATABASE_NAME
    



    sudo -u postgres pgbench -i -p 5432 -d postgres
    dropping old tables...
    NOTICE:  table "pgbench_accounts" does not exist, skipping
    NOTICE:  table "pgbench_branches" does not exist, skipping
    NOTICE:  table "pgbench_history" does not exist, skipping
    NOTICE:  table "pgbench_tellers" does not exist, skipping
    creating tables...
    generating data (client-side)...
    100000 of 100000 tuples (100%) done (elapsed 0.42 s, remaining 0.00 s)
    vacuuming...
    creating primary keys...
    done in 3.90 s (drop tables 0.01 s, create tables 0.69 s, client-side generate 0.72 s, vacuum 0.48 s, primary keys 2.01 s).
    


    2. Pgbench'i çalıştırmak



    Pgbench testimizi aşağıdaki gibi başlatabiliriz.

    sudo -u $DATABASE_USER pgbench -c $CLIENT_NUM -j $JOB_NUM -t $TRANSACTION_NUM -d $DATABASE_NAME > benchmark.results
    


    Yukarıda verilen formattaki parametreleri anlamak, yapacağımız test için de önemli olacağından öncelikle bunları anlayalım.

    $DATABASE_USER : Veri tabanı kullanıcısı, varsayılan bir veri tabanında işlem yapmak için postgres kullanılabilir.
    $CLIENT_NUM : Benchmark sırasında çalışacak eşzamanlı veritabanı sayısı.
    $JOB_NUM : Benchmark sırasında çalışacak thread sayısı.
    $TRANSACTION_NUM : Her bir clientın yapacağı transaction sayısı.
    $DATABASE_NAME : Benchmark yapılacak veri tabanı adı, varsayılan veri tabanında işlem yapmak için postgres kullanılabilir.
    


    Yukarıda yer alan formata göre örnek bir 벤치마크 çalıştırdığımızda aşağıdaki gibi görünecektir.

    sudo -u postgres pgbench -c 2 -j 2 -t 100 -d postgres  > benchmark.results
    Password: 
    pgbench: pghost: 10.0.x.5 pgport: 5432 nclients: 3 nxacts: 100 dbName: postgres
    starting vacuum...end.
    pgbench: client 0 executing script "<builtin: TPC-B (sort of)>"
    pgbench: client 0 executing \set aid
    pgbench: client 5 executing script "<builtin: TPC-B (sort of)>"
    pgbench: client 5 executing \set aid
    pgbench: client 0 executing \set bid
    pgbench: client 0 executing \set tid
    pgbench: client 5 executing \set bid
    .
    ..
    ...
    


    İşlem tamamlandığında aşağıdaki gibi bir log dosyası üretilecektir. Bu dosya içerisinde yer alan bilgiler 벤치마크 testimizin sonuçlarını ifade etmektedir. Benim kullandığım basic sistem için veriler aşağıda yer almaktadır.

    pgbench (14.2 (Debian 14.2-1.pgdg110+1))
    transaction type: <builtin: TPC-B (sort of)>
    scaling factor: 1
    query mode: simple
    number of clients: 2
    number of threads: 2
    number of transactions per client: 100
    number of transactions actually processed: 200/200
    latency average = 71.099 ms
    initial connection time = 9.067 ms
    tps = 28.129593 (without initial connection time)
    


  • Uzaktan pgbench çalıştırmak

  • Yukarıdakilere ek olarak pgbench parametrelerine yalnızca HAProxy ip adresi ve postgresql portunu eklemek yeterlidir. Aşağıdaki gibi çalıştırılabilir.

    sudo -u postgres pgbench -c 2 -j 2 -t 100 -d postgres -h 10.0.x.5 -p 5000 > benchmark.results
    Password: 
    
    pgbench: client 0 receiving
    pgbench: client 2 executing \set aid
    pgbench: client 2 executing \set bid
    pgbench: client 2 executing \set tid
    pgbench: client 1 receiving
    pgbench: client 2 executing \set delta
    pgbench: client 2 sending BEGIN;
    pgbench: client 1 sending INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (6, 1, 73134, 4493, CURRENT_TIMESTAMP);
    pgbench: client 1 receiving
    pgbench: client 2 receiving
    pgbench:pgbench: client 1 receiving
    .
    ..
    ...
    


    Çıktı olarak aşağıdaki gibi bir sonuç görebiliriz.

    pgbench (14.4 (Ubuntu 14.4-0ubuntu0.22.04.1), server 14.2 (Debian 14.2-1.pgdg110+1))
    transaction type: <builtin: TPC-B (sort of)>
    scaling factor: 1
    query mode: simple
    number of clients: 2
    number of threads: 2
    number of transactions per client: 100
    number of transactions actually processed: 200/200
    latency average = 48.882 ms
    initial connection time = 15.425 ms
    tps = 40.914923 (without initial connection time)
    

    좋은 웹페이지 즐겨찾기