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

ということで、今回もPostgreSQLアンカンファレンスに参加してきましたよ。
ホントは日曜日にupしたかったけど間に合わなかった・・・。

概要

  • 場所は前回と同様、アシストさんのセミナールーム。今回は2ルーム使用。
  • 最初、参加人数がちょい少なめだったけど、直前になってどどっと増えてだいたい30人くらいになったのかな。
  • Twitterハッシュタグは #pgunconf

最初に@snaga さんの挨拶があり、その後廊下にあるホワイトボードに付箋紙で発表ネタを発表者がぺたぺた貼っていく。
各セッションの時間枠は基本20分。
自分が発表するときには、隣で発表しているテーマが聞けないので、どこで発表するのかは、なかなか悩ましい・・・。

最終的にはこんな感じに。あ、写真ぶれぶれだ・・・(´・ω・`)

時刻 ルーム1                 ルーム2                
1350 generate_series()使い込み(河原さん) レプリケーションスロットの活用方法について(喜田さん)
1410 ???(国府田さん)            PostgreSQL9.4 SELECTの微妙な強化(ぬこ@横浜)    
1430 GPUで並列処理(海外さん)          WALInsertLock競合緩和(堀川さん)          
1450 pg_dbms_stats(石井さん)         PostGISサンプルデータ(国府田さん)
1510 休憩                   休憩                  
1530 共有バッファと関連ツール(澤田さん)    CTB57(勝俣さん)            
1550 データで見るPostgreSQL(永安さん)     A Wall of English(田中さん)      
1610 JSON型とFacebookAPIでWebアプリ開発(石井さん)   WAL圧縮(藤井さん)       
1630 clogをSQLで見てみる(笠原さん)      ETLツール(川崎さん)          
1650 Google Big Queryを使ってみよう(永安さん) ToDo一覧(藤井さん)          

発表内容

PostgreSQLアンカンファレンスの楽しみの一つは、隣のセッションの話もなんとなく聞こえてくること、ではあると思う。
とはいえきちんと聞けるわけではないので、自分が聞いていないセッションは他の方のTweetで補完します。

generate_series()使い倒し
  • 発表資料はこちら ⇒ generate_series関数使い込み
  • こっちは聞いてなかったけど、タイトル通り試験データ作成などでお世話になるgenerate_series()のマニアックな使い方レシピ集。
  • ちょっと面白い使い方が「前方最長完全一致検索」に応用する例。
    • @kasa_zip 河原さんのgenerate_series()でユニグラム的な文字列検索に生かす使い方。面白い。
  • 本人曰く、聞いている人が少なくてちょっと残念がってた。
レプリケーションスロットの活用方法について
  • PostgreSQL 9.4で注目されている、レプリケーションスロットの説明と想定される活用方法の説明。
  • レプリケーションスロットってなんぞ?⇒SRマスタに存在してスレーブ状態を管理しているもの。
    • スレーブ状態とは?スレーブの死活、転送がどこまで完了しているか。
  • レプリケーションスレットはスロット作成関数を使って生成する。CREATE〜文とかはない。
  • スロットによるSRの課題解決。レプリケーション競合抑止。WAL消失に備えた対策がとれる。
  • 異なるスペックの複数台のスレーブがあるときにwal_keep_segmentsを決めづらい⇒スロットで解決できないか?
    • @s87さんもこの問題で悩んでいたとのこと。
???
  • なんか国府田さんが飛び込みで喋っていたみたいだけど、ちょうど発表中だったから何も聞けなかった・・・
PostgreSQL 9.4 SELECT 文の 微妙な強化
  • 私の発表。この資料は当日の午前中、EXCELSIOR CAFFE 市ヶ谷駅前店内でやっつけで作ったw
  • 列なしテーブルへのINSERTネタが意外に受けてた(?)。まあ実用性はないと思うけど・・・。
    • @kuwaccho0711 選択リストなしのSELECTが発行できる。列のないテーブルにINSERTもできるよ!
  • @kuwaccho0711 WITH ORDINALITY 連番自動で発行してくれる。UNNEST関数と組み合わせるといいかも
  • @kuwaccho0711 ROWS FROM() まったく関連のないレコードを横に連結させる たりない行はnull。(私見)関連内情報同士を同時に持ってきたいときにはいいんじゃないかなあ?
GPUで並列処理
  • 海外さんの発表。資料はこちら ⇒ Technology Updates of PG-Strom at Aug-2014 (PGUnconf@Tokyo)
  • こっちは聞けなかった。PG-Strom改善版の話かしらん。
  • @meketen #pgunconf GPU使ってPostgreSQLを高速化するって話しを拝聴している。難しい。。
  • 左側のPG-Stromの話。ちらっと「見よこの減り!」というグラフが見えてる。
  • 聞いてた人のフォローよろしく・・・
WalInsertLock競合緩和
  • 右はほりかわさんのWalInsertLock競合緩和。左は海外さんのPG-Strom改善の話。どっちも面白そうだが・・・。
  • 相変わらず堀川さんの話題は深そう&濃そうだ・・・
  • @kuwaccho0711 WALは知っていること前提な時点で初心者おいてけぼり感あるのう
  • @kuwaccho0711 でも説明はちゃんとしてくれる辺りはやさしい
  • WALInsertLockの話。ロック取得時間<<内部処理時間 という問題があると。
  • WALInsertLock競合解消のアイディア。lwlockの改善で対応しようとしている。lwlock APIが9.4で大幅に強化されている!?
  • @kasa_zip これあれかな、UPDATE時のWAL削減の方策のためかな?
  • 先に後ろ側のログをWALバッファに書き込んだ後、先行側ログのWALバッファ書き込みを待つ例による説明。
  • 質疑応答:9.3で9.4をOLTP系ベンチを比較したときに、1.5倍くらい性能向上したけど、今日の発表の改善効果なの?⇒書き込みがあるモデルだと向上する可能性はある。DBT-2での効果も確認した。
  • 質疑応答:つまり、9.4 リリースノートの"Allow multiple backends to simultaneously insert into WAL buffers (Heikki Linnakangas)"のこと?⇒たぶんそうです。
  • 笠原さんの質問の件って、これのことかなあ? "Conditionally write only the modified portion of updated rows to WAL"
    • 勝俣さんが先週ちょっと調べてた、固定長メンバの更新時に効果があるって言ってた件かな?
PostGISフリーサンプルデータを作ったけどどーしたものか
  • 次は国府田さんの発表。本業が暇なんですかw 今回はPostGISサンプルデータの話。全市町村ポリゴンデータ。
  • 国府田さんのサンプルデータ。地図データに時系列データを持たせている。
  • @kuwaccho0711 地図データは京都が絡むとカオスになるイメージある。
    • @kuwaccho0711 PostGISって京都の住所は通常の住所なのか通り名住所なのかどちらなのかしらね? 調べてみよ
    • 通り名住所ってものがあるのか・・・通称的な住所名?
  • 時系列+地図⇒PostgreSQLPostGIS最強説。今回はPostgreSQLの日付範囲型も活用している。
  • PostGISデータをRで可視化するという例(例:広島帝国の拡張)。
  • で、どうやってこのサンプルデータを配布するのが良さそうかという相談(pg_dumpファイルでいいのか)。配布内容はすぐに使える地図データ、時系列変遷を含む市町村データ、元テーブル群とストアド関数など。
  • 国府田さんの発表を聞くたびにPostGISきちんと使ってみないとなー、と思うけどデータをどう作成していいかわかんなかったので、こういうサンプルデータって、PostGISの普及に役に立つと思う。
  • 質疑応答:Rの例でいいので、具体的なチュートリアル(コマンドの実行例とか)が欲しい。
pg_dbms_stats
  • PostgreSQL女子・ニューカマーの発表ですよ!
  • 石井さん@NTTデータの発表はpg_dbms_statsの紹介。統計情報固定化ルールだったっけ?
  • @kkaigai 統計情報の変化が悪さをするから、チューニングが終わったらその時点でもう動くな!的な需要があるのか。
  • @kasa_zip 石井さん による pg_dbms_stats のお話。統計情報の固定化は目新しいのでいろいろ質問
    • 石井さんの援護射撃に藤井先生登場?(pg_hint_planとpg_dbms_statsの使い分け?)
    • @kasa_zip dbms_statsとhint_planの使い分けは、マクロでの安定性をdbms_statsで担保し、個別の最適化をhint_planでやる感じ
休憩
  • 15:30まで休憩タイム〜
共有バッファと関連ツール
  • 澤田さんの共有メモリと共有バッファ関連ツールの話。
  • @kkaigai pg_buffercacheは知らんかったw バッファに載っているかどうか事前に確認したい時には便利だなー。
  • @meketen #pgunconf pg_prewarm初めて知った。
    • @s87 pg_prewarm、テーブルデータを共有バッファ(やOSキャッシュ)にのせて"暖気"してくれるツール
CTB57
  • 発表資料はこちら ⇒ Ctb57 with god7
  • http://www.amazon.co.jp/dp/4774167096の作者がこんなユルい発表していていいのかとw(自分のことは棚に上げる)
  • タイトルから内容が全く想像つかなかった発表。
  • @kasa_zip CTBは contrib のことだった・・・
  • 要するにAKB48っぽく、57種のcontribモジュールを紹介&推しメンを決めるという、実にアンカンファレンスらしいゆるい発表
  • サンプルコードは研修生扱いw
  • @kasa_zip hstoreはJSON型で出現でやや影が薄い感じ
    • 以前、JPUG勉強会で紹介したので、ちょっと寂しい感じ・・・>hstore
  • 卒業=PostgreSQL本体に取り込まれる
  • @kuwaccho0711 pgcryptoは謎多き乙女 #pgunconf
  • この発表で分かったけど、contribには日本人も結構貢献してるんだなーという。
  • @kasa_zip pg_upgrade/pg_upgrade_support は双子扱いだったw
  • @kasa_zip contribはPostgreSQLの拡張作成時のサンプルとしても有用な参考になりますね
  • worker_spi を可哀想って言うなw #pgunconf 数当てゲーを作ったときに参考にしたよ・・・
  • かっちゃんの推しメンはpg_prewarmとpg_xlogdump
  • @kasa_zip 聴講者で神7選抜 研修生はいない!
  • @kasa_zip なぜ chkpass を選んだしwww
  • @s87 postgres_fdwは一応選抜入り♪
    • @s87 さんはpostgres_fdwのプロデューサーですからw
  • @meketen #pgunconf となりのcontrib総選挙が気になるwwww
  • Contrib神7選挙w センターはやはりpgbench
  • @kuwaccho0711 集計結果は記憶頼みです。
  • @kasa_zip autoexplain, dblink, pg_stat_statements, pgbench あたりが強いな
データで見るPostgreSQL
  • 永安さんの発表
  • @meketen #pgunconf マエショリストww
  • Slideshareだと、やっぱりアーキテクチャ入門が人気なんだなあ・・・
  • セミナーで聞いてみたいこと。SQLチューニング、バックアップリカバリ、高可用クラスタなど。
  • 永安さんからアナリティクスやりたい人募集きた
  • 新しい記事より古い記事が検索される現象で困ってる。PostgreSQL文書で古いバージョンがヒットする例なんかもそう。
A Wall of English
  • 田中さんの発表。PostgreSQL本家のMLを読むコツ?あー、これも聞きたかった・・・
  • @kuwaccho0711 まさかのスライド全英語 #pgunconf
  • @kasa_zip 田中さんによる英語の話。hackersに出てくる頻出英単語
  • @kasa_zip 機械的にやっても are とか those ばっかなので SVL12000を使って序書的に検出。
  • @kasa_zip へー powerful はそんなに出てこないんだ・・
  • @kuwaccho0711 単語力は大事なんだなあと改めて思った次第
  • @kasa_zip なるほど、英語の壁を超えるための面白い観点でのアプローチだった!
  • @kasa_zip おまけ。 Tom lane の使っている英語のレベルを見ると、やや難しめの単語を筒かっている・・けどやっぱりイディオムが難しいのかも?
JSON型とFacebookAPIでWebアプリ開発
  • 左は石井さんのJSONFacebook APIの話。
  • 作成したアプリ:写真クイズ。Facebook API自体使ったことないから、そういう意味でも気になる。
  • Facebook Graph APIではJSONを返却するのね。今回はPHPで実装。
  • @s87 Facebook×CakePHPの話がアンカンファレンスで聞けるとは!
  • 石井さんの発表。JSONBにもちょい触れてる。 #pgunconf あぁ、来週には来月の勉強会向けJSONB型のスライド書かなきゃなあ・・・
    • @s87 JSON型とJSONB型、ほとんどの場合はJSONB型が有利、と。
  • 質疑応答:配列型 vs JSON型 まあ、今回はJSON型をあえて使ってみたのでしょうけど。
  • JSONBにおける重複キーの扱い。後勝ちルール。JSON仕様としては厳密にはどうだったっけ。
WAL圧縮
  • 発表資料はこちら ⇒ WAL圧縮
  • 右は藤井先生のWAL圧縮。どっちも気になるな・・・
  • @kuwaccho0711 WAL圧縮すればまあ確かに使いやすくはなりそうだけど
  • WAL圧縮効果:pglz, lz4, snappy, fpw=off の比較。 pglzはTOASTでも使っているPostgreSQL標準圧縮方法。
    • pglzよりもlz4, snappyのほうが微妙にWALサイズが小さくなる。
    • @kuwaccho0711 圧縮なしだと6GくらいのWALがlz4やsnappyだと約半分。fpw=offだとサイズは30分の1。最後は信頼性には欠けるから実用的かはやや疑問。
    • スループットについてもlz4, snappyのほうが効果が出てくる。
  • WAL圧縮:レプリ構成だと効果絶大。
  • @kkaigai 圧縮率は実データで見てみないとちょっと判断つかないかも。ランダムデータだと圧縮率は厳しくなると思うので。
  • @kuwaccho0711 ディスク容量、I/O負荷が抑えられたりレプリケーション時に転送量が減らせるのは確かにメリット。
  • @kasa_zip WALセグメントサイズ16MBから増やすなど、ベースを変えて圧縮してみると、何か面白い性能特性を見せるのだろうか・・
  • WAL圧縮:どの圧縮アルゴリズムを採用するかで議論になっている。まだ、道のりは長い・・・。
    • @kuwaccho0711 圧縮方式をどうするか、圧縮アルゴリズム自体を実装しないといけないけどどうするか、リカバリ時の展開方法、pg_xlogdump対応など課題も多い
  • @kuwaccho0711 WALの暗号化は? ⇒ そもそもWAL以外の暗号化も含めて考えないといけない。

圧縮のタイミングは? ⇒ WALへの書き出し時

  • 9.5向け提案:スタンバイ側でのWALアーカイブ、即時マスタ昇格、最新txのコミット時刻を返却。
clogをSQLで見てみる
  • 笠原さんの発表はじまた。clogとプロシージャで情報を吸い上げる話。緩い話とのこと。・・・いや・・・ゆるくないでしょ・・・w
  • @s87 XIDからトランザクションステータスを見る、「ユルい」話です。
  • トランザクションIDが決まると、どのclogどこを読めば良いかは特定できる。
  • SQLレイヤでトランザクション状態を読み取るという荒業。
  • デモ:INSERT⇒COMMIT直後でプロシージャを叩くと、ファイル上はまだコミット状態が反映されてないので、IN PROGRESSになる。CHECKPOINT打つとコミット状態になる。
  • ネタだけど濃いなあ。応用すればテーブルやインデックスファイルを直接読んでSQLで表示みたいなことも出来るかも。
  • @s87 CLOGは動作中は共有メモリ上にあり一定量の専用バッファがLRU管理されている。CHECKPOINTで内容がファイルに書き出される。
    • 質疑応答もゆるくないじゃないですか、やだー!
  • @kasa_zip clogの話が重くなってしまった・・・
ETLツール
  • 川崎さんのETLツールの話。データベース移行に関わる重要な話かも。
  • @kuwaccho0711 ETL使ってますか?ちなみに私はありません。
  • 右側はETLツールのデモかなあ?なんてETLツールなんだろう(遠くてよく見えない)
  • 最後にオープンソースBI勉強会とオープンソースカンファレンス2014 Tokyoの告知。
Google BigQueryを使ってみよう
  • Google BigQueryを使ってみよう@永安さん JPUG理事長による、PostgreSQLでない話w
    • PostgreSQLに限定せずいろんな手法を知っておくのは大事だよなあ。
  • @kasa_zip Big Query の話は入門編的な感じ。とっかかりが欲しい人には嬉しい。
  • デモでトラブってるw
  • BigQuery FDW作成の構想。次回のアンカンファレンスでは聞けるのかな〜
  • @kasa_zip Big Queryの方、気づいたら DB2 BLU の話になってた
藤井さんのTODO一覧
  • @kasa_zip 自身のTODOを紹介したうえで、誰か作ってくれませんかという提案がされている・・
  • @kasa_zip Parallel recovery は難しいですね
  • あ、監査機能の話きた。>藤井さんTODO
  • @kasa_zip レプリケーション関連の監査は弱いので強化したい。pg_basebackupの実施のログとか
  • @kasa_zip Client 機能として バックアップ を中心とした TODO
  • @kasa_zip 差分バックアップは欲しいな・・
    • @kasa_zip pg_basebackup は tar の仕様上、DBクラスタ配下に4GBを超えるファイル(巨大なログファイルなど)があるとコケる。

懇親会

  • 会場はアシストさんの目の前にある「上海ブギ 市ヶ谷店」
    • 十数人くらい来たかなー?
    • 19:00まではドリンクが安い!
    • 餃子ウマー。食べ物も良かったですね。
  • 飲み会の席の話なので、話題はうろ覚えですが・・・
    • 系統立って基礎を学びたいけど、なかなかリーマンだと難しいよね。
    • 医療の闇は深い(かもしれない)・・・
    • パスポート持ちなさいよ、とまた説教されたw
    • F井さんとS田さんのI井さんに対する態度は、まるでお父さんとお兄さんであるw
  • この日は健全に(?)一次会で帰りました。