PostgreSQL アンカンファレンス@東京(1)
笠原 辰仁 ・ NTTデータ 江川大地
PostgreSQL Unconference
2013年2月16日に市ヶ谷の(株)アシストさんのオフィスにて、JPUG主催の、日本(世界でも?)初のPostgreSQLのアンカンファレンスが開催されました。場所と1セッションあたりの時間だけ決められており、講演者や講演内容は当日に決まるというある意味"ゆるい"カンファレンスでした。それでも当日は40名近い参加者が集まり賑やかなイベントとなりました。本レポートはアンカンファレンスの模様をざっくりとお伝えします。
主催者挨拶
最初に、JPUGの永安氏(@snaga)から挨拶がありました。この時点ではまだ講演内容など一切が決まっていませんでした。とりあえず、1セッションの最大時間を20分とし、2トラックでそれぞれ10セッションを走らせるというスケジュールが伝えられました。その後、会場の入り口にあるホワイトボード(写真参照)にポストイットを張り、講演者は好きな時間帯に好きな講演を早い者勝ち(笑)で決めていくスタイルでこの日のスケジュールが決まりました。中には一人で2本の講演をする方もいれば、ディスカッション(BOFのような感じ)スタイルでの議論の場を設ける方もいました。意外にもスケジュールは15分程度でさくっと決まり、合計17本の講演となったアンカンファレンスが始まりました。
スケジュールの埋まったホワイトボード(原田氏撮影)
アンカンファレンスのスタイル
面白いことに、このカンファレンスでは、一つの会場を簡易的にホワイトボードで区切った2つのトラックで進められ、参加者は二つのセッションを同時に覗ける形になっていました。講演者の喋りが双方から聞こえてくるので、たまに集中できないこともありましたが、さほど気にすることもなく、斬新なスタイルの中で講演が進められていきました。
PostgreSQLの超精密測定
最初の講演は@hayamiz氏によるPostgreSQLの性能測定についての話です。hayamiz氏は本業でDBMSの性能測定に関する研究を行っているそうです。本日はPostgreSQLの内部を改良し、軽量かつ詳細な性能情報の取得を可能にするツールpg_fine_tracerについて紹介していました。基本的にはトレースログを出力し、可視化する形を取っているようです。実際にSQL処理中のI/Oやキャッシュミスなどの情報を時系列でつぶさに追うことができます。開発時にはとても重宝しそうなツールでした。講演後には、Systemtapとの違い(本ツールはSystemtapより軽量に動作)や、メモリ情報の取得の要望、また商用環境での運用に使うため、さらに負担の少ない仕組みについてなど、活発な議論がされていました。
vFabric Postgres
Michael Paquier氏(@michaelpq)による、VMware vFabric Postgresについての話です。vFabricはVMware社が提供しているクラウド向けの仮想アプリケーションスタックですが、DBMSとしてPostgreSQLもそのスタックに備わっています。インターフェイスや内部的にはネイティブなPostgreSQLと同様らしく、通常のPostgreSQLと同様に使えます。ただし、仮想環境に(ある種自動的に?)リソース系のパラメータなどが最適化されており、また便利なブラウザベースのGUIも使えます。導入もRPMやOVAなどが提供されているようで、とても簡単だそうです。仮想環境と聞くと、実際の性能値(特にI/O周り)などが気になりますが、これはまたの機会ということでした。
Writable FDW
海外氏(@kkaigai)による、PostgreSQL9.3の新機能(予定)のWritable-FDWについての話です。PostgreSQL9.1からcontrib/file_fdwが実装されたり、PGXNで様々な外部リソースを扱うFDWモジュールが開発されたりで、広がりを見せているFDWですが、現行では外部リソースへの参照処理のみ許されています。海外さんは、現在FDW経由で外部リソースへ更新処理を行う仕組みを9.3へ実装していました。 特に注目すべき技術は、PostgreSQLと外部リソース間で、更新箇所を特定する情報を受け渡しする必要があるため、pseudo-columnを用意しているとのことです。また、このpseudo-columnはユーザ側で任意に定義できるため、特定の複雑な処理を外部へオフローディングするなどの使い方もできます。海外さんは、PG-StromというPostgreSQLからGPUへ複雑な演算をオフロードする仕組みを実装中で、ここにこのpseudo-columnが利用されているそうです。完成がとても待ち遠しい機能です。本講演の資料はこちらにあります。
小ネタ 漢数字型
原田氏(@nuko_yokohama)による、漢数字型ksjの紹介講演です。ksjはnuko_yokohama氏による自作のデータ型で漢数字を表現形式とする整数型のデータ型です。VM上でksjのデモをしながら使い方の説明をして頂きました。漢数字型ksjでは、漢数字によるデータ入力や四則演算、 集合演算等の整数型でおなじみの操作が可能です。最後の質疑応答では「ksjで扱える値の上限は?」という質問があり、「内部ではinteger型で値を管理しており、漢数字⇔算用数字の変換を適宜している」とのことでした。PostgreSQLの拡張性の高さが垣間見える講演でした。
Custom background workers
Michael Paquier氏による、PostgreSQL9.3の新機能であるBgWorkerについての話です。BgWorkerは、ユーザが独自にバックグラウンドプロセス(loggerやbgwriterなどのPostgreSQLサーバ本体と連携して動作するプロセス群)を定義できる機能です。PostgreSQLの背後に常駐し、またPostgreSQL本体から有用な情報を受け取れるため、ジョブプロセスや独自モニタプロセスなど、様々な使い勝手がありそうな機能です。 講演では、ps コマンドにてプロセスタイトルに"Hello World"を表示し、ログに定期的に"Hellow World"を出力し続けるBgWorkerを実際のサンプルソースとデモにより披露していました。サンプルを通し、実装上の注意点を述べるとともに、シンプルさもアピールしていました。PostgreSQL9.3公開後は、様々なBgWorkerが出てくることと思います。本講演の資料はこちらにあります。
FDWで他のポスグレから検索してみませんか?(相談)
花田氏(@s87)による、PostgreSQL9.3の新機能のpostgres-fdwについての話です。本機能は、アンカンファレンスの翌週に9.3へコミットされました。PostgreSQL同士をつなぐFDWとなり、例えるなら、dblinkの発展版の様なイメージでしょうか。リモートにあるPostgreSQLのテーブルをローカルにあるように扱え、またWHERE句の条件をリモートへプッシュダウンできます。海外氏が取り組んでいるWritable-FDWと組み合わせると、簡易的なマルチマスタクラスタ構成も組めそうです。PostgreSQL簡単なデモの後に、今後のpostgres-fdwについての要望について簡単な議論もありました。現行ではリモートでのトランザクション制御がまだ十分ではないことや、集計関数などもリモートへプッシュダウンできれば負荷分散用途にも使えるなどの話で盛り上がりました。個人的には、DWH用途などを見据えて、パーティショニングの子テーブルにFDWを含ませたり、並列処理を行えるようになると大変面白い機能になると思います。
全文検索とpg_trgm
澤田氏による、PostgreSQLの全文検索とpg_trgmモジュールについての話です。全文検索処理についての概要と、PostgreSQLで利用可能な全文検索モジュールの説明、そしてpg_trgmの仕組みについての丁寧な解説がなされていました。 pg_trgmはPostgreSQL9.1からcontribに追加されたモジュールで、GINやGiSTインデックスと組み合わせることで手軽に全文検索を行えます。特別な演算子がなくても、LIKEの中間一致処理で自動的に全文検索がされるため、特定のケースでは非常に有用そうです。 講演では、pg_trgmの得手不得手も解説されていました。まだ粗削りな部分もあるようですが、活用していきたい機能だと思います。本講演の資料はこちらにあります。
今そこにある危機を捕える pg_stat_statements revisited
永安氏による、pg_stat_statementsモジュールについての解説です。実行された各SQLの累積回数や実行時間、さらに最近のPostgreSQLではバッファ利用状況なども取得できるようになったpg_stat_statementsですが、実際に使ったことがある方は少なかったです。本講演では、PostgreSQL9.2からSQL中の変数部分は?に正規化され使い勝手がよくなった話や、永安氏謹製のシェルにより、特定期間に実際されたSQLの統計情報を取得する方法などが紹介されました。
PostgreSQLは運用に役立つツールが数多くありますが、なかなか運用者視線で紹介される機会が少ないです。本講演はそういった意味ではアンカンファレンスの中では貴重な解説でした。本講演の資料はこちらにあります。
[ 後編へ続く ]