第5回 PostgreSQL アンカンファレンス

第5回PostgreSQLアンカンファレンス

ということで、今回もPostgreSQLアンカンファレンスに参加してきましたよ。

概要

  • 場所は前回と同様、アシストさんのセミナールーム。今回は参加人数&発表者が多そうなので最初3ルームを用意したけど、最終的な発表枠が2ルーム分だったので、中央のルームは休憩エリアっぽい感じにw
    • @s87 PostgreSQLアンカンファレンスの会場到着?。今回は封印が解かれるらしいです。 #普段より一部屋多い
  • Twitterハッシュタグは #pgunconf
PostgreSQLアンカンファレンスとは(前のときの記述のぱくり)
  • 最初に@snaga さんの挨拶があり、その後廊下にあるホワイトボードに付箋紙で発表ネタを発表者がぺたぺた貼っていく。
  • 各セッションの時間枠は基本20分。
  • 自分が発表するときには、隣で発表しているテーマが聞けないので、どこで発表するのかは、なかなか悩ましい・・・。
  • @kitayama_t 始まり。初めての人が多い。これからプログラムを決めるところ。/
発表枠
  • 発表枠ははこんな感じ。

  • 後で河原さんが17:00からの右トラックで追加発表。
開始時間 左トラック 右トラック
14:00 ポスグレ9.5の新しいGROUP BY(国府田さん) HOW TO < 今日(河原さん)
14:20 SymmetricDSの話(高塚さん) DBT-2に今も残る都市伝説(堀川さん)
14:40 9.5 Custom Scan/Join(海外さん) pl/pythonでWEBアプリ(山田さん)
15:00 JSONベンチマークネタ2本(ぬこ@横浜) fsyncと9.4.2(ミカエルさん)
15:20 休憩 休憩
15:40 postgres_fdwでリモートジョイン(花田さん) PostgreSQLで日本語検索(すとうさん)
16:00 Postgres Toolkit(永安さん) XID周回とかVACUUM FREEZEの問題(澤田さん)
16:20 pgAdminIIIを使おう!(チョコレートバーさん) PostgreSQL監査(石井さん)
16:40 ポスグレ向けのマイグレーションツール(桑田さん) pg_bulkload, pg_reorgの細かい話(大山さん)
17:00 JSONBを使ってみた(永安さん) インデックスアドバイザの話(河原さん)

発表内容

自分が聞いていないセッション&自分が話していたセッションについては、他の方のTweetで補完します。

ポスグレ9.5の新しいGROUP BY
  • 講師は国府田(KODA)さん。
  • スライド(PDF)はこちら⇒PostgreSQL 9.5 の新しいGROUP BY
  • @y_yagi GROUP BY のオプション増えてるのか. ROLLUPとかなんだろ.
  • @yancya GRUOP BY の列指定、番号で出来るの… したくないが…
  • @y_yagi CUBE: 各列で絞る or 絞らないの、全組合せ ROLLUP: 片方向に絞る組合せ なのか。なるほど。
HOW TO < 今日
  • 河原さん@NTTソフトウェアの発表。
  • 河原さんの発表「HOW TO < 今日」 今日より古い日付を如何に高速に算出するのかというテーマ
  • 実務であったやたら遅い日付比較の話。to_char()とnow()を全件かけるとめっさ遅いというトラブルシューティングがあった。
  • 次の例は col < CURRENT_DATE の例。速くはなったが、まだ改善の余地がある?
  • col < date_trunc('day', now()) の例。CURRENT_DATEとあんまり変わらない。そもそも今日を取得する関数がそもそもレコード数分呼ばれてしまうのが問題だもんなあ。
  • WITHを使ったトリッキーな方法・・・これは可読性的に、ツラい
  • 'today'::date なんて出来るのか!マジで知らんかった。なお、'yesterday', 'tommorow'も出来るらしい。どこで定数に展開してるんだっけ。
  • ちょい地味だけど、面白い発表だった。さすが、Gold聖闘士。
