PG-データムテスト

6687 ワード

データベースデータムテスト


データベース・サーバのハードウェア、ソフトウェア環境で既知のパフォーマンス・ベンチマークを確立することをベンチマーク・テストと呼びます.試験の目的に応じて、圧力、性能、最大負荷に対して専門的な試験、または総合的な試験を行うことができる.システムのスループットを定量的、再現可能、比較可能な方法で測定したり、新しいハードウェアの実際の性能と信頼性をテストしたり、本番環境で問題が発生した場合、テスト環境で問題が再現されたりすることができます.

測定指標


通常、データベースのベンチマークテストで最も重要な測定指標は、スループット、応答時間(RT)、または遅延(Latency)、および同時量です.
  • スループットは、データベースの単位時間当たりのトランザクション処理能力を測定します.通常の単位はTPS(1秒当たりのトランザクション数)です.
  • 応答時間または遅延は、動作中にサービスに応答するために使用される時間を記述し、異なるアプリケーションに応じて分、秒、ミリ秒、およびマイクロ秒を単位として使用することができる.通常、応答時間の最大値、最小値、および平均値に基づいてグループ統計を行います.たとえば、90%の実行サイクルの応答時間は1ミリ秒、10%の実行サイクルの対応時間は5ミリ秒などです.これにより、比較的客観的なテスト結果が得られます.
  • コンカレント量とは、同時に動作する接続数です.

  • 異なるテストシーンでは、注目すべき指標も異なり、テスト結果を分析する際、スループット、応答時間、同時量は注目しなければならない3つの基本要素である.

    テストツール


    TPC(取引性能委員会:Transaction Processing Performance Council,http://www.tpc.org)はすでにTPC-A、TPC-B、TPC-C、TPC-D、TPC-E、TPC-Wなどの基準プログラムの標準規範を出して、その中でTPC-Cは経典のオンライン事務処理(OLT P)システムの性能と伸縮性を測定する基準テスト規範で、また比較的に新しいOLT Pテスト規範TPC-Eがあります.一般的なオープンソースデータベースのベンチマークテストツールにはbenchmarksql、sysbenchなどがあり、PostgreSQLにはベンチマークテストを実行する簡単なプログラムpgbenchが付属しています.pgbenchはクラスTPC-Bのベンチマークテストツールで、内蔵のテストスクリプトを実行したり、スクリプトファイルをカスタマイズしたりすることができます.

    pgbenchを使用してテスト


    テストデータの初期化


    pgbenchの埋め込みスクリプトには4つのテーブルが必要です:pgbench_branches 、 pgbench_tellers 、 pgbench_Accountsとpgbench_history. pgbenchを使用してテストデータを初期化すると、pgbenchは自動的にこれらのテーブルを作成し、テストデータを生成します.
    pgbench -i -s 2 -F 80 -U dev -d devdb
    
    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...
    100000 of 200000 tuples (50%) done (elapsed 0.29 s, remaining 0.29 s)
    200000 of 200000 tuples (100%) done (elapsed 0.66 s, remaining 0.00 s)
    vacuuming...
    creating primary keys...
    done.
    
    

    組み込みスクリプト

    pgbench -b list
    Available builtin scripts:
    	tpcb-like
    	simple-update
    	select-only
    

    ソースパッケージのpostgresql-12.0/src/bin/pgbench/pgbench.cには、対応する組み込みスクリプトがSQLを実行していることがわかります.
    static const BuiltinScript builtin_script[] =
    {
            {
                    "tpcb-like",
                    "",
                    "\\set aid random(1, " CppAsString2(naccounts) " * :scale)
    " "\\set bid random(1, " CppAsString2(nbranches) " * :scale)
    " "\\set tid random(1, " CppAsString2(ntellers) " * :scale)
    " "\\set delta random(-5000, 5000)
    " "BEGIN;
    " "UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
    " "SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
    " "UPDATE pgbench_tellers SET tbalance = tbalance + :delta WHERE tid = :tid;
    " "UPDATE pgbench_branches SET bbalance = bbalance + :delta WHERE bid = :bid;
    " "END;
    " }, { "simple-update", "", "\\set aid random(1, " CppAsString2(naccounts) " * :scale)
    " "\\set bid random(1, " CppAsString2(nbranches) " * :scale)
    " "\\set tid random(1, " CppAsString2(ntellers) " * :scale)
    " "\\set delta random(-5000, 5000)
    " "BEGIN;
    " "UPDATE pgbench_accounts SET abalance = abalance + :delta WHERE aid = :aid;
    " "SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
    " "INSERT INTO pgbench_history (tid, bid, aid, delta, mtime) VALUES (:tid, :bid, :aid, :delta, CURRENT_TIMESTAMP);
    " "END;
    " }, { "select-only", "", "\\set aid random(1, " CppAsString2(naccounts) " * :scale)
    " "SELECT abalance FROM pgbench_accounts WHERE aid = :aid;
    " } };

    単純テスト


    1)simple-updateテストpgbench -b simple-update -U dev devdb
    starting vacuum...end.
    transaction type: 
    scaling factor: 2
    query mode: simple
    number of clients: 1
    number of threads: 1
    number of transactions per client: 10
    number of transactions actually processed: 10/10
    latency average = 1.975 ms
    tps = 506.261467 (including connections establishing)
    tps = 611.965929 (excluding connections establishing)
    
    

    2)混合スクリプトテスト
    3種類の内蔵スクリプトブレンドを選択してテストし、スクリプト名の後に@記号を付け、@記号の後にスクリプト実行スケールの重みを付けた整数値
    pgbench -b simple-update@2 -b select-only@8 -b tpcb@0 -U dev devdb
    
    [postgres@progs pg_root]$ pgbench -b simple-update@2 -b select-only@8 -b tpcb@0 -U dev devdb
    starting vacuum...end.
    transaction type: multiple scripts
    scaling factor: 2
    query mode: simple
    number of clients: 1
    number of threads: 1
    number of transactions per client: 10
    number of transactions actually processed: 10/10
    latency average = 1.465 ms
    tps = 682.708822 (including connections establishing)
    tps = 994.907467 (excluding connections establishing)
    SQL script 1: 
     - weight: 2 (targets 20.0% of total)
     - 2 transactions (20.0% of total, tps = 136.541764)
     - latency average = 3.454 ms
     - latency stddev = 1.169 ms
    SQL script 2: 
     - weight: 8 (targets 80.0% of total)
     - 8 transactions (80.0% of total, tps = 546.167058)
     - latency average = 0.385 ms
     - latency stddev = 0.320 ms
    SQL script 3: 
     - weight: 0 (targets 0.0% of total)
     - 0 transactions (0.0% of total, tps = 0.000000)
    [postgres@progs pg_root]$
    

    カスタムスクリプトによるテスト


    1)試験表の作成
    CREATE TABLE tb1( id serial primary key, ival int);
    

    2)カスタムスクリプトの実行
    # 1.  
    echo "SELECT id, ival FROM tb1 ORDER BY id DESC LIMIT 10;" > bench_script_for_select.sql
    
    # 2.  
    pb_bench -f bench_script_for_select.sql -h 192.168.10.181 -p 1921 -U dev devdb
    
    # 3.  
    cat > bench_script_for_insert.sql <