PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

メール全文検索アプリケーション Sylph-Searcher のご紹介 SRA OSS, Inc. 日本支社技術部チーフエンジニア Sylpheed 開発者 山本博之 Copyright 2007 SRA OSS, Inc. Japan All right

PowerPoint Presentation

Postgres Plus Advanced Server 9.3パーティションテーブルの特徴と性能検証レポート

スライド 1

1.SqlCtl クラスリファレンス SqlCtl クラスのリファレンスを以下に示します メソッドの実行中にエラーが発生した場合は標準エラー出力にメッセージを出力します (1)Connect() メソッド データベースへ connect 要求を行います boolean Connect(String

Visual Basic Oracle Database 11 Release 1

Si 知識情報処理

PGECons技術ドキュメントテンプレート Ver.3

スライド 1

PostgreSQL Plus 管理者ガイド

PowerPoint プレゼンテーション

Exam : J Title : Querying Microsoft SQL Server 2012 Version : DEMO 1 / 10

スライド 1

PostgreSQL カンファレンス 2013 証券取引バックオフィスにおける Oracle から PostgreSQL への マイグレーション SBI ジャパンネクスト証券株式会社 イアン バーウィック


Microsoft Word - Lab6.doc

intra-mart Accel Platform

データアダプタ概要

Base によるアプリケーション開発とサポート 鎌滝雅久 /OpenOffice.org 日本ユーザー会 OSC2007 Hokkaido 2007 年 6 月 30 日土曜日 10:55-11:40 北海道大学学術交流会館第 4 会議室

HeartCoreインストールマニュアル

Rmenuフレームワーク

POSTGRESQL 9.2 /POSTGIS (WINDOWS 版 ) 導入 設定手順書 (VER. 1) June 20, 2014

10th Developer Camp - B5

PostgreSQL による クラスタ構成の可能性 SRA OSS, Inc. 日本支社 取締役支社長 石井達夫

内容 Visual Studio サーバーエクスプローラで学ぶ SQL とデータベース操作... 1 サーバーエクスプローラ... 4 データ接続... 4 データベース操作のサブメニューコンテキスト... 5 データベースのプロパティ... 6 SQL Server... 6 Microsoft

ストアドプロシージャ移行調査編

スライド 1

PowerPoint Presentation

VB実用Ⅲ⑩ フリーデータベースⅡ

HeartCoreインストールマニュアル(PHP版)

— intra-mart Accel Platform セットアップガイド (WebSphere編)   第7版  


TALON Tips < 親子関係のある構成データを TALON で表示する > 株式会社 HOIPOI 第 1.1 版 p. 1

A. InstallScript プロジェクト InstallScript インストールは InstallScript エンジンによって制御され 決められた順序で一連のイベントが生成されます これらのイベントは インストールを実行するソフトウェアハンドラーをトリガーします たとえば インストールがロ

ADempiere (3.5)

新バージョン! Zabbix 2.2 と検証結果のご紹介 SRA OSS, Inc. 日本支社山本博之 Copyright 2013 SRA OSS, Inc. Japan All rights reserved. 1

ご利用のコンピュータを設定する方法 このラボの作業を行うには 事前設定された dcloud ラボを使用するか 自身のコンピュータをセットアップします 詳細については イベントの事前準備 [ 英語 ] とラボの設定 [ 英語 ] の両方のモジュールを参照してください Python を使用した Spar

PowerPoint プレゼンテーション

HeartCore(PHP 版 ) インストール手順について説明いたします なお 本資料は 例として下記内容を前提として説明しております 環境情報 対象 OS: Linux ( ディストリビューション : Red Hat Enterprise Linux Server) APサーバ : Apache

データベースアクセス

PostgreSQL

WEBシステムのセキュリティ技術

スライド 1

Notesアプリが iPadで動くDomino Mobile Apps ご紹介

Microsoft Word - SSL-VPN接続サービスの使い方

Microsoft Word - tutorial3-dbreverse.docx

ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよび 4 コアライセンスを ベースライセンス 追加サーバライセンスおよび追加 2 コアライセンスを 追加ライセンス と呼びます 1 台の物理サーバに対してベースライセンスは 1 つしか購入すること

PostgreSQLによる クラスタ運用および負荷分散術 SRA OSS, Inc. 日本支社 OSS事業本部 星合 拓馬

mySQLの利用

PostgreSQLのセキュリティを極める

Chapter

Microsoft Word - VBA基礎(6).docx

XMLとXSLT

Zabbix で PostgreSQL を監視! pg_monz のご紹介 Zabbix Conference Japan 年 11 月 20 日 SRA OSS, Inc. 日本支社マーケティング部

Microsoft Word - Win-Outlook.docx

Caché SQL に関するよくある質問

Python によるジオプロセシング スクリプト入門

Oracle SOA Suite 11gコンポジットに対するSOASchedulerの構成

Hyper-V 仮想マシンの設定

Microsoft PowerPoint - 4-MySQL50_JDBC_failover.ppt

WagbySpec7

ライセンスの注意事項 サーババンドル版のライセンスについてサーババンドル版では 通常のサーバライセンスおよび 4 コアライセンスを ベースライセンス 追加サーバライセンスおよび追加 2 コアライセンスを 追加ライセンス と呼びます 1 台の物理サーバに対してベースライセンスは 1 つしか購入すること

ODBC ドライバ ここでは SLAPD-SQL の設定で ODBC ドライバとして unixodbc を利用する例を示す unixodbc は にあり Linux でも使える ここでは unixodbc ドライバがインストールされていることを前提に

Micro Focus Enterprise Developer チュートリアル メインフレーム COBOL 開発 : MQ メッセージ連携 1. 目的 本チュートリアルでは CICS から入力したメッセージを MQ へ連携する方法の習得を目的としています 2. 前提 使用した OS : Red H

Silk Central Connect 15.5 リリースノート

第 2 章 PL/SQL の基本記述 この章では PL/SQL プログラムの基本的な記述方法について説明します 1. 宣言部 2. 実行部 3. 例外処理部

要旨 : データステップ及び SGPLOT プロシジャにおける POLYGON/TEXT ステートメントを利用した SAS プログラムステップフローチャートを生成する SAS プログラムを紹介する キーワード :SGPLOT, フローチャート, 可視化 2

データベース 【1:データベースシステムとは】

◎phpapi.indd

Microsoft Word - nvsi_050090jp_oracle10g_vlm.doc

橡実践Oracle Objects for OLE

ITdumpsFree Get free valid exam dumps and pass your exam test with confidence

Transcription:

PostgreSQL のしくみ勉強会 (2009 年 6 月 20 日 ) PL/Proxy と pgbouncer 講師 : 桑村潤 補助 : さいとうひろし

PL/Proxy, pgbouncer とは PL/Proxy,pgbouncer は Skype TM 社によって培われたテクノロジで 軽量かつ便利に PostgreSQL を活用できるものとして 公開された機能 pgbouncer はコネクションプーラー PL/Proxy はリモート DB 呼び出し用プロキシー言語で レプリケーションやパーティショニングの記述が可能 2008 年の PGCon で改良安定版が紹介され 現在は 同社の Marko Kreen 氏が中心になりメンテナンス PostgreSQLと同様に BSDライセンス トラフィックが急激に増大するシステムを安定運用するのが目的のひとつ

概念図 pgbouncer id=0001~1000 DBPart1 PostgreSQL plproxy Web Application Back Office Application id=1001~2000 DBPart2 PostgreSQL DBPartN PostgreSQL

pgbouncer の特長 軽量かつ強固な connection pooler 必要なメモリ量は 概ね connection 当たり 2kb 異なった複数の PostgreSQL サーバを対象 全て もしくは 特定の PostgreSQL サーバに対して connection を中断可能 殆どの環境設定項目がオンライン中に変更することが可能 client connections は切断せずにオンラインのリスタート / アップグレードが可能 処理中 SQL を解析しないため CPU への負荷は小さい https://developer.skype.com/skypegarage/dbprojects/pgbouncer

pgbouncer : インストール 提供サイトの http://pgfoundry.org/projects/pgbouncer から安定版をダウンロード (pgbouncer-1.3 2009-02-18) ビルドは 所定の作業ディレクトリに pgbouncer を展開し, configure with-libevent=/prefix; make; make install; を実行 (libevent-1.3b 以降が必要 http://www.monkey.org/~provos/libevent からダウンロードしてインストール libevent-1.4.11-stable 2009-5-14) pgbouncer 構成ファイルを編集する

pgbouncer: プーリング方式 Session Pooling 最も堅実な方法 クライアントが接続すると 1 つのサーバ接続が 接続の間 持続して割り当てられる クライアントの接続が切れたとき サーバ接続はプールに戻される レガシーアプリではこの方式が有用 Transaction pooling サーバ接続が 1 つのトランザクションの間だけ割り当てられる pgbouncer がそのトランザクションが終了したことを認識した時点で サーバ接続はプールに戻される バックエンド接続したアプリケーションの例外で壊す恐れがあるので要注意 アプリケーションと協調をとって使い方を注意し クライアントを壊す恐れのない機能のみを使うべき Statement pooling 最も活性的なプール方法 マルチステートメントのトランザクションには使えない すなわち autocommit モードをクライアントに強制し PL/Proxy との連携が主な目的

pgbouncer 構成例 ;; database name = connect string [databases] proxy = host=127.0.0.1 port=54320 dbname=jpug user=jpug password=pass part1 = host=127.0.0.1 port=54321 dbname=jpug user=jpug password=pass part2 = host=127.0.0.1 port=54322 dbname=jpug user=jpug password=pass ;; Configuation section [pgbouncer] admin_users = admin stats_users = stat_collector logfile = /home/jpug/pgsql/log/pgbouncer_test.log pidfile = /home/jpug/pgsql/log/pgbouncer_test.pid listen_addr = 127.0.0.1 listen_port = 6666 auth_type = trust ; any, trust, plain, crypt, md5 auth_file = /home/jpug/pgsql/pgbouncer_test_u.txt pool_mode = session ; session - after client disconnects ; transaction - after transaction finishes ; statement - after statement finishes

PL/Proxy の特長 PL/Proxy はリモートデータベースのプロシージャを呼び出すためのプロキシー言語 例えば フィールド値のハッシュをもとにデータベース間にデータを分割 ( 構成関数で定義 ) PostgreSQL のストアドプロシージャ言語で拡張モジュール リモート関数と同じ名前のプロキシー関数を作成し 行き先の情報はプロキシー関数の中で指定 https://developer.skype.com/skypegarage/dbprojects/plproxy

PL/Proxy: インストール 提供サイトの http://pgfoundry.org/projects/plproxy から 安定版をダウンロード (plproxy-2.0.8 2009-01-16) ビルドは 所定の作業ディレクトリに plproxy を展開して make; make install; を実行 ( 問題が起きる場合は pg_config 等 PostgreSQL の実行バイナリディレクトリに path が通っているか確認のこと ) ターゲットのデータベースへ plproxy 機能をインストールするために plproxy.sql ファイルをロードする # psql -f $PGSHARE/contrib/plproxy.sql mydb plproxy の動作確認のために テスト機能を作成

PL/Proxy : Language 定義言語は PL/PgSQL と類似 ストリングの引用 コメント 行末のセミコロン ステートメントは 4 つだけ CONNECT, CLUSTER, RUN, SELECT 各々の機能は どのデータベースで SQL を実行させるべきかを決定するために CONNECT か CLUSTER ステートメントと RUN ステートメントのペア構成が必要 CONNECT libpq connstr ; クエリを接続し実行するために 場所を指定 複数機能が同じ connstr を持てば 同じ接続を使用 CLUSTER cluster_name ; 実行する cluster name を指定 cluster name は plproxy.get_cluster_* 機能で pass されたもの CLUSTER cluster_func(..); proxy 機能引数と同時にクラスタ名をダイナミックに決定 cluster_func はクラスタ名文字列を返す

PL/Proxy : Configuration スキーマ : 以下の 3 つの構成機能は plproxy のために必須 plproxy.get_cluster_partitions(cluster_name text) リモートのデータベースへ接続する際 指定されている plproxy の接続文字列で初期化 plproxy.get_cluster_version(cluster_name text) plproxyの構成が変更された場合 再読込みが必要 全ての機能が plproxyを経由するため できる限り早く呼ばれるべき plproxy.get_cluster_config( in cluster_name text, out key text,out val text) 接続が確立している間 plproxyパラメータを変更することができる

PL/Proxy :Language RUN ON... RUN ON ALL; RUN ON ANY; クエリを cluster 内の全パーティションで並列実行 ランダムにいづれかのパーティションで実行 RUN ON <NR>; パーティション番号 <NR> の上で実行 RUN ON partition_func(..); 1 つ以上のハッシュ値 (int4) を返す partition_func() に指定した関数を実行 RUN ON argument; 変数 ( 例 $1) でパーティション番号を指定 クエリは タグ付けされたパーティションで実行される 複数のパーティションにタグ付けされれば クエリはそれらのパーティションで並列実行される

PL/Proxy: オンライン実習 ユーザ名とメールアドレスからなるテーブルに plproxy を使ってデータを格納してみる わずかな設定変更で格納方法を変更できること 格納の仕方による振る舞いの違いを確認する RUN ON hashtext( 名前 ) hashtext() 関数の戻り値 (int) によって 複数の格納先パーティションへ振り分ける 次ページ以降のサンプル参照 RUN ON ALL 値セットを返す関数が必要となる (RETRUNS SET OF TEXT) すべてのパーティションに格納される

サンプル 1: 各バックエンド DB での登録 クラスタ化するデータベースのそれぞれにテーブルの実体と関数を作成する 関数名プロキシ上で登録するものと同じ名前 型 引数型にする CREATE TABLE ユーザ ( ユーザ名 text, メール text ); -- 各リモート側データベースに定義する挿入関数 create language plpgsql; --- 関数定義のため CREATE OR REPLACE FUNCTION ユーザ挿入 ( ユーザIN text, メールIN text) RETURNS integer AS $$ --- 型に注意 INSERT INTO ユーザ ( ユーザ名, メール ) VALUES ($1,$2); SELECT 1; --- 型に注意 $$ LANGUAGE SQL;

サンプル 2: フロントエンド DB に登録する plproxy 構成関数 (1) (plproxy.get_cluster_partitions) クエリをリモートデータベースに送る必要があるとき plproxy は plproxy.get_cluster_partitions(cluster) 関数を呼び出し 各パーティションに送るための接続文字列を取得する ( パーティションの数は 2 の階乗でなくてはならない ) CREATE LANGUAGE plpgsql; CREATE SCHEMA plproxy; --- plproxy 関数用スキーマ CREATE OR REPLACE FUNCTION plproxy.get_cluster_partitions(cluster_name text) RETURNS SETOF text AS $$ BEGIN IF cluster_name = ' クラスタ ' THEN RETURN NEXT 'port=54321 host=127.0.0.1 dbname=jpug user=jpug'; RETURN NEXT 'port=54322 host=127.0.0.1 dbname=jpug user=jpug'; RETURN; END IF; RAISE EXCEPTION ' クラスタ名が見つかりません '; END; $$ LANGUAGE plpgsql;

サンプル 2: フロントエンド DB に登録する plproxy 構成関数 (2) (plproxy.get_cluster_version) plproxy.get_cluster_version(cluster_name) 関数は リクエスト毎に呼び出され plproxy.get_cluster_partitions() の結果キャッシュを出力として再利用できるかどうか決定する CREATE OR REPLACE FUNCTION plproxy.get_cluster_version(cluster_name text) RETURNS int4 AS $$ BEGIN IF cluster_name = ' クラスタ ' THEN RETURN 1; END IF; RAISE EXCEPTION ' クラスタ名が見つかりません '; END; $$ LANGUAGE plpgsql;

サンプル 2: フロントエンド DB に登録する plproxy 構成関数 (3) ( plproxy.get_cluster_config ) plproxy.get_cluster_config() 関数はパラメータを調整する ここでは接続の持続時間を設定している 他のパラメータについては本体付属文書を参照のこと CREATE OR REPLACE FUNCTION plproxy.get_cluster_config( in cluster_name text, out key text, out val text) RETURNS SETOF record AS $$ BEGIN -- lets use same config for all clusters key := 'connection_lifetime'; val := 30*60; -- 30min. RETURN NEXT; RETURN; END; $$ LANGUAGE plpgsql;

サンプル 3: フロントエンド DB に登録する (plproxy 関数 ) ここでは ユーザ テーブルは ユーザ名のハッシュ値によっていくつかのデータベースに分散されていることを前提としている パーティショニングされるデータベースへの接続文字列は get_cluster_partitions() 関数の中にある 次の関数は プロキシーサーバで実行され 適切にパーティショニングされたリモートデータベースから 指定ユーザのメールアドレスを取得 CREATE LANGUAGE plproxy; --- plproxy 言語登録 -- プロキシ側データベースに定義する挿入関数 CREATE OR REPLACE FUNCTION ユーザ挿入 ( ユーザIN text, メールIN text) RETURNS integer AS $$ --- 型に注意 CLUSTER ' クラスタ '; RUN ON hashtext( ユーザIN); $$ LANGUAGE plproxy;

謝辞 本セミナーの会場ならびに遠隔サーバ利用のための端末と回線をご提供くださった産業技術大学院大学 ( AIIT) 様に感謝いたします 本セミナーのためにOSSオープン ラボをご提供くださった独立法人情報処理推進機構 (IPA) 様に感謝いたします 本セミナー資料 及びPL/Proxy, pgbouncerの動作について 情報提供いただいたSkypeTM 社のMarko Kreen 氏に感謝いたします

おしまいです お疲れさまでした こんどの JPUG イベントはこれだ! 今のうちにスケジュールを! PostgreSQL Conference 2009 Japan JPUG 10th Anniversary Conference 日にち : 2009 年 11 月 20 日 ( 金 )~21 日 ( 土 ) 場所 : AP 浜松町 ( 東京都港区 ) 主催 : 日本 PostgreSQL ユーザ会運営 : PostgreSQL Conference 2009 Japan 実行委員会