PostgreSQL で並列処理を実現する
pgpool-II のご紹介
SRA OSS, Inc. 日本支社
技術部 盛 宣陽
Yoshiharu Moriy-mori@sraoss.co.jp

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

1

PostgreSQLに対する要求
y 1 台では処理能力が限界にきている システムのボトルネックになっている！
コネクションプーリングによる負荷の軽減
クラスタリングによる負荷分散

y 信頼性の向上 システムを止めたくない！
レプリケーションによるデータ冗長化

これらの要求に答えるため、pgpoolを開発
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

2

pgpoolとは？
y 2003年開発スタート
 弊社石井が個人で開発
 最初はコネクションプーリング機能のみ(pgpoolという名前の由来はここからきている)y ライセンス BSDライセンス
 ソースコードが公開され、自由に改造してもよい

y 現在の開発体制
 pgpool Global Development という開発団体に移行
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

3

pgpoolの機能
y コネクションプーリング
 接続時のオーバーヘッドを軽減

y レプリケーション(データの複製を作る)
 2台までの制限あり

y ロードバランス レプリケーション設定時にのみ検索を振り分けることが可能

y フェイルオーバ
 障害が発生したノードを切り離す
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

4

コネクションプーリングの利点
y 接続オーバーヘッドの軽減
 pgpoolによるコネクションプールの接続処理の流れ
y クライアントとPostgreSQLの間にpgpoolが入る
y プロセス生成とディスクアクセスのための準備処理が省略可能

1. 接続・認証

pgpool
データ接続済バックエンドプロセス

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

5

レプリケーションの利点
y 信頼性向上 2台に更新系クエリを送信することで、データの同期を取る
y 異常が発生した場合にも運用が可能(縮退運転)
y 常に同期を取るため、通常より更新系クエリは時間がかかる
INSERT文

PostgreSQL

INSERT文

pgpoolINSERT文
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

PostgreSQL

6

レプリケーションの利点
y 信頼性向上 2台に更新系クエリを送信することで、データの同期を取る
y 異常が発生した場合にも運用が可能(縮退運転)
y 常に同期を取るため、通常より更新系クエリは時間がかかる

×

PostgreSQL
INSERT文

pgpoolINSERT文
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

異常発生！

PostgreSQL

7

レプリケーションの利点
y ロードバランス 同じデータを2台で持つので、検索についてはどちらかに問い合わせすればよいので、負荷分散が可能
 ロードバランス先の割合を指定可能SELECT文PostgreSQLSELECT文

pgpoolCopyright © 2007 SRA OSS, Inc. Japan All rights reserved.

PostgreSQL

8

pgpool-IIとは？
y IPA 「オープンソースソフトウェア活用基盤整備事業」の支援により SRA OSS, Inc. 日本支社で開発
y 現在は pgpool Global Development Groupにソースコードを寄贈
 弊社の開発メンバも何人か所属
 ライセンスはpgpoolと同じ

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

9

pgpool-IIの機能
y pgpoolの後継プロダクト
 pgpoolの機能を継承
 レプリケーションを2台までしかできない制限を解除

y pgpool-II新機能
 管理ツールによるpgpoolの管理 クエリキャッシュ パラレルクエリ
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

10

pgpool-IIのターゲット市場
信頼性PowerGres
HA
Slony-I

pgpoolpgpool-II

PostgreSQL
性能、規模

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

11

パラレルクエリ
y レプリケーションでは複数のデータベースノードに同じデータを複製して格納するのに対して、パラレルクエリでは複数のデータベースノードに異なる範囲のデータをそれぞれ格納します
pgpool

2005
年

2006
年

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

2007
年
12

パラレルクエリ (準備)y Ｓｙｓｔｅｍ ＤＢと呼ばれるDBに右のテーブルを作成する
y パラレルモードで利用するテーブ
ルの情報を右のテーブルにあらかじめ入れておく
y dist_def_funcに指定した関数をSystem DBに作成する(分散ルールの登録)
y pgpool起動時にSystem DBから情報を読み込む
y クエリ書き換えが必要な時にはこの情報を元に書き換えを行う

