PGCon2013

ということで2013-11-08に開催された、PostgreSQLカンファレンス2013 | 日本PostgreSQLユーザ会に行ってきましたよ。
今回は聞くだけではなく、最後にちょっとだけ喋らせてもらった。

会場の様子など

  • 11:00時点での入場者は220名くらいとの連絡あり。

K1 PostgreSQL 9.4 and the Postgres community

  • Peter氏の自己紹介
    • ここでI垣さんの名前が出てくるとは・・・
    • UPSERT機能に関与しているのかー。
    • UPSERTは同時実行性の問題が重く、見た目ほど簡単な機能ではない。
      • そういえばMERGEじゃなくてUPSERTなんだな。
    • データベースはコンピュータサイエンスと深く関わりがあるので、やりたかった。
    • さらにPostgreSQLOSSプロジェクトの中でもコードのクオリティは非常に高い、きちんと議論ができるのが良いというPeterさんの感想。
    • HyperLogLogって何だろう・・・
    • pg_stat_statementでクエリが1024文字でtruncされてしまう件。Herokuの顧客からそういうクレームがあったので、今取り組んでいると。
  • ここで過去の歴史の話。
    • POSTGRESプロジェクトの話から。カスタムデータタイプ、カスタムインデックスに対応できるようにという発想は最初からあったと。
  • 他のオープンソースプロジェクトとの連携。例としてPostGISなど。そしてロジカルレプリケーションの話につづく。
  • ロジカルレプリケーションは9.4に取り込もうとしている。WALを論理的な形式にデコードするプラグイン化を可能とすると。
  • 次はWriteable FDWの話。そういえば9.4でも何か拡張するのかな?
  • 次はJSON型の話。そういえば今日は後でJSON型を使ったというセッションがあるんだよなー。
    • plv8とJSON型との組み合わせかー。そういえば、plv8ってきちんと使ったことないんだよなー。
    • ふむ。JSONのバイナリ表現形式かあ。XMLもEXIみたいなバイナリ表現対応で、この先生きのこることは出来るだろうか。
    • hstoreと同じ内部形式になるのか。>9.4 JSON GIN/GiSTがサポートされればインデクスを使った検索もできる。hstoreとの棲み分けはどうなるのかな。
    • (@kasa_zip さんのツイート) pg_msgpack提案したらうけるのではないか・・ 9.4におけるJSONのバイナリ表現についての議論
    • JSON CRUD? 効率よいJSON型更新のための演算をするってことなんだろうか。
  • (質問者は石井さん) QA. 9.4のレプリケーションの論理的な更新情報はSQLみたいなもの?→SQLのようなものではない。人が変分を読んで理解できるような表現にする。WALをよりリッチにするというイメージ。(合ってるかな?)
  • (質問者はK.Sさん?) QA. JSONのバイナリ形式についてkwsk→内部表現は非常にコンパクトな表現になる。既存のhstoreモジュールを応用する?
    • で、データタイプ的な考えは結局持たないんだっけ?

K2 企業内でPostgreSQLの活用を推進するポイント

  • テーマはPostgreSQLOracleとの併存か。
  • OSS-DBの利用は2010年から2012年で比較すれば増えてはいる。でも、グラフを見るとやっぱりOracleのシェアは強いなあ。
  • アシストではコンサルティングで、Oracleなどの商用DBとOSS-DBの棲み分けを考えている。これが今日の話のテーマ。
  • あー、なんか以前、こんなの作っていたよーな・・・w>比較シート
  • コンサルの一環で、非機能要件(可用性とか)をまとめた適用ルールの作成も支援している。
  • アシスト側ではシステム側のコード修正はしない。SQL互換性、データ移行方法などをレクチャして、不明点があればQA対応するというスタンス。
  • コンサルサービスでOracle/PostgreSQLなどの選定をするというのは、個人に依存しない、評価のための一定のモノサシを与えるというとこに意義があると。ふむ。
  • OraclePostgreSQLの諸々の違いの話。
    • いっつも思うけど、長さ0の文字列をnullとして扱うOracleはやっぱり変だと想う。
      • (@h141gm さんのツイート) OraclePostgreSQLのnullと空文字の悩ましい問題。 Oracleのマニュアルの将来的には云々てヤツ、書いてるだけで絶対変える気ないやろw
    • PostgreSQLパーティションに対する特定検索パターンでの注意点。副問い合わせ、not in + 副問い合わせのパターンなど。
  • 適用指標ガイドラインを使って評価することで、移行に反対する社内の抵抗勢力(?)に対する武器にもなる。
    • 移行成功の事例があるとないとでは、社内での説得力がやっぱり違うんだろうなー。
  • 完全移行ではなく併用という動きになるのでは?という話なんだけど、それってどうなんだろう?もうベンダロックイン脱却・コスト削減というのは移行の観点としては重視されないってことなのかな?
  • いきなり「SQL逆引き大全」を巡るじゃんけん大会が・・・w
  • QA. PostgreSQLが増えてきてるけど、Oracleの利用もキープしている?どう解釈すべき?→社内で使っているDBMSの率なので、Oracleが減っているようには見えない。今はOracleからの移行が始まったばかりという感触である。

