Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

PostgreSQL 9.6 新機能紹介

14.645 Aufrufe

Veröffentlicht am

NTTデータ オープンソースンDAY 2016の講演で使用したPostgreSQL 9.6の新機能紹介資料です。

Veröffentlicht in: Software
  • Dating direct: ♥♥♥ http://bit.ly/2Q98JRS ♥♥♥
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/2Q98JRS ♥♥♥
       Antworten 
    Sind Sie sicher, dass Sie …  Ja  Nein
    Ihre Nachricht erscheint hier

PostgreSQL 9.6 新機能紹介

  1. 1. Copyright©2016 NTT corp. All Rights Reserved. 祝リリース!PostgreSQL 9.6新機能紹介! ~長年待ち望まれてきた機能から、NTTデータ、NTTOSSセン タがホンキで開発貢献した機能までトコトン解説~ 日本電信電話株式会社 NTTオープンソースソフトウェアセンタ 澤田 雅彦 @NTTデータオープンソースDAY 2016 (11/16)
  2. 2. 2Copyright©2016 NTT corp. All Rights Reserved. 1. PostgreSQLについて簡単に紹介 2. PostgreSQL9.6新機能紹介 3. 今後のPostgreSQL 4. まとめ 目次
  3. 3. 3Copyright©2016 NTT corp. All Rights Reserved. • PostgreSQL Global Development Groupが主体となり開発 • 1994年にSQLをサポートし、1996年にPostgreSQLに名前 を変えた • 今年20周年 • 最新バージョンは9.6.1 (10/27リリース) • 同時に9.1系がEOL PostgreSQLとは?
  4. 4. 4Copyright©2016 NTT corp. All Rights Reserved. • Uberの記事 (7月26日) • “Why Uber Engineering Switched from Postgres to MySQL” • 初PGConf.ASIA 2016開催予定 (12月1,2,3日@秋葉原) • アジアを横断したPostgreSQLの国際カンファレンス • 第二回PgDay Asia 2017開催予定(2017年3月@シンガポール) • アジアを横断したPostgreSQLの国際カンファレンス 最近話題になっているPostgreSQL
  5. 5. 5Copyright©2016 NTT corp. All Rights Reserved. PostgreSQL 9.6新機能紹介
  6. 6. 6Copyright©2016 NTT corp. All Rights Reserved. 2011 2012 2013 PostgreSQLは、年1回のメジャーバージョンアップをし ています。 PostgreSQLのこれまで 9.1 (2011-09) ・同期レプリケーション 9.2 (2012-09) ・大幅な性能向上 9.3 (2013-09) ・マテリアライズドビューの実装 ・更新可能ビューの実装 ・フェイルオーバ時間の大幅な短縮 ・DDLトリガの実装 2014 9.4(2014-12) ・更新ログの書き出し性能向上 ・マテリアライズドビューの改善 ・遅延レプリケーションの実装 ・ロジカルデコーディングの実装 2015 9.6(2016-9) ・パラレルクエリ ・VACUUM性能向上 ・マルチ同期レプリケーション ・FDW強化 本日ご紹介部分 2016 9.5(2016-1) ・UPSERTの実装 ・BRINの実装 ・Row-Level Securityの実装 ・pg_rewindのコア機能化 ・同時実行性の改善
  7. 7. 7Copyright©2016 NTT corp. All Rights Reserved. 主要機能を解説します 性能向上 • パラレルクエリ VACUUMの性能、運用性向上 • Freeze Map • VACUUM進捗 レプリケーション • マルチ同期レプリケーション 外部データ連携(FDW) • FDW強化
  8. 8. 8Copyright©2016 NTT corp. All Rights Reserved. パラレルクエリ (Robert Haas, Amit Kapila, David Rowley, many others) “Parallelism” by Maciej Meller
  9. 9. 9Copyright©2016 NTT corp. All Rights Reserved. 多くのユーザが待ち望んでいた機能の一つ https://postgresql.uservoice.com/forums/21853-general
  10. 10. 10Copyright©2016 NTT corp. All Rights Reserved. CPU パラレルクエリってどんな機能? -これまでのPG - サーバプロセス 巨大なテーブル SELECT * FROM tbl; • 1つのSQLを1つのプロセスでしか処理できない • 巨大なテーブルを扱うと、処理に時間がかかってしまう • 特に集計、結合処理を行うと1プロセスにかかる負担は増大する スキャン
  11. 11. 11Copyright©2016 NTT corp. All Rights Reserved. CPU CPU CPU サーバプロセス パラレルクエリってどんな機能? 巨大なテーブル SELECT * FROM tbl; サーバプロセス サーバプロセス スキャン スキャン スキャン 連携 連携 • 1つのSQLを複数のプロセスで分担して処理できる • 1つのSQL処理速度が向上する • CPUリソースを効率的に使うことができる • パラレルクエリはシーケンシャルスキャン、結合処理、集計処理で有効
  12. 12. 12Copyright©2016 NTT corp. All Rights Reserved. パラレルクエリ実現には以下の機能が必要 ① 実際に処理を行うプロセスを制御する機能 ② プロセス間のコミュニケーション領域を作る機能 ③ 並列処理中は一貫した情報を見えるようにする機能 ④ 並列結果をまとめる機能 ⑤ 並列処理を意識した実行計画を立てる PostgreSQLコミュニティが長年準備してきた機能の一つ PG9.3 (2013) PG9.4 (2014) ① ワーカープロセスを 動的に起動可能 ② 共有メモリを動的 に確保可能 ③ ワーカープロセス で一貫した情報 がみれる機能 ④ 並列処理結果をまと める機能 ⑤ 並列処理を意識した 実行計画を立てる ① 独自のワーカー プロセスが定義、 起動可能 完成 PG9.5 (2015) PG9.6 (2016)
  13. 13. 13Copyright©2016 NTT corp. All Rights Reserved. 9.6でパラレル(並列)処理できるのは、 検索と集計と結合 何がパラレルになる? Seq Scan Nested Loop Join Hash Join avg() min() max() count() など
  14. 14. 14Copyright©2016 NTT corp. All Rights Reserved. これまでの集計処理 集計 (Agg) 集計 結果 テーブルスキャン (SeqScan) テーブル =# SELECT count(*) FROM test_table; 1プロセスで スキャン、集計を 実施
  15. 15. 15Copyright©2016 NTT corp. All Rights Reserved. 集計処理の並列化 部分集計 (Partial Agg) 部分集計 (Partial Agg) 部分集計 (Partial Agg) 集める (Gather) 集計 結果 集計 結果 集計 結果 集計 結果 テーブルスキャン (Partial SeqScan) テーブルスキャン (Partial SeqScan) テーブルスキャン (Partial SeqScan) 集計 結果 集計 結果 テーブル 集計 結果 • テーブルスキャン、集計を並列で実行可能 • 各プロセスで部分的な集計を行い、最後に結果をまとめる 行数/3 行数/3 行数/3 最終集計 (Final Agg)
  16. 16. 16Copyright©2016 NTT corp. All Rights Reserved. これまでの結合処理 結合 (Nested Loop Join) テーブルスキャン (Partial SeqScan) インデックススキャン (IndexScan) 内部表 外部表 =# SELECT id FROM hoge h, bar b WHERE h.id = b.id;
  17. 17. 17Copyright©2016 NTT corp. All Rights Reserved. 結合処理の並列化 結合 (Nested Loop Join) テーブルスキャン (Partial SeqScan) インデックススキャン (IndexScan) 結合 (Nested Loop Join) テーブルスキャン (Partial SeqScan) インデックススキャン (IndexScan) 内部表 内部表 結果をまとめる (Gather) 外部表 • 各プロセスで外部表のスキャン、内部表との結合を実施 • Hash Joinも並列実行可能 行数/2 行数/2
  18. 18. 18Copyright©2016 NTT corp. All Rights Reserved. • クエリ実行の並列度を変えて全件スキャンを実施 • CPUコア数分(並列度4)までクエリが高速化した どれくらい速くなる? 0 5 10 15 20 25 1 2 3 4 5 実行時間(秒) 並列度 13GBテーブルの全件スキャン CPU:4コア メモリ:32GB 約1/4の 実行時間
  19. 19. 19Copyright©2016 NTT corp. All Rights Reserved. • 並列度決定に物理CPU数は考慮されない • テーブルサイズを元に並列度を算出 • CPUコア数以上の並列度が設定されないように • ディスクI/Oに気を使おう! 使用上の注意点
  20. 20. 20Copyright©2016 NTT corp. All Rights Reserved. • 1つのSQL処理を複数のCPUで並列に実行 • 1つのSQL処理速度を上げる機能 • Seq Scan、Nested Loop Join、Hash Join、集計が対応 • 更新、削除、ソート、Merge Join、Index Scanは未対応 • 「並列に処理する実行計画」も含み、最適な実行計画が選択 される • “パラレルクエリを使った方が遅い”と判断されることも • 並列度はテーブルサイズを元に設定される 絶賛機能、性能検証中! 詳しい情報は随時発信していきます! パラレルクエリ まとめ
  21. 21. 21Copyright©2016 NTT corp. All Rights Reserved. PostgreSQLが管理するトランザクションIDのメンテナン スのために、定期的(デフォルトでは2億トランザクショ ン毎)にデータベース全体のVACUUMが実行されます。 9.5までのPostgreSQL いつも通りの処理♪ 急にDB全体が 重くなった! 半年後の ある日
  22. 22. 22Copyright©2016 NTT corp. All Rights Reserved. =# SELECT pid, state, now() – query_start as duration, query FROM pg_stat_activity; -[ RECORD 1 ]--------------------------------------- pid | 43556 query | autovacuum: VACUUM | public.very_large_table (to prevent | wraparound) state | active duration | 5 days 18:50:44.256561 ② 5日間以上 VACUUM 実行中 PostgreSQLで実行されているSQLの状況を見てみると・・・ ① “to prevent wraparound” が付いている
  23. 23. 23Copyright©2016 NTT corp. All Rights Reserved. Freeze Map (Masahiko Sawada, Robert Haas) The Unsung Founders Memorial at UNC. It's an interesting table sculpture dedicated to the men and women of color who helped build the University. by Jed Record
  24. 24. 24Copyright©2016 NTT corp. All Rights Reserved. 非常に重要な機能 (でも内部の細かい話になるので、その重要さが伝わりづらい。。) Freeze Mapとは?
  25. 25. 25Copyright©2016 NTT corp. All Rights Reserved. 内部構造に興味がある方は http://www.slideshare.net/pgdayasia/introduction-to-vacuum-freezing-and-xid
  26. 26. 26Copyright©2016 NTT corp. All Rights Reserved. このVACUUM(通称XID周回防止VACUUM)では全テーブルを問答 無用でフルスキャン • ディスクI/OやCPUを消費 • DBサイズに比例してより大きい影響を受けやすくなる XID周回防止VACUUMがいつ発生するかはPostgreSQL次第 • 繁忙期、閑散期関係なく実行される • ただし、事前に意識的にメンテナンスしておくことで、ある程度制御す ることは可能 キャンセルできるが、実行しないままでいると、PostgreSQLがあ る日突然停止する Q. なぜ今になって解決されたのか?(これまで問題にならなかったのか?) A. 近年DBに格納するデータが大きくなってきたことにより、問題 が顕在化してきたため。 甘く見ていると危険
  27. 27. 27Copyright©2016 NTT corp. All Rights Reserved. • これらの悩みを解消 • デフォルトで有効 • オーバーヘッドを極力少なくなるように実装しているため、新 機能導入によるデメリットはほぼない • OFFにできない • DBMSの重要な部分を改変したため、万が一のときの対 処策も一緒に追加 • pg_visibilityモジュール • pg_truncate_visibility_map • pg_check_visible, pg_check_frozen • VACUUM (DISABLE_PAGE_SKIPPING) Freeze Map
  28. 28. 28Copyright©2016 NTT corp. All Rights Reserved. =# SELECT pid, state, now() – query_start as duration, query FROM pg_stat_activity; -[ RECORD 1 ]--------------------------------------- pid | 43556 query | autovacuum: VACUUM | public.very_large_table (to prevent | wraparound) state | active duration | 5 days 18:50:44.256561 ② 5日間以上 VACUUM 実行中 PostgreSQLで実行されているSQLの状況を見てみると・・・ ① “to prevent wraparound” が付いている
  29. 29. 29Copyright©2016 NTT corp. All Rights Reserved. Vacuum Progress Checker (Amit Langote, Robert Haas, Vinayak Pokale, Rahila Syed)
  30. 30. 30Copyright©2016 NTT corp. All Rights Reserved. • VACUUMの進捗状況をレポートするビューが導入 • どのテーブルのVACUUMが、どれくらい進んでいるのかを数値でレ ポート VACUUMの進捗状況が見える =# ¥d pg_stat_progress_vacuum Column | Type | Modifiers -------------------+---------+---------- pid | integer | datid | oid | datname | name | relid | oid | phase | text | heap_blks_total | bigint | heap_blks_scanned | bigint | heap_blks_vacuumed | bigint | index_vacuum_count | bigint | max_dead_tuples | bigint | num_dead_tuples | bigint |
  31. 31. 31Copyright©2016 NTT corp. All Rights Reserved. =# SELECT pid, datname, relname, ((heap_blks_scanned / heap_blks_total::numeric(10,2)) * 100)::numeric(10,2) as percentage, p.phase, index_vacuum_count FROM pg_stat_progress_vacuum as p, pg_class as c WHERE p.relid = c.oid; -[ RECORD 1 ]------+----------------- pid | 100026 datname | postgres relname | pgbench_accounts percentage | 19.72 phase | scanning heap index_vacuum_count | 10 -[ RECORD 2 ]------+----------------- pid | 100027 datname | postgres relname | very_large_table percentage | 95.12 phase | scanning heap index_vacuum_count | 300 進捗状況の確認やチューニングにも使える 他ビューと組み合わせることで、 ・VACUUM対象のテーブル ・進捗状況(パーセンテージ) ・今何をしているか ・VACUUMの効率 など算出可能
  32. 32. 32Copyright©2016 NTT corp. All Rights Reserved. 主要機能を解説します 性能向上 • パラレルクエリ VACUUMの性能、運用性向上 • Freeze Map • VACUUM進捗 レプリケーション • マルチ同期レプリケーション 外部データ連携(FDW) • FDW強化
  33. 33. 33Copyright©2016 NTT corp. All Rights Reserved. レプリケーション機能の歴史 9.0 (2010) 9.4 (2014) 9.5 (2015) 9.6 (2016) 9.2 (2012) 9.3 (2013) 9.1 (2011) ・同期 レプリケーション ・カスケード レプリケーション ・スタンバイサーバへ の高速切り替え ・レプリケーションスロット ・ロジカルデコーディング ・高速フェイル オーバー M S S M S S レプリケーション機能の拡充、使いやすさの向上 ・非同期 レプリケーション
  34. 34. 34Copyright©2016 NTT corp. All Rights Reserved. マルチ同期レプリケーション (Masahiko Sawada, Beena Emerson, Michael Paquier, Fujii Masao, Kyotaro Horiguchi) Polska > Kraków by antifluor
  35. 35. 35Copyright©2016 NTT corp. All Rights Reserved. 同期レプリケーション http://www.slideshare.net/hadoopxnttdata/postgresql-39739357
  36. 36. 36Copyright©2016 NTT corp. All Rights Reserved. PG9.5 までのレプリケーション マスタ スタンバイ A スタンバイ B スタンバイ C 同期 レプリケーション 非同期 レプリケーション 非同期 レプリケーション • マスタサーバは複数のスタンバイサーバを持つことができるが、同期レプリケーションを使用 できるのは最大1台まで 同期レプリケーションを 使えるのはスタンバイAの1台のみ
  37. 37. 37Copyright©2016 NTT corp. All Rights Reserved. マルチ同期レプリケーション マスタ スタンバイ A スタンバイ B スタンバイ C 同期 レプリケーション 同期 レプリケーション 非同期 レプリケーション • 複数のスタンバイサーバに対して同期レプリケーションを使用可能 • より高可用な構成を組むことが可能に スタンバイAとスタンバイBに 同期レプリケーションを使用
  38. 38. 38Copyright©2016 NTT corp. All Rights Reserved. 構成例 マスタ ● 同期レプリケーションを使用したWAL二重書き込み(pg_receivexlog使用) WAL WAL のみ スタンバイ 同期 レプリケーション 同期 レプリケーション ● 同一DC内に同期スタンバイを複数配置 マスタ スタンバイ スタンバイ 同期 レプリケーション 同期 レプリケーション
  39. 39. 39Copyright©2016 NTT corp. All Rights Reserved. Foreign Data Wrapper(FDW)強化 (Etsuro Fujita, Shigeru Hanada, Ashutosh Bapat) pot shards by psyberartist
  40. 40. 40Copyright©2016 NTT corp. All Rights Reserved. 新機能紹介の前に - Foreign Data Wrapper(FDW)とは? ID, COL 100, 北海道 200, 青森県 id col 100 北海道 200 青森県 id col 100 北海道 200 青森県 PostgreSQL Oracle CSVファイル oracle_fdw file_fdw SELECT id, col FROM tbl 外部データをあたかもPostgreSQLのデータとして扱える機能
  41. 41. 41Copyright©2016 NTT corp. All Rights Reserved. • postgres_fdwを使った分散処理構成は、「どれだけ外部サーバで処理させ るか」が重要 • 親サーバが全てのデータを取得して計算、では外部サーバを使うメリットを生かせな い • 演算子、条件句も一緒に送る(Push Downする)ことが大切 分散処理基盤を続々と強化中 SELECT price FROM 3月分 WHERE genre = … 1,2月分 postgres_fdw 子サーバ 3,4月分 5,6月分 SELECT … WHERE … 親サーバ
  42. 42. 42Copyright©2016 NTT corp. All Rights Reserved. • 参照 • スキャンやWHERE句により絞込み外部サーバで実行される • New!! 結合、ソート処理も外部サーバのリソースが使える • 更新 • New!! 更新、削除を外部サーバに依頼可能 挿入、集計、他の結合等は現在開発中! 分散処理基盤を続々と強化中
  43. 43. 43Copyright©2016 NTT corp. All Rights Reserved. 今後のPostgreSQL Future Energy by Floris Oosterveld
  44. 44. 44Copyright©2016 NTT corp. All Rights Reserved. • PostgreSQL開発に注力している会社が、PostgreSQL開発 のロードマップを公開 • パラレルクエリ導入が、PostgreSQLの様々な処理のパラレル化 を加速 • ロジカルレプリケーションを含め、様々なレプリケーション機 能が追加されていく • 外部データ連携機能(FDW)がさらに強化されていく • パーティショニング専用の構文が導入され、簡単に使えるよう になる https://wiki.postgresql.org/wiki/PostgreSQL10_Roadmap • PostgreSQLのバージョニングが変わる 今後のPostgreSQL
  45. 45. 45Copyright©2016 NTT corp. All Rights Reserved. バージョニングが変わります! ~PG9.6 PG10~ 9.6.0 9.5.0 メジャー マイナー 9.5.1 11.0 10.0 メジャー マイナー 10.1
  46. 46. 46Copyright©2016 NTT corp. All Rights Reserved. • 本日はPG9.6の目玉機能を紹介しました • PostgreSQL 9.6でパラレルクエリを初めとした200以上の 機能が追加されました • NTTデータ、NTT OSSセンタが開発貢献した機能も多数 • 大規模データの管理、処理がH/Wリソースを効率的に使 いながら可能になった • 今後のPostgreSQLはパラレル化、レプリケーション強化 にも期待 まとめ
  47. 47. 47Copyright©2016 NTT corp. All Rights Reserved. ご清聴ありがとうございました
  48. 48. 48Copyright©2016 NTT corp. All Rights Reserved. • Too old snapshot • Idle_in_transaction_session_timeout • CREATE ACCESS METHOD • Generic WAL Interface • Bloomインデックス • 類似度検索の強化(Word Similarity Search) • 待機イベント • postgres_fdwで演算子をPush Down可能に • 部分インデックスを使用した、Index Only Scan (参考) その他の改善

×