SymmetricDSの話
  • 講師は高塚さん。
  • @y_yagi SymmetricDSの話し. これかな / SymmetricDS | Open Source Database Replication
  • @surumegohan 左トラック:マイグレーションの切り札 多機能データ同期ツール SymmetricDSを使ってみましょう
  • (ぬこ) もしかするとsyncdbとの比較が必要かなあ。
DBT-2に今も残る都市伝説
  • 講師は堀川さん。
  • いつも堀川さんの話は排他制御まわりのマニアック&深い話が多いけど、今日は比較的、普通の開発者向けの話だw
  • 最初にlibpqとDBT-2の簡単な説明。
  • DBT-2をlibpqで実行するサンプルコードの説明。DBT-2だとカーソル使用⇒FETCH ALL⇒カーソルクローズ。でもカーソルを使わなくてもいいんじゃね?という話。
9.5 Custom Scan/Join
  • 講師はPG-Strom開発者でもある海外さんの発表。資料はこちら ⇒ PostgreSQL v9.5の新機能~CustomScan/Join Interface
  • scan ⇒ set_rel_pathlist_hook,Join ⇒ set_join_pathlist_hook,Others ⇒ planner_hook という実行計画に介入できるhookの話。
  • @kitayama_t Custom Scan/Join Interface で特定の条件では列志向見に行くとか色々できそう。
  • 海外さんがやりたいのはGPUに処理させるためのプラン介入。
  • PostgreSQL 9.5では2つhookが追加された。set_rel_pathlist_hook,set_join_pathlist_hook
  • set_join_pathlist_hook内で俺々JOINを実装し、その実行コストと既存のJOINと比較して低ければ、俺々JOINが選択される。
  • Executorコールバックの話。その後、CustomScanによるJOINの置換えの話。Join後のリレーションをスキャンする、というCustomScanを作るという話か。
  • さっきのCustomScan時には結果セットのレコード数は時と場合によって異なる。さてどうするか。⇒2つの列を両方もった仮想表にアクセスする、ということをプランナに伝える必要がある。
  • @yancya GpuPreAgg, GpuJoin, GpuScan とか、夢いっぱいだ
  • これで何が嬉しいのかというと、GPUアクセラレータを使った処理をプランに組み込めるということ。
  • 9.5開発中に、Child-pathのインタフェースが変えられたのでコミュニティと議論中とのこと。
  • Q&A: カスタムプランの同時実行に関する議論?
    • (海外さんコメント) @kkaigai 一応フォローしておくと、Funnel Executorが入った時点でBackground Worker側で同一のCustomScan/Joinが再現できなくなるため、outfunc/readfuncの対応を入れようとは思います。
  • @kkkida_twtr @nuko_yokohama カスタムスキャンの応用 表Aと表Bを結合したマテビューがあればそちらをscanする →Oraのクエリリライト。こちらは誰かが作れば、の話。
pl/pythonでWEBアプリ
  • (こっちは聞いてなかったので、どなたかフォローおねがいします・・・)
JSONベンチマークネタ2本
  • 講師は俺。本当はそれぞれ20分発表用の資料のつもりで作ったけど、これを20分で2本話すという暴挙にw
  • @yancya 9.5 から JSONB に部分更新インターフェース入りそうなのか
  • @y_yagi お、PostgreSQL 9.5 でJSONBの部分更新が入るかもしれないのか
  • @kkkida_twtr ぬこさんの9.5 JSONBもろもろ。ベンチマークとか、JPUG合宿でやった続きもありそう!
  • @y_yagi XMLつらい
  • @surumegohan XMLのpgbenchモデル 見るのも嫌だw
  • @kkkida_twtr pgbenchのクエリをXML、hstore、JSON、JSONB対応に書き換え。hstoreとJSONBでは部分更新ができるよ
  • @y_yagi シンプルなkey/value型のデータ扱うなら、今の所はhstoreが一番良さそう
  • @kkkida_twtr ぬこさん二本目 YCSBベンチマーク JSONB対応してMongoと対決
  • @kitayama_t ぬこ@横浜さんの二つ目、YCSBのお話。JSONB対応版を作ってベンチマーク
  • @kitayama_t JSONB型にpgbenchのSQLを対応させるのはかなり無理矢理感があるなぁ。適したAPI(言語)からのアクセスすべきだと思う。
    • この指摘はまったくのところ、その通りだと思います。
