並列分散問い合わせを実現した
pgpool-IIのご紹介
SRA OSS, Inc. 日本支社
技術部
浅羽 義之
y-asaba@sraoss.co.jp
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.

1

PostgreSQLに対する要求
 1 台では処理能力が限界にきている システムのボトルネックになっている！
コネクションプーリングによる負荷の軽減
クラスタリングによる負荷分散 信頼性の向上 システムを止めたくない！
レプリケーションによるデータ冗長化

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

2

pgpoolとは？
 2003年開発スタート
 弊社石井が個人で開発
 最初はコネクションプーリング機能のみ(pgpoolという名前の由来はここからきている) ライセンス BSDライセンス
 ソースコードが公開され、自由に改造してもよい 現在の開発体制
 pgpool Global Development という開発団体に移行
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.

3

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

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

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

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

4

コネクションプーリングの利点
 接続オーバーヘッドの軽減
 PostgreSQLの接続処理の流れ

1. 接続

PostgreSQL
サーバ
データ

3. 認証

2. プロセス生成 4. アクセスのための準備

バックエンドプロセス

プロセスの生成やデータアクセスのための
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.
初期化処理は結構重い

5

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

1. 接続・認証

pgpool接続済

バックエンドCopyright © 2006 SRA OSS, Inc. Japan All rights reserved.
プロセスデータ6

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

PostgreSQL

INSERT文

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

PostgreSQL

7

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

×PostgreSQL
INSERT文

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

異常発生！

PostgreSQL

8

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

PostgreSQLSELECT文

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

PostgreSQL

9

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

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

10

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

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

11

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

pgpoolpgpool-II

PostgreSQL
性能、規模

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

12

パラレルクエリ
 データを複数サーバに分散して配置
 複数のサーバに配置されたテーブルを仮想的に1つのテーブルとして扱う
 分散ルールはユーザが定義
分散ルールを格納 PostgreSQL
INSERT文

PostgreSQL

INSERT文

pgpoolPostgreSQL

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

13

PostgreSQL

パラレルクエリ
 データを複数サーバに分散して配置
 複数のサーバに配置されたテーブルを仮想的に1つのテーブルとして扱う
 分散ルールはユーザが定義
PostgreSQLSELECT文
SELECT文

pgpoolPostgreSQL

すべての結果をまとめる

SELECT文

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

SELECT文

PostgreSQL

14

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

 欠点
 データ量が多くないとそれほど効果があがらない pgpoolで検索結果の統合やクエリの書き換え処理などを実行するため、一台で十分なパフォーマンスが出ている場合はpgpoolが入ることによりオーバヘッドが増える

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

15

pgpool-IIのパラレルクエリの効果
PostgreSQL

pgpool-II

1400•９ノード構成•OSはLinux•データ件数9億件•データはpgbenchで作成•インデックス付検索

1200
1000
TPS

800
600
400

データ容量
テーブル：12GB
インデックス：1.5GB

200012481632

同時接続ユーザ数

最大18倍(32接続の場合)
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.

16

クエリキャッシュ
 問い合わせた結果をpgpoolにキャッシュさせる
 同じ問い合わせの場合、PostgreSQLには問い合せず、pgpoolが直接結果を返す 制限事項：キャッシュを自動的に削除する仕組みを実装していない
SELECT文

PostgreSQLSELECT文

pgpoolクライアントに結果を返す前にpgpoolにキャッシュさせる

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

PostgreSQL

17

クエリキャッシュ
 問い合わせた結果をpgpoolにキャッシュさせる
 同じ問い合わせの場合、PostgreSQLには問い合せず、pgpoolが直接結果を返す 制限事項：キャッシュを自動的に削除する仕組みを実装していない

PostgreSQLSELECT文

pgpoolクライアントにキャッシュされている結果を返す

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

PostgreSQL

18

pgpool管理ツール
 PHPによるWebベースの管理ツール
 設定ファイルの編集
 統計情報の表示
 ノード管理 ステータス表示 ノードの追加、切り離し

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

19

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

20

デモを行います

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

21

デモ環境構成
pgpoolNode 05432 ポート
偶数

分散ルール
5434 ポート

Node 15433 ポート
CREATE TABLE
simple (i int)

奇数

偶数か奇数かでデータを振り分ける
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.

22

構成例
 データ量がそれほど多くない場合
 レプリケーション+ロードバランス構成

 データ量が多く、検索が遅い場合
 パラレルクエリ

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

23

パラレルクエリ+レプリケーション
 分散させたデータを冗長化する構成例
PostgreSQL
pgpool(replication)
PostgreSQL
pgpool(parallel query)
PostgreSQL
pgpool(replication)
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.

PostgreSQL

24

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

 一部のSQL(nowなど)には対応していない
 JDBCなどで使う問い合わせには今のところ対応できない(プリペアードステートメント等)
Copyright © 2006 SRA OSS, Inc. Japan All rights reserved.

25

参考URL pgpool-II開発サイト
 http://pgfoundry.org/projects/pgpool

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

 日経IT Proでの紹介記事

 http://itpro.nikkeibp.co.jp/article/COLUMN/2006062

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

26