CREATE TABLE pgpool_catalog.dist_def (dbname text,-- データベース名
schema_name text, -- スキーマ名
table_name text,-- テーブル名
col_name text
NOT NULL CHECK (col_name = ANY(col_list)),-- 分散キー列名
col_list text[] NOT NULL,-- テーブルの列名
type_list text[] NOT NULL,-- テーブルのデータ型
dist_def_func text NOT NULL,-- 分散ルール関数名
PRIMARY KEY (dbname, schema_name,table_name));

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

13

パラレルクエリ
y データを複数サーバに分散して配置
 複数のサーバに配置されたテーブルを仮想的に1つのテーブルとして扱う
 分散ルールはユーザが定義(事前に準備)
分散ルールを
格納 System DB

PostgreSQL

INSERT文INSERT文

pgpoolPostgreSQL

分散ルールから振り分け先を決定
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

14

PostgreSQL

パラレルクエリ(Simple Select)
y pgpoolがクエリを解析して、書き換えが必要かどうか判断を行う
y 書き換えが必要ないクエリに対しては、並列エンジンを通して各バックエンドにクエリを送信
y 結果をまとめてクライアントに返す

pgpool
並列エンジン

DB

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

DBDB
15

パラレルクエリ(Complex Select 例：ソート処理)
yyy

pgpoolでクエリを解析
ソート処理が使われている
場合には、クエリを書き換えてsystem DBにクエリを送信する
system DBでは、クエリの一部だけをpgpool並列エンジンに送り、戻ってきた結果にソート処理を行う

pgpool
クエリ書き換え
System DB

pgpool
並列エンジンDB

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

DBDB16

パラレルクエリの利点・欠点
y 利点
 大容量のテーブルへの検索の高速化
y PostgreSQL単体の場合、I/Oの負荷がすべて集中する

y 欠点
 データ量が多くないとそれほど効果があがらない
y 一台で十分なパフォーマンスが出ている場合はpgpoolが入ること
によりオーバヘッドが増える トランザクション処理
y system DB経由でバックエンドに送信されるクエリはトランザクションブロック外の処理となる 苦手なクエリが多い
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

17

パラレルモードでの苦手なクエリ
y 条件絞込み
 Where句の条件処理

条件絞込み
108関数

集約64

 集約関数、group by

y 重複処理20結合重複ソート

y 集約

サブクエリ
PostgreSQL
pgpool-II 1.0

 distinct,union,except..

y サブクエリy ソート
 Offset limit 含む

y 結合
y 関数
 ユーザ定義関数などを考慮

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

18

パラレルモードのチューニング
y 各ノードで完結する複雑なクエリは、あらかじめviewを作っておく(たとえばJOIN)
 pgpoolはviewとtableの判断ができない

y CE (Constraint Exclusion） 機能を利用する
 注) テーブルの継承を行う必要はない

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

19

pgpool-IIのパラレルクエリの効果
y 次のセッションで詳しくお話します

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

20

制限事項
y オンラインリカバリができない ノード間のデータの再同期には、PostgreSQLを停止させ、rsync等で手動でコピーする必要がある

y 一部のSQL(nowなど)には対応していないy パラレルモードではJDBCなどで使う問い合わせには今のところ対応できない(プリペアードステートメン
ト等)
y パラレルモードでのトランザクション処理
Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

21

pgpool-II 2.0 今後の計画
y オンラインリカバリ
 自動復旧
 無停止

DB
障害発生

同期

pgpoolDBCopyright © 2007 SRA OSS, Inc. Japan All rights reserved.

22

pgpool-II 2.0 今後の計画
y

パラレルモードの改良

高速化(関数、重複処理)
テーブル単位でレプリケーションorパーティショニングの選択が可能
トランザクションの改良

条件絞込み
108
関数

集約

64
20

結合

重複ソート

サブクエリ

PostgreSQL
pgpool-II 1.0
pgpool-II 2.0

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

23

参考URLy pgpool-II開発サイト
 http://pgfoundry.org/projects/pgpool

y pgpoolコミュニティサイト
 http://pgpool.sraoss.jp/

y 日経IT Proでの紹介記事
 http://itpro.nikkeibp.co.jp/article/COLUMN/20060626/241783/

Copyright © 2007 SRA OSS, Inc. Japan All rights reserved.

24