fsyncと9.4.2
  • 講師はミカエルさん。
  • 5/22にリリースされたけど、すぐに問題が発覚して実質上、黒歴史化しそうなマイナーバージョンアップの問題の件、だと思う・・・
  • ちょうどこの時間帯は俺も発表タイムだったので、詳細は全く聞けなかった・・・。
  • 休憩タイムにミカエルさんに聞いたら、6/4の修正版リリースって間に合うのか微妙な雰囲気だったなあ・・・
休憩
  • 15:40まで休憩タイム〜
postgres_fdwでリモートジョイン
  • 講師はpostgres_fdwの主開発者の花田さん。
  • @kkkida_twtr 花田さん postgres_fdwでリモートJOIN 個人的にリモートJOINの実装を心待ちにしていましたのでこの話を聞けるのを楽しみにしてきました。
  • @kkaigai postgresql_fdwのリモートJoinはほとんどCustomJoinと同じインフラを使っていますよ。
    • (ぬこ) PG-Strom開発者とpostgres_fdw開発者の、こーゆーやりとりが聞けるのもPostgreSQLアンカンファレンスの醍醐味の一つですね。
  • 最初にpostgres_fdwの内部処理に関する説明。リモートの検索結果をタプルに変換する処理が必要になる。
  • ここまでは9.4の話。そして結合時にローカルでの結合を行うという問題がある。リモート側で結合までさせようという話。
  • リモートジョインのプランは海外さんのCustom Joinとセットで提案して採用された。
  • リモートジョインで一番苦労したのは、結合SQLをどう生成するかだったと。
  • 結合の記述方法をどうするか(JOIN句、WHEREで記述?)も厄介だった。
  • 問い合わせのエイリアス記述方法が、リモートジョインSQL生成の簡易化に役に立ったという話。
  • 従来のローカルでJONIする方式と、9.5のリモートジョインSQLと比較すると、リモートJONIをするほうが遅いケースもあるらしい。原因は調査中。データ転送量が関連しているのかも?
PostgreSQLで日本語検索
Postgres Toolkit
  • 講師は永安さん。
  • スライド⇒Postgres Toolkitのご紹介
  • Postgres Toolkit=サーバを運用・管理するためのスクリプト・ツールのコレクション
  • Postgres ToolkitはほとんどがPyton、一部Cで記述されたものあり。 (最初、Perlって書いてたら、@snaga さんからちげーよ、と指摘受けたw)
  • Postgres Toolkitはcurl経由でネットワークインスコできる。
  • Postgres Toolkitのネットワークトキャプチャツールは、そのへんに疎い自分にとっては助かりそう。
  • 後半はPostgres Toolkitのデモ。
    • pt-session-profilerはtcpdumoと組み合わせているのか。
  • pt-snap-statementはpg_stats_statementのスナップショット間の差分を見るためのもの。
  • @kkaigai 外部からPostgreSQLプロセスを覗き見て、今、プランノードのどの辺を実行中なのかをトレースできる仕組みがあればなぁ…。
  • pt-verify-checksumはオフラインでバックアップファイル等のチェックサムを確認するもの。
XID周回とかVACUUM FREEZEの問題
pgAdminIIIを使おう!
  • 講師はチョコレートバーさん。
  • @surumegohan きわどい小技が多い・・w 裏ワザみたいだw
  • (詳細、誰かフォローお願いします・・・)
