Enterprise Postgresのスケールアウト機能の動作を検証
PostgreSQLインサイド

富士通のデータベース「FUJITSU Software Enterprise Postgres 14 SP1(以降、Enterprise Postgres 14 SP1と略す)」が2022年8月にリリースされました。Enterprise Postgres 14 SP1では、スケールアウト機能を提供しています。

本記事では、Enterprise Postgres 14 SP1に興味をお持ちの方に、スケールアウト機能のセットアップ手順をご説明し、その利用効果を理解していただくことを目的としています。また、2台および3台でスケールアウト機能を使用した際の構成や設定を記載した本記事とEnterprise Postgres 14 SP1のマニュアルを合わせて読むことで、スケールアウト機能の設計やセットアップに関してより理解できます。

Enterprise Postgres 14 SP1のスケールアウト機能のセットアップ手順および利用効果を以下の流れで解説します。

なお、「Enterprise Postgresの概要」を知りたい方には、以下の製品サイトがお薦めです。

また、スケールアウト機能紹介や技術解説については、以下の記事がお薦めです。

スケールアウト機能の動作検証の概要

Enterprise Postgres 14 SP1のスケールアウト機能における動作検証の概要をご紹介します。

目的

本記事でご紹介する動作検証の目的は、以下の3つです。

  1. Enterprise Postgres 14 SP1のスケールアウト機能のセットアップ手順を理解
  2. データノードの追加手順を理解
  3. データノード追加による処理能力の向上を確認

モデル

本記事では、以下の業務モデルを前提にEnterprise Postgres 14 SP1のスケールアウト機能を検証します(図1参照)。

  • 同一系統業務を支店ごとに実施する。
  • 今後も同様に支店ごとに業務が追加される。
  • 支店ごとに独立した業務を継続する。ただし、マスター情報は一元管理する。

図1 スケールアウト機能の検証モデル

図1 スケールアウト機能の検証モデル

検証内容

本記事では、Enterprise Postgres 14 SP1のスケールアウト機能を以下の3項目で検証します。

  1. 2つのデータノード構成で構築でき、スケールアウト機能が動作すること
  2. 構築したクラスタシステムにデータノードを追加でき、スケールアウト機能が動作すること
  3. データノードの数に比例して処理能力が向上すること

本記事の後半で、上記項目の手順および結果をご紹介します。

環境

Enterprise Postgres 14 SP1のスケールアウト機能を検証する環境は、以下となります(図2と図3参照)。

図2 2つのデータノード構成時の環境

図2 2つのデータノード構成時の環境

図3 3つのデータノード構成時の環境

図3 3つのデータノード構成時の環境