B1 pg_statsinfoとpg_stat_reporter

  • 午後からのセッション待機。最初はB1のpg_stats_*
  • ほおー、近藤さんって元々は言語処理とか機会学習の人だったのか。
  • 取得情報のうち統計情報コレクタ収集対象の詳細はPostgreSQL文書参照・・・説明ぶん投げw あとは特定ログ、/procのリソース情報など。
  • コマンドラインから簡易レポートを取れるのは何気にありがたいかも。>pg_statsinfo
  • pg_statsinfoはパーティション化した子テーブルをtruncateするだけ。
    • だから削除が高速ということ。
  • 特定のログのログレベルを変更したいなんてニーズにも応えている・・・だと・・・。そういうユーザがいるのか。
  • アラート関数はメール通知(や、たぶんSNMP通知)をするわけじゃなくて、ログに出力する機能。他の監視ミドルとの連携が必要ってことか。
    • デモ
    • これからpg_statsinfoのデモ。RPMインストールのところから。収集対象はPostgreSQL 9.3。
    • pg_statinfoの設定。マニュアルから設定値をコピペする。ある意味正しいやり方だw
    • ちょw 起動失敗w 9.3以降不要になったパラメータが残っていたためらしい。
    • スナップショットは自動取得だけでなく、-Sオプションつきで手動取得も可能。
    • pg_statsinfoのデモ・・・何故か動かない。イギリスでは動いていたのに・・・ってどういうことなのw
  • 後半はpg_stats_reporterの説明。統計情報だけでなく、WAL出力量、レプリケーション状況、デッドロック情報も可視化できる。pg_reporterを作りなおした。
  • pg_stats_reporterはLAPP構成。MVCなので外見だけ改善したいというパッチもOK。IEだと多分動かないらしい。
    • (中の人からコメント) IEは、8と9では動きましたよ? 10以降は不明ですが
  • pg_reporterのデモは(さっき取得できなかったからだろうけど)、モックでの画面説明。
  • コマンドラインでレポートを作ることもできる。レポートインデックス機能で、過去のレポート一覧を生成される。
  • Android/iPadでレポートを見せることも可能。タブレットで見せると確かに受けはよさそうだ。
  • DBT-2をネタにpg_statsinfo/pg_stats_reporterで検証した結果の説明。
    • 最初のほうのCHECKPOINT(データロードの背景)はfull-page-writeにより大量にWALが出力されるということらしい。後のCHECKPOINTで区間は、そんなにWALはでていない。
    • CHECKPOINT自体はゆるゆる書き出す設定ではあるが、それでも最後の処理でfsync()連打によりLoad Averageが高くなってしまうと。
    • COMMITに時間がかかるケースって、結構こっちでも高負荷時に発生したからなー。これもWAL書き込みやCHECKPOINTのfsyncのI/O詰まりが原因ではないかというのが、近藤さんの推測。
  • 最近近藤さんが手がけたdirect_cpの話。これはファイルキャッシュを汚さずにアーカイブのコピーをするものらしい。どのくらい効果があったのかなー?
  • QA. Background Worker Process化はするの? という質問をしたかったんだけど、質問タイムがなくなった・・・
    • (中の人からコメント) とりあえず、今のところは、旧バージョンのPostgreSQLで動かせなくなるので、考えてないですよ? PostgreSQL 9.3以降版pg_statsinfoを一から作るなら対応できるでしょうねぇ