PostgreSQL監査
  • 講師は石井さん。
  • アイエエエ!REVERT!REVERTナンデ!
    • 5/29にpg_auditがコミュニティによってREVERTされたらしい・・・むむむ。
    • ちょっといろんな意味で自分的にもツラいw
  • @yancya 「ログで出力されるテーブル名にスキーマ名が修飾されない」これは厳しそうだ
  • そういえば、pl/pgsql内のSQLがどう取得されるのかって、まだ試してなかった気がするな。> pg_audit
  • pg_audit.log_levelはデバッグつーか、リグレッションテスト用って位置づけか。NOTICEを指定してリグレッションを実行すると。
  • 現状のpg_auditを使ってできないこと。スーパーユーザの監査、OSユーザの監査。
  • @yancya 「auditd に流したら堅いのでは」
  • ログの出力先は?PostgreSQLログなので、PostgreSQLがハックされると改竄し放題。
    • INSERTのみ可能なファイルに書き出すとか。
    • 監査ログの出力先を(audit.d)にするとかの工夫はできる?
  • @yancya 「そもそも監査ログとは」 ヤバい話になってきたw
  • single-user モードで実行された場合は、ログが出力されないなどの問題もある。
  • 海外さん「セキュリティやってる人はだいたい性格が悪いwww」監査って難しいね・・・
  • 監査そのものに対する要件が満たせてないんでは?というやや厳し目のツッコミが目立った。
ポスグレ向けのマイグレーションツール
  • すいません、講師の方のお名前を教えて下さい・・・
  • @surumegohan 左セッション:Migr8.rb DBスキーママイグレーションツール
  • @kitayama_t Migr8.rbのお話
  • @south37777 なぜか rails では適用した migration を管理してない事にされてたけど、schema_migrations があるはずだったり
pg_bulkload, pg_reorgの細かい話(大山)
  • 講師は大山さん。
  • まあ、pg_bulkloadのマニュアルのDIRECTモードの説明には、そこまで詳しく書いてないよね(1ページ未満ならWAL書くから動いちゃうよ)。
  • pg_reorgの話。マニュアルとは違って、最初の処理フェーズでもAccessExclusiveとっちゃうよという話。
  • O山さんのスライド外小ネタ。IPv6で設定してレプリケーションが出来なかった(libpqの設定も必要)という話。
  • O山さんの上司?であるO西さんコワイw
JSONBを使ってみた
  • 講師は永安さん
  • Github統計情報をPythonスクレイピング。あるURLを叩くとJSON形式の統計情報が取れる
  • JSONBの生データだと使いづらいので、普通のテーブルに変換して使うと。ふむ。
  • JSONRDBの表にマッピングするための方法論がまだ整備されていないんじゃないかと、永安さんのコメント。今後、JSON/JSONBを検証するときに、ちょっと留意しないとなあ・・・。
インデックスアドバイザの話
  • 講師は河原さん。急遽空きがあったので発表したとのこと。
  • 詳細不明・・・後で聞いてみよう・・・。
その他
クロージング
  • 次回は11月開催らしい。それまでに各自ネタを貯めておけと。
  • (クロージングで話したかどうかは不明。Facebookに書いてあった) PostgreSQLアンカンファレンスの幹事を誰かにやってほしいとな・・・?

懇親会&その後

  • @kkkida_twtr 発表者の方で無線マウスを演壇にお忘れでないでしょうか?アシスト 喜田がお預かりしています。
  • 会場はJR市ヶ谷駅からちょっと坂を登った場所にある、北海道居酒屋「北海道はでっかい道 オホーツクの恵 湧別町 市ヶ谷店」
    • 参加者は16人?かな。
    • つぶ貝チャンジャ&鶏/鮭ザンギウマー。
    • IE7問題・・・うっ・・・頭が・・・
    • O山さんはHadoopの人なのか。
  • 今回は健全に(?)一次会で散会。
  • 電車で横浜に戻る途中に地震に遭遇!それはいいのだが、地震の影響で東京周辺のJRがほぼ麻痺状態。結局、帰宅は25時すぎ・・・orz

お礼

  • 発表者のお名前を教えていただきありがとうございます!>きださん