上記4台のソフトウェア環境とハードウェア環境は、以下となります。

  • [ソフトウェア環境]
    OS:Red Hat Enterprise Linux release 8.6(Ootpa)
  • [VM#0のハードウェア環境]
    コア数:2
    CPUのモデル名:Intel® Xeon® Platinum 8260 CPU @ 2.40GHz
    メモリー:4GB
    ディスク容量:120GB
  • [VM#1/VM#2/VM#3のハードウェア環境]
    コア数:4
    CPUのモデル名:Intel® Xeon® Platinum 8260 CPU @ 2.40GHz
    メモリー:8GB
    ディスク容量:120GB

また、検証には以下のテーブルを使用します(図4と図5参照)。

図4 テーブル構成

図4 テーブル構成

図5 テーブルのER図

図5 テーブルのER図

「業務アプリケーション」および「テーブル構成」は、JdbcRunnerのTPC-Cをもとにしています。業務アプリケーションとして利用するJdbcRunnerのTPC-Cの処理内容やテーブル構成の詳細に関しては、以下JdbcRunnerのオフィシャルページをご覧ください。

参考

2つのデータノード構成(冗長化あり)でスケールアウト機能を検証

ここでは、2つのデータノード構成のセットアップ手順と性能検証手順について説明します。
スケールアウト機能を検証するために、Enterprise Postgres 14 SP1を用いて、図6から図8の環境を構築します。

図6 2つのデータノード構成時のVM#0環境

No. プロセス ポート ディレクトリー
1 Scale out Controllerプロセス 30000 /home/fsepuser/scalout_controller
2 Mirroring Controller裁定プロセス 27542 /home/fsepuser/mc_dir/arbiter1
3 Mirroring Controller裁定プロセス 27543 /home/fsepuser/mc_dir/arbiter2
4 Mirroring Controller裁定プロセス 27544 /home/fsepuser/mc_dir/arbiter3
5 Connection Managerプロセス 27546 /home/fsepuser/app_server_conmgr

図6 2つのデータノード構成時のVM#0環境

図7 2つのデータノード構成時のVM#1環境

No. プロセス ポート ディレクトリー
6 Mirroring Controller裁定プロセス 27540
27541
/home/fsepuser/mc_dir
7 watchdogプロセス 27545
8 Connection Managerプロセス 27546 /home/fsepuser/conmgr_primary_dir
9 Connection Managerプロセス 27549 /home/fsepuser/conmgr_primary2_dir
10 27500 /database/inst2
11 Mirroring Controller裁定プロセス 27542
27543
/home/fsepuser/mc_datanode1_dir
12 watchdogプロセス 27548
13 Connection Managerプロセス 27547 /home/fsepuser/conmgr_datanode1_dir
14 27501 /database/inst3
15 Mirroring Controller裁定プロセス 27644
27645
/home/fsepuser/mc_datanode2_dir
16 watchdogプロセス 27648
17 Connection Managerプロセス 27647 /home/fsepuser/conmgr_datanode2_dir
18 27601 /database/inst4

図7 2つのデータノード構成時のVM#1環境

図8 2つのデータノード構成時のVM#2環境

No. プロセス ポート ディレクトリー
19 Mirroring Controller裁定プロセス 27540
27541
/home/fsepuser/mc_dir
20 watchdogプロセス 27545
21 Connection Managerプロセス 27546 /home/fsepuser/conmgr_standby_dir
22 Connection Managerプロセス 27549 /home/fsepuser/conmgr_standby2_dir
23 27500 /database/inst2
24 Mirroring Controller裁定プロセス 27542
27543
/home/fsepuser/mc_datanode1_dir
25 watchdogプロセス 27548
26 Connection Managerプロセス 27547 /home/fsepuser/conmgr_datanode1_dir
27 27501 /database/inst3
28 Mirroring Controller裁定プロセス 27644
27645
/home/fsepuser/mc_datanode2_dir
29 watchdogプロセス 27648
30 Connection Managerプロセス 27647 /home/fsepuser/conmgr_datanode2_dir
31 27601 /database/inst4

図8 2つのデータノード構成時のVM#2環境

スケールアウト機能のセットアップ手順

2つのデータノード構成でスケールアウト機能を検証するために、Enterprise Postgres 14 SP1を用いて環境を構築します。

  • ① 設計
  • ② Enterprise Postgres 14 SP1をインストール
  • ③ スケールアウト機能をセットアップ
  • ④ 動作確認

以降で、上記の各手順をご紹介します。

① 設計

まず、Enterprise Postgres 14 SP1のスケールアウト機能をセットアップするために以下を設計してください。

  • インスタンス管理者ユーザー(fsepuserとする)
  • 図6から図8内の各プロセスが利用するポート番号
  • 図6から図8内の各プロセスが利用するディレクトリー

② Enterprise Postgres 14 SP1をインストール

次に、以下からEnterprise Postgres 14 SP1の体験版をダウンロードします。

ダウンロード後、マニュアルを参考にし、各サーバーにEnterprise Postgres 14 SP1をインストールしてください。

[VM#0の場合]

  • インストール機能:
    • サーバー機能
    • クライアント機能
    • サーバーアシスタント機能

参照マニュアル

[VM#1とVM#2の場合]

  • インストール機能:
    • サーバー機能
    • クライアント機能

参照マニュアル:

③ スケールアウト機能をセットアップ

続いて、以下のマニュアルを参照しEnterprise Postgres 14 SP1のスケールアウト機能をセットアップしましょう。

本検証では図9の流れでセットアップを実施します。

図9 2つのデータノード構成でスケールアウト機能をセットアップする流れ

図9 2つのデータノード構成でスケールアウト機能をセットアップする流れ

裁定サーバーのセットアップ「⑤Connection Managerプロセスのセットアップ」で作成する設定ファイルconmgr.confには、注意が必要です。裁定サーバー上のconmgr.confは、中央管理ノードやデータノードで作成するconmgr.confと異なり、全ノード分の情報を設定する必要があります。本セットアップで作成した設定ファイルconmgr.confは、以下となります。

Connection Managerの設定ファイルであるconmgr.confの一部抜粋

port=27546
#中央管理ノード(プライマリ)の情報
node_name0='COORDINATOR'
backend_host0='sv1'
backend_port0=27500
watchdog_port0=27545
#中央管理ノード(スタンバイ)の情報
node_name1='COORDINATOR'
backend_host1='sv2'
backend_port1=27500
watchdog_port1=27545
・
・
・
#データノード2(プライマリ)の情報
node_name4='datanode2'
backend_host4='sv2'
backend_port4=27601
watchdog_port4=27648
#データノード2(スタンバイ)の情報
node_name5='datanode2'
backend_host5='sv1'
backend_port5=27601
watchdog_port5=27648

④ 動作確認

最後に、Enterprise Postgres 14 SP1のスケールアウト機能のセットアップが完了したことを確認するために、裁定サーバー上で以下のコマンドを順番に実行します。

# su – fsepuser <enter>
$ cm_ctl status -D /home/fsepuser/app_server_conmgr/ -i all <enter>
conmgr_status:
status           pid
ready            2110956

instance_information:
addr                                    port  database_attr node_name
sv2                                     27500 standby       COORDINATOR
sv1                                     27500 primary       COORDINATOR
sv2                                     27501 standby       datanode1
sv1                                     27501 primary       datanode1
sv1                                     27601 standby       datanode2
sv2                                     27601 primary       datanode2

application_information:
addr                                    port  pid        connected_time

shard_information:
shard_name       node_name
shard_datanode2  datanode2
shard_datanode1  datanode1

コマンド実行後、「shard_datanode1」と「shard_datanode2」が表示された場合、「Enterprise Postgres 14 SP1のスケール機能のセットアップが正常に完了した」と判断できます。

性能検証の手順

以下の流れで「2つのデータノード構成でスケールアウト機能の性能検証」を実施します。

  • ⑤ 性能検証ツールのダウンロードと修正
  • ⑥ 検証用データを作成
  • ⑦ 作成したデータをインポート
  • ⑧ スケールアウト機能の性能検証を実施

上記手順をご紹介します。

⑤ 性能検証ツールのダウンロードと修正

性能検証には、汎用データベース負荷テストツール「JdbcRunner」を使います。
以下からJdbcRunnerバージョン:1.3をダウンロードしてください。

ダウンロード後、裁定サーバー上でJdbcRunnerを展開します。
その後、scripts/tpcc.jsをコピーし、表1の箇所を修正した「tpcc_scaleout_datanode1.js」「tpcc_scaleout_datanode2.js」を作成しましょう。

表1 tpcc.jsの修正箇所

行番号 修正前 修正後
16 // var jdbcUrl = "jdbc:postgresql://localhost:5432/tpcc"; var jdbcUrl = "jdbc:postgresql://localhost:27546/postgres?shardName=shard_datanode1"; // データノード2側の性能検証をする場合は「shard_datanode2」を設定すること
18 var jdbcUser = "tpcc"; var jdbcUser = "fsepuser";
19 var jdbcPass = "tpcc"; var jdbcPass = "fsepuser";
26 var logDir = "logs"; var logDir = "logs";
var PartitionKey = 1;//データノード2側の性能検証をする場合は2を設定すること
188 "(o_id, o_d_id, o_w_id, o_c_id, o_entry_d, " "(o_id, o_d_id, o_w_id, o_c_id, o_cp_id, o_entry_d, "
190 "VALUES ($int, $int, $int, $int, $timestamp, " "VALUES ($int, $int, $int, $int, $int, $timestamp, "
192 rs02[0][1], d_id, w_id, c_id, new Date(), rs02[0][1], d_id, w_id, c_id, PartitionKey, new Date(),
196 + "(no_o_id, no_d_id, no_w_id) "
+ "VALUES ($int, $int, $int)",
rs02[0][1], d_id, w_id);
+ "(no_o_id, no_d_id, no_w_id, no_cp_id) "
+ "VALUES ($int, $int, $int, $int)",
rs02[0][1], d_id, w_id, PartitionKey);
243 + "(ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, " + "(ol_o_id, ol_d_id, ol_w_id, ol_number, ol_cp_id, ol_i_id, "
246 + "VALUES ($int, $int, $int, $int, $int, " + "VALUES ($int, $int, $int, $int, $int, $int, "
249 rs02[0][1], d_id, w_id, index + 1, i_id[order[index]], rs02[0][1], d_id, w_id, index + 1, PartitionKey, i_id[order[index]],
411 + "(h_c_id, h_c_d_id, h_c_w_id, h_d_id, h_w_id, " + "(h_c_id, h_c_d_id, h_c_w_id, h_d_id, h_w_id, h_cp_id,"
413 + "VALUES ($int, $int, $int, $int, $int, " + "VALUES ($int, $int, $int, $int, $int, $int,"
415 c_id, c_d_id, c_w_id, d_id, w_id, c_id, c_d_id, c_w_id, d_id, w_id, PartitionKey,

⑥ 検証用データを作成

次に、ダウンロードしたJdbcRunnerを用いて、性能検証で利用するデータを作成します。JdbcRunnerのオフィシャルページでテストデータの作成方法が説明されていますのでご覧ください。

作成後、図5内に記載された「パーティションキー」のカラムを該当テーブルに追加してください。
追加後、データノード1用のテストデータを作成するために、パーティションキーカラムに「1」を挿入し、CSVとしてエクスポートします。
その後、データノード2用のテストデータを作成するために、パーティションキーカラムに「2」を挿入し、CSVとしてエクスポートします。

⑦ 作成したデータをインポート

続いて、図4のようにシャードとレプリケーションテーブルを作成します。

テーブル作成後、作成したデータを各データノードにインポートします。

Enterprise Postgresが提供する高速データロード機能(pgx_loaderコマンド)を使った例

$ pgx_loader load -j 3 -c "copy warehouse from '/tmp/warehouse.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy district from '/tmp/district.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy history from '/tmp/history.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy stock from '/tmp/stock.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy orders from '/tmp/orders.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy new_orders from '/tmp/new_orders.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy order_line from '/tmp/order_line.csv' delimiter ',' csv" -d postgres -h sv1 -p 27501; <enter>
$ pgx_loader load -j 3 -c "copy customer from '/tmp/customer.csv' delimiter ',' csv" -d postgres -h sv1 -p 27500; <enter>
$ pgx_loader load -j 3 -c "copy item from '/tmp/item.csv' delimiter ',' csv" -d postgres -h sv1 -p 27500; <enter>

pgx_loaderコマンドの詳しい使い方に関しては、以下を参照してください。

⑧ スケールアウト機能の性能検証を実施

最後に、裁定サーバー上で以下のコマンドを実行することで、Enterprise Postgres 14 SP1のスケールアウト機能の性能検証を実施できます。

# 環境変数を設定
$ export CLASSPATH=/ext/jdbcrunner-1.3/jdbcrunner-1.3-nojdbc.jar:/opt/fsepv14client64/jdbc/lib/postgresql-jdbc42.jar:$CLASSPATH <enter>

# 性能検証
$ java JR scripts/tpcc_scaleout_datanode1.js -nAgents 100 & <enter>
$ java JR scripts/tpcc_scaleout_datanode2.js -nAgents 100 & <enter>

上記のコマンドを順番に実行することで、ログファイルjdbcrunner.logと4つのCSVファイルが作成されます。

以上の手順により、2つのデータノード構成でEnterprise Postgres 14 SP1のスケールアウト機能を検証できました。
性能検証の結果に関しては、本記事の後半に掲載します。

3つのデータノード構成(冗長化あり)でスケールアウト機能を検証

ここでは、2つのデータノード構成にデータノードを1つ追加する場合のセットアップ手順と性能検証手順について説明します。
スケールアウト機能の拡張性を検証するために、Enterprise Postgres 14 SP1を用いて、図10から図13の環境を構築します。

図10 3つのデータノード構成時のVM#0環境

No. プロセス ポート ディレクトリー
1 Scale out Controllerプロセス 30000 /home/fsepuser/scalout_controller
2 Mirroring Controller裁定プロセス 27542 /home/fsepuser/mc_dir/arbiter1
3 Mirroring Controller裁定プロセス 27543 /home/fsepuser/mc_dir/arbiter2
4 Mirroring Controller裁定プロセス 27544 /home/fsepuser/mc_dir/arbiter3
5 Mirroring Controller裁定プロセス 28545 /home/fsepuser/mc_dir/arbiter_for_sv3
6 Connection Managerプロセス 27546 /home/fsepuser/app_server_conmgr

図10 3つのデータノード構成時のVM#0環境

図11 3つのデータノード構成時のVM#1環境

No. プロセス ポート ディレクトリー
7 Mirroring Controller裁定プロセス 27540
27541
/home/fsepuser/mc_dir
8 watchdogプロセス 27545
9 Connection Managerプロセス 27546 /home/fsepuser/conmgr_primary_dir
10 Connection Managerプロセス 27549 /home/fsepuser/conmgr_primary2_dir
11 Connection Managerプロセス 28546 /home/fsepuser/conmgr_primary_sv3_dir
12 27500 /database/inst2
13 Mirroring Controller裁定プロセス 27542
27543
/home/fsepuser/mc_datanode1_dir
14 watchdogプロセス 27548
15 Connection Managerプロセス 27547 /home/fsepuser/conmgr_datanode1_dir
16 27501 /database/inst3
17 Mirroring Controller裁定プロセス 27644
27645
/home/fsepuser/mc_datanode2_dir
18 watchdogプロセス 27648
19 Connection Managerプロセス 27647 /home/fsepuser/conmgr_datanode2_dir
20 27601 /database/inst4

図11 3つのデータノード構成時のVM#1環境

図12 3つのデータノード構成時のVM#2環境

No. プロセス ポート ディレクトリー
21 Mirroring Controller裁定プロセス 27540
27541
/home/fsepuser/mc_dir
22 watchdogプロセス 27545
23 Connection Managerプロセス 27546 /home/fsepuser/conmgr_standby_dir
24 Connection Managerプロセス 27549 /home/fsepuser/conmgr_standby2_dir
25 Connection Managerプロセス 28546 /home/fsepuser/conmgr_standby_sv3_dir
26 27500 /database/inst2
27 Mirroring Controller裁定プロセス 27542
27543
/home/fsepuser/mc_datanode1_dir
28 watchdogプロセス 27548
29 Connection Managerプロセス 27547 /home/fsepuser/conmgr_datanode1_dir
30 27501 /database/inst3
31 Mirroring Controller裁定プロセス 27644
27645
/home/fsepuser/mc_datanode2_dir
32 watchdogプロセス 27648
33 Connection Managerプロセス 27647 /home/fsepuser/conmgr_datanode2_dir
34 27601 /database/inst4

図12 3つのデータノード構成時のVM#2環境

図13 3つのデータノード構成時のVM#3環境

No. プロセス ポート ディレクトリー
35 Mirroring Controller裁定プロセス 28644
28645
/home/fsepuser/mc_datanode3_dir
36 watchdogプロセス 27748
37 Connection Managerプロセス 27747 /home/fsepuser/conmgr_datanode3_dir
38 27701 /database/inst5
39 Mirroring Controller裁定プロセス 27644
27645
/home/fsepuser/mc_datanode2_dir
40 watchdogプロセス 27648
41 Connection Managerプロセス 27647 /home/fsepuser/conmgr_datanode2_dir
42 27601 /database/inst4

図13 3つのデータノード構成時のVM#3環境

データノードを追加する手順

3つのデータノード構成でスケールアウト機能を検証するために、Enterprise Postgres 14 SP1を用いて環境を構築しましょう。

  • ① 設計
  • ② Enterprise Postgres 14 SP1をインストール
  • ③ 追加データノードをセットアップ
  • ④ 動作確認

以降で、上記手順をご紹介します。

① 設計

まず、データノードを追加するために、「図10から図13内の各プロセスが利用するポート番号」「図10から図13内の各プロセスが利用するディレクトリー」を設計してください。

以降の手順では、以下を想定として説明します。

  • 図10から図13内に記載されたポート番号を使用する
  • 図10から図13内に記載されたディレクトリーを使用する

② Enterprise Postgres 14 SP1をインストール

次に、追加データノード用のサーバーにEnterprise Postgres 14 SP1のサーバー機能とクライアント機能をインストールしてください。

③ 追加データノードをセットアップ

続いて、以下のマニュアルを参照しEnterprise Postgres 14 SP1のスケールアウト機能をセットアップしましょう。

本検証では、図14の流れでセットアップを実施します。

図14 追加データノードをセットアップする流れ

図14 追加データノードをセットアップする流れ

④ 動作確認

最後に、セットアップが完了したことを確認するために、裁定サーバー上で以下のコマンドを順番に実行します。

# su – fsepuser <enter>
$ cm_ctl status -D /home/fsepuser/app_server_conmgr/ -i all <enter>
conmgr_status:
status           pid
ready            2110956

instance_information:
addr                                    port  database_attr node_name
sv2                                     27500 standby       COORDINATOR
sv1                                     27500 primary       COORDINATOR
sv1                                     27701 standby       datanode3
sv3                                     27701 primary       datanode3
sv2                                     27501 standby       datanode1
sv1                                     27501 primary       datanode1
sv3                                     27601 standby       datanode2
sv2                                     27601 primary       datanode2

application_information:
addr                                    port  pid        connected_time

shard_information:
shard_name       node_name
shard_datanode2  datanode2
shard_datanode1  datanode1
shard_datanode3  datanode3

コマンド実行後、「shard_datanode3」が表示された場合、「追加データノードでEnterprise Postgres 14 SP1のスケールアウト機能を正常にセットアップできた」と判断できます。

性能検証の手順

3つのデータノード構成でスケールアウト機能の性能検証をするために、以下の手順を実施します。

  • ⑤ 性能検証ツールの修正
  • ⑥ 検証用データを作成
  • ⑦ 作成したデータをインポート
  • ⑧ スケールアウト機能の性能検証を実施

上記手順をご紹介します。

⑤ 性能検証ツールの修正

scripts/tpcc.jsをコピーし、表2の箇所を修正した「tpcc_scaleout_datanode3.js」を作成しましょう。

表2 tpcc.jsの修正箇所

行番号 修正前 修正後
16 // var jdbcUrl = "jdbc:postgresql://localhost:5432/tpcc"; var jdbcUrl = "jdbc:postgresql://localhost:27546/postgres?shardName=shard_datanode3";
18 var jdbcUser = "tpcc"; var jdbcUser = "fsepuser";
19 var jdbcPass = "tpcc"; var jdbcPass = "fsepuser";
26 var logDir = "logs"; var logDir = "logs";
var PartitionKey = 3;
188 "(o_id, o_d_id, o_w_id, o_c_id, o_entry_d, " "(o_id, o_d_id, o_w_id, o_c_id, o_cp_id, o_entry_d, "
190 "VALUES ($int, $int, $int, $int, $timestamp, " "VALUES ($int, $int, $int, $int, $int, $timestamp, "
192 rs02[0][1], d_id, w_id, c_id, new Date(), rs02[0][1], d_id, w_id, c_id, PartitionKey, new Date(),
196 + "(no_o_id, no_d_id, no_w_id) "
+ "VALUES ($int, $int, $int)",
rs02[0][1], d_id, w_id);
+ "(no_o_id, no_d_id, no_w_id, no_cp_id) "
+ "VALUES ($int, $int, $int, $int)",
rs02[0][1], d_id, w_id, PartitionKey);
243 + "(ol_o_id, ol_d_id, ol_w_id, ol_number, ol_i_id, " + "(ol_o_id, ol_d_id, ol_w_id, ol_number, ol_cp_id, ol_i_id, "
246 + "VALUES ($int, $int, $int, $int, $int, " + "VALUES ($int, $int, $int, $int, $int, $int, "
249 rs02[0][1], d_id, w_id, index + 1, i_id[order[index]], rs02[0][1], d_id, w_id, index + 1, PartitionKey, i_id[order[index]],
411 + "(h_c_id, h_c_d_id, h_c_w_id, h_d_id, h_w_id, " + "(h_c_id, h_c_d_id, h_c_w_id, h_d_id, h_w_id, h_cp_id,"
413 + "VALUES ($int, $int, $int, $int, $int, " + "VALUES ($int, $int, $int, $int, $int, $int,"
415 c_id, c_d_id, c_w_id, d_id, w_id, c_id, c_d_id, c_w_id, d_id, w_id, PartitionKey,

