PG-データムテスト
6687 ワード
データベースデータムテスト
データベース・サーバのハードウェア、ソフトウェア環境で既知のパフォーマンス・ベンチマークを確立することをベンチマーク・テストと呼びます.試験の目的に応じて、圧力、性能、最大負荷に対して専門的な試験、または総合的な試験を行うことができる.システムのスループットを定量的、再現可能、比較可能な方法で測定したり、新しいハードウェアの実際の性能と信頼性をテストしたり、本番環境で問題が発生した場合、テスト環境で問題が再現されたりすることができます.
測定指標
通常、データベースのベンチマークテストで最も重要な測定指標は、スループット、応答時間(RT)、または遅延(Latency)、および同時量です.
異なるテストシーンでは、注目すべき指標も異なり、テスト結果を分析する際、スループット、応答時間、同時量は注目しなければならない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 <