SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

直近開催のイベントはこちら!

EnterpriseZine Day 2022

2022年6月28日(火)13:10

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

PostgreSQL9.3 新機能を検証してみた

PostgreSQL9.3 開発と運用を支える新機能

 前回は、PostgreSQL 最新バージョン 9.3の新機能の中からエンタープライズ領域の注目すべき機能について紹介しました。今回も引き続き、開発・運用面において、注目すべき機能をさらに詳しくお届けします。

PostgreSQLデータベース間のスムーズなデータ連携を実現するpostgres_fdw

 開発面で注目すべき機能としてpostgres_fdwをご紹介します。

 PostgreSQL 下位バージョンではデータベース間のデータ連携機能としてdblinkモジュールが提供されていましたが、postgres_fdwはその後継機能にあたり、PostgreSQL 9.3ではcontrib配下に含まれる形式で提供されています。

 postgres_fdwでリモートデータを連携するステップは以下の通りです。1度設定してしまえば、その後はローカル表と同じようにリモート表にアクセスできます。

  1.CREATE EXTENSIONコマンドでpostgres_fdwモジュールを読み込み
  2.CREATE SERVERコマンドで接続先のデータベース情報を定義
  3.CREATE USER MAPPINGコマンドで接続先のユーザ情報を定義
  4.CREATE FOREIGN TABLEコマンドでリモート表をローカル側に定義

 ※手順2および3がOracle DatabaseのCREATE DATABASE LINKコマンドに相当します。

図7:postgres_fdwの利用
図7:postgres_fdwの利用

 postgres_fdwはdblinkと比べてどのような特徴をもっているのでしょうか。ここでは主な特徴を2つご紹介します。

1.SQLにローカル表と同じ形式でリモート表を記述できる

 例えば、リモートにあるsup_log表に対してpostgres_fdwとdblinkそれぞれを利用してSELECT文を実行する例を見てみましょう。

図8:postgres_fdwとdblinkの利用
図8:postgres_fdwとdblinkの利用

 dblinkを利用した場合、図8のようにSELECT文の中でdblink関数を呼び出す形で接続先のデータベース名などの情報を付加してリモートのsup_log表にアクセスする必要があります。

 一方、postgres_fdwを利用した場合、SQLにローカル表と同じ形式でリモート表を記述します。postgres_fdwでは特殊な構文を習得する必要がないため、アプリケーション開発の難易度を低減することができます。

2.結合処理の際、データ転送量を抑制できる

 これは、特にローカル表とリモート表を結合し、さらにローカル表の特定データを元にリモート表から行データを絞り込む場合に効果を発揮します。

 dblinkでは、図9のようにリモートのsup_log表のデータをすべてローカルに転送してから結合処理やWHERE句による絞り込みを行う必要があり、表によっては大量のデータを転送することになります。

図9:dblinkによるリモート表からのデータ取得
図9:dblinkによるリモート表からのデータ取得

 一方、postgres_fdwはローカルにある表の行データを条件にリモートにある表データを絞り込むことができます。図10のようにローカルにあるcust表の特定データを元にリモートにあるsup_log表の必要なデータを事前に絞り込みます。

図10:postgres_fdwによるリモート表からのデータ取得
図10:postgres_fdwによるリモート表からのデータ取得

 postgres_fdwとdblinkそれぞれの実行計画を見てみましょう。

 図11のようにdblinkではFunction Scan on dblinkという計画タイプが選択され、リモートにあるsup_log表の50万件すべてのデータを読み込んでいることが分かります。

 一方、postgres_fdwではForeign Scanという計画タイプが選択され、sup_log表にアクセスしていますが実際に読み込んだ行数はわずか6件です。これにより所要時間に約4倍もの差が出ていることが分かります。このように、postgres_fdwを利用することで処理によってはリモートから転送するデータを必要最小限に抑えることができるため、ネットワークへの影響を軽減し、さらに処理速度を向上させることができます。

図11:postgres_fdwとdblinkにおける実行計画の違い
図11:postgres_fdwとdblinkにおける実行計画の違い

 その他の特徴として、postgres_fdwではリモート表に対するANALYZE処理をローカル側で明示的に実行すると、その統計情報をローカル側に保有できます。そのため、ローカル側で行われる結合や集計処理の実行計画をローカルのプランナが最適化できるのも利点の1つです。

 以上のように、Materialized Viewとpostgres_fdwを組み合わせることで今まで以上にリモートからのデータ連携がスムーズに行えることがわかります。

次のページ
迅速な障害対応を可能にするデータページチェックサム

この記事は参考になりましたか?

  • Facebook
  • Twitter
  • Pocket
  • note
PostgreSQL9.3 新機能を検証してみた連載記事一覧
この記事の著者

高瀬 洋子(タカセ ヨウコ)

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/5620 2014/02/28 00:00

Job Board

PR

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

2022年6月28日(火)13:10

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング