fnwiyaBlog

EmacsとかLispとか可視化とか

第34回 PostgreSQL 勉強会に行ってきた

connpass.com

に行ってきましたので参加メモです。
ツイッターでのハッシュタグ
https://twitter.com/hashtag/jpug_study?src=hash


PostgreSQL9.6 パラレルクエリの本当のところ

自己紹介

  • ユーザー会理事/EDB Postgresの技術支援担当
  • 普及頑張る
    • 初心者向け
    • 地方需要
    • エコシステム拡大

EDB

オープンソースではない?
→postgres本体へのフィードバックをしている。 - オラクル互換 - 周辺ツール

パラレルクエリに期待される効果

他のDBだと昔からあった。
大規模データをデータベース・サーバー内(In-Database)で処理する。

ポストグレスの進化

  • 大規模サーバーを使いこなす
  • データ分析基盤
  • 多様なデータを扱う ->9.6である意味達成

パラレルクエリの動作

  • 並列度のパラメータを設定すれば使える。(EDBならヒントを書ける)
  • 自動的にworkerが立ち上がりgatherで集約する。
  • その他細かいパラメータあり(テーブルサイズや初動コストなど)
  • パラレルクエリを使う以上INDEXスキャンはできない(Seq-Scanのみ)
  • 実行計画的には
    • 並列に集計: Parallel Seq Scan (loops=7)&Partial Aggreagate(rows=7)
    • 結果を集めて: Gather(rows=1)
    • 全体を集計: Finalize Aggregate (rows=1)
  • パーティショニングした場合は起動済みのワーカーが各子表をみにいく

パラレルクエリの課題

  • 思いどおりにならない並列度

    • 並列度はテーブルサイズで決定されるがそれだけではない?
      • EDBならヒントでパラレる→けど遅くなる
      • Gatherでみる行数が大きくなるとだめ
      • postgresでもパラレルの上限を決められるためALTER TABELで0にすればパラレルを抑止できる
    • ディスクソートをメモリソートにしたらパラれなくなった。。。
      • EDBならヒントでパラレる→効果はあんまり
      • まだ解決策はない
  • 期待通りになれば効果はある。しかし期待通りにはなかなかならない。

  • 制限事項
    • Mビュー更新で使えない
      • psqlで結果をファイルに吐く
      • プログラム側で配列に保存する

(おまけ)EDBはコア課金でだいたい100万ぐらい?


DBAサバイバルガイド~「pg_stats_reporterで性能トラブルを洗い出せ」

pg_stats_reporterの良さ

みんなで幸せになろうよ

  • 技術内閣制度で事業部横断
  • ログが増えすぎ問題→冗長なログを切り捨てる。
  • オレオレ設定
log_min_duration_statement = 10
log_statement = 'none'
pg_statsinfo.snapshot_interval = 5min
pg_statsinfo.stat_statements_exclude_users = ‘postgres'
pg_statsinfo.stat_statements_max = 1000
CREATE EXTENSION pg_stat_statements;

みんなで幸せになろうよ

  • pg_stats_reporterがあると実測コード読まなくても問題点がわかる
  • DB読影
    • みんなでレポートの画面をみる
    • 職人技の伝承もできる
  • オレオレ分析優先順位
別サービスからSOSで、pg_stats_reporterを診た。読影会でも、Qiitaでも共有したけど、Long Transactions - Statements - Heavily Accessed Tables - Indexの順でみてけば、大概わかるよ。

— masuda kaz (@masudakz) 2016年9月22日
pg_stats_reporterのLong Transactions/Statements でクエリ特定して、H.A.TでSeq.ScanになってるTABLE特定して、結合条件列がIndexになかったら、Gotcha! 簡単だよー

— masuda kaz (@masudakz) 2016年9月22日

PostgreSQL 10: What to look for?

  • 講演者:Amit Langote 氏(NTT OSSセンタ)
  • 講演資料:

  • バージョンのナンバリング方式が変わります。2017年は10.0、2018年は11.0

  • 新機能
    • ロジカルレプリケーション(http://qiita.com/bwtakacy/items/d8461518a1770524e0d6)がコアに追加
    • パラレルクエリの適用範囲が広がる
      • Merge Join
      • Hash
      • Bitmap Index Scan
      • ...etc
    • 宣言的パーティショニング(疑似でない)
    • 統計情報の改善
      • CREATE STATISTICS
    • UPDATE時にINDEXの更新をしなくて良いようにする

    • プロセッサの改善

      • recursive->pipeline
    • replicationとbackupのデフォルト設定変わります

Q&A


感想

パラレルクエリに関して現状だと使い所が難しいなと思っていましたが、
気をつけるべき点などがわかりさらに10.0で利用可能範囲が広がるとのことで期待大です。
読影会はぜひ会社でもやってみたいですね。
全体としては知らなかった概念にたくさんぶつかれたので知識が広がって楽しかったです。
運営&発表者のみなさんありがとうございました。
控えめに言ってJPUGは最高。