⑥ 検証用データを作成

次に、ダウンロードしたJdbcRunnerを用いて、性能検証で利用するデータを作成します。
作成後、図5内に記載された「パーティションキー」のカラムを該当テーブルに追加してください。
その後、データノード3用のテストデータを作成するために、パーティションキーカラムに「3」を挿入し、CSVとしてエクスポートします。

⑦ 作成したデータをインポート

続いて、図4のようにシャードを作成します。

検証用テーブル作成後、作成したデータをデータノード3にインポートします。

Enterprise Postgresが提供する高速データロード機能(pgx_loaderコマンド)を使った例

$ pgx_loader load -j 3 -c "copy warehouse from '/tmp/warehouse.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>
$ pgx_loader load -j 3 -c "copy district from '/tmp/district.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>
$ pgx_loader load -j 3 -c "copy history from '/tmp/history.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>
$ pgx_loader load -j 3 -c "copy stock from '/tmp/stock.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>
$ pgx_loader load -j 3 -c "copy orders from '/tmp/orders.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>
$ pgx_loader load -j 3 -c "copy new_orders from '/tmp/new_orders.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>
$ pgx_loader load -j 3 -c "copy order_line from '/tmp/order_line.csv' delimiter ',' csv" -d postgres -h sv3 -p 27701; <enter>