A2 PostgreSQLヘルスケアデータベースの構築

  • 次のセッションはA2 ヘルスケアデータベース。医療系の分野でどうPostgreSQLを活用しているのか。楽しみ。
  • データ分析系でPostgreSQLをどう使うか、という話。そして、データ分析に関する話。
  • 今回のプレゼンはミナケアの人材探しも兼ねているとw
  • 永安さんの役割はミナケアで使うデータベース構築、突合処理などデータベースやシステムに関わるもろもろ。ミナケア内ではIT技術者は永安さんのみとのこと。
  • 開発の経緯
    • レセプトや健康診断のCSVExcelで分析、というのを最初はやっていた。
    • 次のフェーズではCSVからPostgreSQLにデータを投入するようになった。分析はExcel。しかしこのプロダクトは黒歴史に・・・
    • で、システムを作りなおしたっぽい。分析にはExcelだけでなくSQLやRも使うように。
  • バッドデータの話
    • 医療系の各種データはバッドデータだらけ!という話。
    • バッドデータハンドブック、きちんと読んでみたいな・・・。検証とかだと自分で作った綺麗なデータしか見ないからなあ・・・
    • numericカラムに漢字が入っているとかw バッドデータこわひ・・・
      • (@kkaigai さんからのツイート) ゆるい numeric_in が必要ですね!
      • あら?海外さんからテーマが提示されたw
    • バッドデータって「稀によくある」んだろうなあ・・・
    • Excelの柔軟性はバッドデータを生み出すってのは分かる気がするなー
  • 開発に関するもろもろの話
    • (@kasa_zip さんのツイート) SSDとか高価だけど、解析する人の人件費考えると回収期間は意外と短い
    • 簡単に構築できるようにPerl/Ruby/SQLなどでシンプルに作成している。アルバイトの学生さんでもすぐに読める、コピペして拡張できる、という簡便さが重要ってことか。
    • grep関数!複数テーブルの一括検索するユーザ定義関数を作ったと。
    • pg_regressの仕組みを応用してPostgreSQL関数のユニットテストをやっている。
  • (@kasa_zip さんのツイート) PostgreSQLを使うメリット SQL, JOIN, Deploy, LLとの親和性, 学習コストが低い など
    • (@hayamiz さんのツイート)「世の中にnested loop joinしかないDBMSっていうのがあるらしくて」 Mのことですね、わかります
  • (@kasa_zip さんのツイート) 最初はrobust、じょじょにstrictに・・いきなりデータ型などを厳格にしない方が良い。
    • 最初は全部textという割り切りもありなのかあ。
  • システム構築期間中は利益に貢献していない。だからすぐ動かせるものを作って、それを繰り返すと。
    • これ、うちらみたいな研究系受託開発だと忘れがちなんだよね・・・
  • (@kasa_zip さんのツイート) こういう健診データとか、hstoreやJSONのような非構造データが今後はまっていくのでは・・・それともどっかでフォーマットがガチガチに決まっていて駄目かな・・
    • キー表記もが微妙に違うバッドデータの予感・・・w
  • (@kasa_zip さんのツイート) 今後、カラムストア(Monet)、パーティショニング、並列化(独自mapreduce)、統計機能強化(madlibとか)、ジョブ管理(Jenkins - エンドユーザがクエリを再実行・・など)
    • 集計系だとカラムストアとの連携はやっぱりあるかなあ。そういえば @snaga さんはMonetDB FDWも作っていたし。

