ベンチマークは、インフラストラクチャのパフォーマンスを検出する方法です。 Sysbenchは、PostgreSQLサーバーのベンチマークを行うための優れたツールです。このブログ投稿では、sysbenchを使用してテストロードを生成する方法を紹介します。 ClusterControlによる2ノードのマスタースレーブストリーミングレプリケーションセットアップを利用します。これは、クラスター上でいくつかのアクティビティを生成し、レプリケーションが期待どおりに機能していることを確認するのにも役立ちます。
現在ここで管理されている最新バージョンのsysbenchをインストールします。 sysbenchのインストールには、Githubの公式ページで提供されているより更新されたパッケージを使用します。また、PostgreSQLダウンロードページから標準のPostgreSQL9.6バイナリを使用します。このブログ投稿で使用されているパスは、インストールしているPostgreSQLのバージョンとベンダーによって異なる場合があることに注意してください。
補足として、このブログ投稿「PostgreSQLパフォーマンスをベンチマークする方法」でpgbenchを使用したPostgreSQLのベンチマークに関する同様のブログ投稿を取り上げました。
Sysbenchのインストール
sysbenchのインストールは簡単です。 Debian / Ubuntuの場合:
$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.deb.sh | sudo bash
$ sudo apt -y install sysbench
RHEL / CentOSの場合:
$ curl -s https://packagecloud.io/install/repositories/akopytov/sysbench/script.rpm.sh | sudo bash
$ sudo yum -y install sysbench
sysbenchパッケージをインストールします:
$ yum install sysbench
バージョンを確認します:
$ sysbench --version
sysbench 1.0.15
これでsysbenchがインストールされました。
テストデータの初期化
sysbenchに精通している場合は、PostgreSQLパラメータに次のデフォルトを使用します。
- pgsql-host =localhost
- pgsql-port =5432
- pgsql-user =sbtest
- pgsql-password =password
- pgsql-db =sbtest
まず、PostgreSQL内にデータベースとユーザーを作成します:
$ su - postgres
$ psql
> CREATE USER sbtest WITH PASSWORD 'password';
> CREATE DATABASE sbtest;
> GRANT ALL PRIVILEGES ON DATABASE sbtest TO sbtest;
次に、ホストベースのアクセスファイル pg_hba.confを編集します。 :
$ vim /var/lib/pgsql/9.6/data/pg_hba.conf
そして、次の行を追加して、ユーザーsbtestが、192.168.55.0ネットワーク下のすべてのホストからデータベースsbtestに接続できるようにします。
host sbtest sbtest 192.168.55.0/24 md5
サーバーをリロードして変更を適用します:
$ /usr/pgsql-9.6/bin/pg_ctl --reload
ユーザー認証が正しく機能するかどうかをpsqlコマンドラインクライアントから確認します。
$ psql -U sbtest -h 192.168.55.61 -p 5432 -d sbtest -W
sbtestデータベースの下のサーバーにアクセスできるはずです:
$ psql -U sbtest -h 192.168.55.61 -p 5432 -W
Password for user sbtest:
Type "help" for help.
sbtest=>
「\q」を実行してターミナルを終了します。これで、次のコマンドでsysbenchを使用してデータベースを初期化できます。
$ sysbench \
--db-driver=pgsql \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=1 \
--pgsql-host=192.168.55.61 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/parallel_prepare.lua \
run
上記のコマンドは、データベース'sbtest'内の24個のテーブル(sbtest1からsbtest24)に対してテーブルごとに100,000行を生成します。スキーマ名は「public」で、これがデフォルトです。データは、 parallel_prepare.luaというスクリプトによって準備されます。 / usr / share / sysbench / tests / include/oltp_legacyで利用できます。
次のコマンドを使用して、生成されたテーブルを確認します。
$ psql -U sbtest -h 192.168.55.61 -p 5432 -W -c '\dt+\'
Password for user sbtest:
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------+-------+--------+-------+-------------
public | sbtest1 | table | sbtest | 21 MB |
public | sbtest10 | table | sbtest | 21 MB |
public | sbtest11 | table | sbtest | 21 MB |
public | sbtest12 | table | sbtest | 21 MB |
public | sbtest13 | table | sbtest | 21 MB |
public | sbtest14 | table | sbtest | 21 MB |
public | sbtest15 | table | sbtest | 21 MB |
public | sbtest16 | table | sbtest | 21 MB |
public | sbtest17 | table | sbtest | 21 MB |
public | sbtest18 | table | sbtest | 21 MB |
public | sbtest19 | table | sbtest | 21 MB |
public | sbtest2 | table | sbtest | 21 MB |
public | sbtest20 | table | sbtest | 21 MB |
public | sbtest21 | table | sbtest | 21 MB |
public | sbtest22 | table | sbtest | 21 MB |
public | sbtest23 | table | sbtest | 21 MB |
public | sbtest24 | table | sbtest | 21 MB |
public | sbtest3 | table | sbtest | 21 MB |
public | sbtest4 | table | sbtest | 21 MB |
public | sbtest5 | table | sbtest | 21 MB |
public | sbtest6 | table | sbtest | 21 MB |
public | sbtest7 | table | sbtest | 21 MB |
public | sbtest8 | table | sbtest | 21 MB |
public | sbtest9 | table | sbtest | 21 MB |
(24 rows)
これでテストデータが読み込まれました。
今日のホワイトペーパーをダウンロードするClusterControlを使用したPostgreSQLの管理と自動化PostgreSQLの導入、監視、管理、スケーリングを行うために知っておくべきことについて学ぶホワイトペーパーをダウンロードするテストロードの生成
次のセクションに示すように、sysbenchで実行できるデータベースワークロードにはさまざまな種類があります。
読み取り/書き込みロード
このコマンドは、MySQLのバージョンのsysbenchに似ています。 PostgreSQL関連のパラメータを除いて同様のパラメータを使用できます:
$ sysbench \
--db-driver=pgsql \
--report-interval=2 \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=64 \
--time=60 \
--pgsql-host=192.168.55.61 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/oltp.lua \
run
上記のコマンドは、/ usr / share / sysbench / tests / include / oltp_legacy / oltp.luaというLUAスクリプトから、ホスト192.168.55.61(マスター)。 2秒ごとに、sysbenchは中間統計を報告します(-report-interval =2 。
実行すると、次のようになります。
sysbench 1.0.15 (using bundled LuaJIT 2.1.0-beta2)
Running the test with following options:
Number of threads: 16
Report intermediate results every 2 second(s)
Initializing random number generator from current time
Initializing worker threads...
Threads started!
[ 2s ] thds: 64 tps: 0.00 qps: 466.69 (r/w/o: 406.55/28.33/31.81) lat (ms,95%): 0.00 err/s: 0.00 reconn/s: 0.00
[ 4s ] thds: 64 tps: 30.55 qps: 525.38 (r/w/o: 335.56/128.72/61.10) lat (ms,95%): 3639.94 err/s: 0.00 reconn/s: 0.00
[ 6s ] thds: 64 tps: 39.55 qps: 718.41 (r/w/o: 496.13/142.68/79.60) lat (ms,95%): 4128.91 err/s: 0.00 reconn/s: 0.00
[ 8s ] thds: 64 tps: 35.98 qps: 840.95 (r/w/o: 604.11/163.89/72.95) lat (ms,95%): 2198.52 err/s: 0.50 reconn/s: 0.00
[ 10s ] thds: 64 tps: 65.57 qps: 1314.94 (r/w/o: 912.00/271.80/131.14) lat (ms,95%): 3040.14 err/s: 0.00 reconn/s: 0.00
...
テストが進行中の場合、 pg_activityを使用してPostgreSQLアクティビティを監視できます。 またはpg_top 、sysbenchによって報告された中間統計を確認します。別の端末で、次の操作を行います。
$ su - postgres
$ pg_activity
PostgreSQL 9.6.9 - postgres1.local - [email protected]:5432/postgres - Ref.: 2s
Size: 654.62M - 7.67K/s | TPS: 74
Mem.: 39.10% - 382.72M/979.68M | IO Max: 3395/s
Swap: 0.20% - 3.57M/2.00G | Read : 8.36M/s - 2141/s
Load: 20.20 6.02 2.44 | Write: 2.54M/s - 650/s
RUNNING QUERIES
PID DATABASE USER CLIENT CPU% MEM% READ/s WRITE/s TIME+ W IOW state Query
5130 sbtest sbtest 192.168.55.61 1.0 2.8 791.57K 3.84K 0.788732 N N active SELECT c FROM sbtest7 WHERE id BETWEEN 33195
AND 33294
...
pg_stat_replication を確認することにより、レプリケーションストリームと同様に マスターサーバー上のテーブル:
$ su - postgres
$ watch -n1 'psql -xc "select * from pg_stat_replication"'
Every 1.0s: psql -xc "select * from pg_stat_replication" Tue Jul 31 13:12:08 2018
-[ RECORD 1 ]----+------------------------------
pid | 3792
usesysid | 16448
usename | slave
application_name | walreceiver
client_addr | 192.168.55.62
client_hostname |
client_port | 44654
backend_start | 2018-07-30 13:41:41.707514+08
backend_xmin |
state | streaming
sent_location | 0/60933D78
write_location | 0/60933D78
flush_location | 0/60933D78
replay_location | 0/60933D78
sync_priority | 0
sync_state | async
上記の「watch」コマンドは、1秒ごとにpsqlコマンドを実行します。レプリケーションが発生すると、それに応じて「*_location」列が更新されるはずです。
テストの最後に、概要が表示されます。
SQL statistics:
queries performed:
read: 67704
write: 19322
other: 9682
total: 96708
transactions: 4830 (79.34 per sec.)
queries: 96708 (1588.53 per sec.)
ignored errors: 6 (0.10 per sec.)
reconnects: 0 (0.00 per sec.)
General statistics:
total time: 60.8723s
total number of events: 4830
Latency (ms):
min: 4.52
avg: 799.70
max: 8082.70
95th percentile: 2279.14
sum: 3862532.62
Threads fairness:
events (avg/stddev): 75.4688/7.39
execution time (avg/stddev): 60.3521/0.20
上記の要約は、PostgreSQLデータベースサーバーが64のワーカースレッドで平均して1秒あたり約80トランザクション、1秒あたり約1588クエリを処理できることを示しています。
読み取り専用ロード
読み取り専用テストの場合、同じコマンドを使用できますが、LUAスクリプトを select.luaに変更します。 、 select_random_points.lua 、 select_random_ranges.lua またはoltp_simple.lua :
$ sysbench \
--db-driver=pgsql \
--report-interval=2 \
--oltp-table-size=100000 \
--oltp-tables-count=24 \
--threads=64 \
--time=60 \
--pgsql-host=192.168.55.62 \
--pgsql-port=5432 \
--pgsql-user=sbtest \
--pgsql-password=password \
--pgsql-db=sbtest \
/usr/share/sysbench/tests/include/oltp_legacy/select.lua \
run
上記のコマンドは、 select.luaという読み取り専用のワークロードを実行します PostgreSQLスレーブサーバー(ストリーミングレプリケーション)に対して、64個のワーカースレッドを持つ192.168.55.62。
その他の負荷
このディレクトリ/usr / share / sysbench / tests / include / oltp_legacy の下にリストされているように、sysbenchで生成できる他の多くのOLTPワークロードがあります。 :
$ ls -1 /usr/share/sysbench/tests/include/oltp_legacy/
bulk_insert.lua
common.lua
delete.lua
insert.lua
oltp.lua
oltp_simple.lua
parallel_prepare.lua
select.lua
select_random_points.lua
select_random_ranges.lua
update_index.lua
update_non_index.lua
同様のコマンドを使用し、LUAスクリプトへのパスを変更してロードすることができます。
最終的な考え
sysbenchを使用して、PostgreSQLサーバー(およびMySQL)のテストロードを生成できます。最良のベンチマークは実際のデータとアプリケーションを使用することですが、それが常に可能であるとは限らないことに注意してください。また、急速に進化する新しいアプリケーションになる可能性もあります。 sysbenchによって生成される負荷は、実際のOLTPワークロードを表していない可能性がありますが、それで十分な場合があります。