⑧ スケールアウト機能の性能検証を実施

最後に、Enterprise Postgres 14 SP1のスケールアウト機能の性能検証を実施するために、裁定サーバー上で以下のコマンドを実行します。

# 環境変数を設定
$ export CLASSPATH=/ext/jdbcrunner-1.3/jdbcrunner-1.3-nojdbc.jar:/opt/fsepv14client64/jdbc/lib/postgresql-jdbc42.jar:$CLASSPATH <enter>

# 性能検証
$ java JR scripts/tpcc_scaleout_datanode1.js -nAgents 100 & <enter>
$ java JR scripts/tpcc_scaleout_datanode2.js -nAgents 100 & <enter>
$ java JR scripts/tpcc_scaleout_datanode3.js -nAgents 100 & <enter>

上記のコマンドを順番に実行することで、ログファイルjdbcrunner.logと6つのCSVファイルが作成されます。

以上の手順により、3つのデータノード構成でEnterprise Postgres 14 SP1のスケールアウト機能を検証できました。
性能検証の結果に関しては、以降でご紹介します。

スケールアウト機能の検証結果を評価

データノードを「2つ構成」「3つ構成」で測定した性能値を以下の図に示します。
また、参考値としてスケールアウト機能を利用しなかった場合の性能値(台数1)も掲載します。