B3 GresCube

  • 次はB3 GresCubeの話。
  • GresCubeで使っているPostgreSQLは手を加えずにコミュニティ版をそのまま使っている。
  • 製品だけでなく、NTTDATAのサポートも込みでGresCubeであると。もうすぐ販売開始。
    • あれか、「俺が、俺達がGresBubeだ!」ってことか(違
  • GresCubeでなくてもPostgreSQLを使ってもらうだけでも、エバンジェリスト的には嬉しいと。
  • 最初は99.999%の可用性実現の話。9.3(対応予定)SRでHA対応。ただHAの設定は大変なのでGresCubeでは設定込みで提供。
  • 性能の安定化はpg_hint_planで対応。システムのユーザは限界性能ではなく安定した性能を望んでいる。
  • ヒアリングシートからインストールDVDを作成して、それをインストールするだけで使えるようにする。
    • メジャーバージョンアップの対応とかはどうするのかなー。
  • 運用者向けにGUIベースの統合運用画面を提供。フェイルオーバからの復旧をGUIでサポート。
  • そしてGresCubeのデモ。
    • 最初のデモ(動画)はフェイルオーバをGUIから行う例。次のデモはバックアップスケジュールの設定。最後はpostgresql.confの変更。
  • 解析情報収集サポート
    • 解析情報の収集を楽にする工夫は重要だよなー。具体的には何処までの情報を収集しているんだろう?
  • アップデート情報の通知
    • アップデート情報の選択かあ。PostgreSQLならともかく、PaceMakerとかOSとか自分ではわからんもんなあ。こういうサービスというのもありか。
  • オンラインパッチ
    • SystemTapで特定のパッチをオンラインで修正とかもするのか。
    • でも、SystemTapは万能ではないしオーバヘッドもあるので注意。
  • 今後の改善
    • ほお、実行計画の定期収集ツールの開発とな。
    • 9.4にフェイルバック改善も取り込もうと考えている。
  • でもお高いんでしょ?
    • GresCubeのお値段は検討中・・・
    • 懇親会の席で澤田さんに、月300円、pg_bigmのみサポートモードなら買う、と伝えたw
    • あと、textsearch_jaサポートもw
  • QA. フェイルバック対応の開発状況は? Fast Failback というタイトルで議論中。pg_rewindとの連携も考えている。

A4 PostgreSQLでオープンデータ XML/JSONを使いこなす

  • 最後はA4 XML/JSON
  • 総務省の次世代統計利用システムは、XML/JSONに膨大・複雑な情報を格納しようとしている。これをPostgreSQLで使いたい。
    • XML/JSONサンプルデータとしてとりあえずは使ってみなくちゃなあ・・・
  • アプリケーションID取得のための名前やURLはテキトーで良い。それを取得すればhttpアクセスで取得可能。
  • 以前、Neo4j Cypher実行SQL関数を作った時にlibcurlを使ったから、これをちょっと改造して、XML取得/JSON取得関数を作るか。
  • なんと! COPY ・・・ PROGRAMなんて構文が追加されていたのか。知らんかった・・・
  • 以前作ったxml_fdwを改善したら、すぐにできるかなぁ。 RT @kasa_zip: cURL+psqlで加工できる。 ・・・これtwitter_fdwみたいに FDWでやったら嬉しいんじゃまいか?
    • (@kasa_zip さんのツイート) webアクセス部分だけちょっとめんどそうですけど、出来る気がしますよ
      • カラムとxpathをバインドする部分は作っていたけど、Where句をxpath述語に落とすのが面倒なんですよね・・・
    • (@s87さんのツイート) メタデータから外部テーブル自動定義、とかもできそうですね
  • PL/Rを使って、SQLを書いて、そのままplot()を使って結果のグラフ出力をできる。
    • やっぱり、きちんとPL/R勉強しようかな・・・
  • 次の話題はメッシュデータをPostGISで使う例。これもDL出来る。3年分、3項目で250MBくらいなのか。
  • PostGIS, PL/Python, PL/R の組み合わせでPostGISラスタの可視化を行う。
  • 厄介なデータ。ここでもバッドデータなネタが・・・
    • 公的統計データ、なかなか面白いなあ。でも、用語の定義とかいろいろ考えないといけないことあるなあ・・・。
    • 平成の大合併って都道府県をまたがるようなケースもあったのか・・・(PostgreSQLとは関係ないけど)
    • (@yancya さんのツイート) 国勢調査では、沖縄県から「他県へ、徒歩だけで」通勤する人が100人以上いる結果にw
    • (@kasa_zip さんのツイート) 沖縄には烈 海王がいるんかいなww
  • QA. JSONを使うDBとしてMongoとPostgreSQLのどっちを使う?と聞かれたときは?→PostgreSQLPostGISやPL/Rのような外部連携の良さで評価した。

Lightning Talk

L1 LISTEN/NOTIFYの間違った使い方
L2 DBスキーマをバージョン管理したい!
  • くわたさんのトーク
  • DBスキーマのバージョン管理をしている人はほとんどいない・・・石井さんも「そんなものはない」
  • Ruby on Railsによるバージョンの管理
    • テーブルの追加・削除をのトラッキングを可能とする。
L3 #define NUM_BUFFER_PARTITIONS 16
  • 次は堀川さんの "define NUM_BUFFER_PARTITIONS 16"
  • 勉強会に出ていないと分かりにくい話かも・・・
  • コア数が100とかいう化物マシンならNUM_BUFFER_PARTITIONSを増やしましょうねという話。
  • いきなり濃い話だ・・・だがそれがいい
L4 pg_rewind
  • (@kasa_zip さんのツイート) pg_rewindは、レプリケーション切り替え後のolda masterをnew master のtimelineに載せて追随できるようにするため、特定時点までのXlogに巻き戻すためのツール
    • pg_rewind はいくつか制約がある。テーブルスペースは未対応とか・・・

懇親会以降

  • 懇親会は50名くらい?立食パーティー
  • 途中、じゃんけん大会あり。
  • 2次会は東京駅近くの居酒屋(名前忘れた・・・)。20名以上いたw