第34回 PostgreSQL 勉強会に行ってきた
に行ってきましたので参加メモです。
ツイッターでのハッシュタグは
https://twitter.com/hashtag/jpug_study?src=hash
PostgreSQL9.6 パラレルクエリの本当のところ
- 講演者:喜田 紘介 氏(株式会社 アシスト)
- 講演資料:http://www.slideshare.net/kkida85/jpug-studypq-20170121
自己紹介
- ユーザー会理事/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で結果をファイルに吐く
- プログラム側で配列に保存する
- Mビュー更新で使えない
(おまけ)EDBはコア課金でだいたい100万ぐらい?
DBAサバイバルガイド~「pg_stats_reporterで性能トラブルを洗い出せ」
- 講演者:増田 和弘氏(株式会社 ジャストシステム)
- 講演資料:http://qiita.com/masudakz/items/b3226ba0c1753ad1538d
pg_stats_reporterの良さ
- pg_stats_reporter以前はgrepで頑張ってた
- まずやっとく PostgreSQLのチューニング http://dbstudychugoku.github.io/pdf/20140713_postgre_tuning.pdf
- serverに入らなくていいのでセキュリティの観点でも良い
- 性能テストにはなかなか手がまわないがSlow Queryの可視化ができる
- 早めにSlow Query潰せるのが良い
みんなで幸せになろうよ
- 技術内閣制度で事業部横断
- ログが増えすぎ問題→冗長なログを切り捨てる。
- オレオレ設定
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の更新をしなくて良いようにする
- WARM(Write Amplification Reduction Method): HOTの改良
- indirect index: セカンダリインデックス?
- Uber shockを受けて https://eng.uber.com/mysql-migration/
プロセッサの改善
- recursive->pipeline
- replicationとbackupのデフォルト設定変わります
Q&A
感想
パラレルクエリに関して現状だと使い所が難しいなと思っていましたが、
気をつけるべき点などがわかりさらに10.0で利用可能範囲が広がるとのことで期待大です。
読影会はぜひ会社でもやってみたいですね。
全体としては知らなかった概念にたくさんぶつかれたので知識が広がって楽しかったです。
運営&発表者のみなさんありがとうございました。
控えめに言ってJPUGは最高。