図15 性能評価

図15 性能評価

上記結果から、検証に利用した業務モデルにEnterprise Postgres 14 SP1のスケールアウト機能を適用することで、処理能力の向上が見込めます。

まとめ:Enterprise Postgresのスケールアウト機能で性能向上

本記事で紹介した「Enterprise Postgres 14 SP1のスケールアウト機能の構築」および「データノードを追加する方法」を理解していただくと、今後、Enterprise Postgres 14 SP1のスケールアウト機能の環境構築や既存業務システムの処理能力向上をスムーズに実現できます。

最後に本記事のまとめを掲載します。

[Enterprise Postgres 14 SP1のスケールアウト機能の動作検証のまとめ]

  • 最小で2つのデータノード構成からスモールスタートできる
  • データノードを後から追加することで、処理能力を向上できる
  • データノード間でロック競合などの影響を受けないため、銀行業務のような支店ごとに業務追加するモデルに利用できる

Enterprise Postgres 14 SP1に関するお問い合わせは本ページに表示されている「お問い合わせ」ボタンから、または本ページ下部に記載の「本コンテンツに関するお問い合わせ」からご連絡ください。

2022年10月14日公開

オンデマンド(動画)セミナー

    • PostgreSQLに関連するセミナー動画を公開中。いつでもセミナーをご覧いただけます。
      • 【事例解説】運送業務改革をもたらす次世代の運送業界向けDXプラットフォームの構築
      • ハイブリッドクラウドに最適なOSSベースのデータベースご紹介

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