Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-

162 views

Published on

OSC 2017 Tokyo/Fall での講演資料

Published in: Technology
  • Be the first to comment

  • Be the first to like this

各スペシャリストがお届け!データベース最新情報セミナー -PostgreSQL10-

  1. 1. 各スペシャリストがお届け! データベース最新情報セミナー PostgreSQL10 編 オープンソースカンファレンス 2017 Tokyo/Fall OSSコンソーシアム データベース部会 中西 剛紀
  2. 2. 2 自己紹介 • 氏名 : 中西 剛紀 (なかにし よしのり) • 所属 : TIS株式会社 • PostgreSQL関連の活動 : – 日本PostgreSQLユーザ会(JPUG) 勉強会でたまに講演したり http://www.slideshare.net/naka24nori/jpug25 – PostgreSQLエンタープライズコンソーシアム(PGECons) WGでの検証活動&セミナー講演してみたり http://itpro.nikkeibp.co.jp/atcl/column/15/052800134/052900004/?ST=oss&a
  3. 3. 3 お話すること • PostgreSQL10のリリース間近! • 新機能を中心にPostgreSQL10 で進化するポイントをご紹介
  4. 4. 4 PostgreSQLの歴史 1997 6.0 2003 2005 2006 2007 2008 2009 2011 2012 2013 2014 2015 7.4 8.0 Windows対応 PITR テーブルスペース PITR 8.1 パーティショニング 2相コミット バッファ管理改良 ロール 8.2 CPUスケール オンライン索引作成 GINインデックス ウォームスタンバイ 8.3 HOT:更新性能向上 VACUUM自動化 全文検索 XMLデータ型 8.4 Window関数 再帰SQL 9.0 レプリケーション ホットスタンバイ Windows 64bit対応 9.1 同期レプリケーション パーティショニング強化 一時テーブル強化 9.2 カスケードレプリケーション スケーラビリティ向上 インデックス検索強化 9.3 障害切替時間短縮 ビューの改良 DB間連携強化 9.4 レプリケーション運用性向上 JSON強化 大容量メモリ対応 9.5 BRINインデックス WAL圧縮 行レベルセキュリティ UPSERT 2010 2016 9.6 パラレルクエリ 複数/完全同期レプリケーション 外部データラッパの強化
  5. 5. 5 PostgreSQL10のリリース間近 • ひさびさの大型アップデート – 約200個の改善点 • 実は既に結構紹介されてる!(汗) – 篠田の虎の巻 7 (HPE篠田さん) http://h50146.www5.hpe.com/products/software/oe/linux/mainstream/support/lcc/pdf/Postgre SQL_10_New_Features_ja_20170522-1.pdf – PostgreSQL10徹底解説(NTTOSS澤田さん) https://www.slideshare.net/masahikosawada98/postgresql10 – 次期バージョンPostgreSQL10の新機能と その後の方向性(SRAOSS長田さん) https://www.sraoss.co.jp/event_seminar/2017/db_tech_show_case_oss_2017.pdf • 独断と偏見で見どころをご紹介します。。。
  6. 6. 6 その1 バージョン番号 • 従来は3つの数字で表記(〜9.6) • 今後は2つの数字で表記(10.0〜) 9.6.5 メジャーバージョン : 機能追加、仕様変更 マイナーバージョン:不具合修正 10.0 メジャーバージョン マイナーバージョン
  7. 7. 7 その2 ロジカルレプリケーション • ストリーミングレプリケーション(9.0〜) • マスタ更新時のログ(WAL)を転送し、 転送されたWALをスレーブで適用 • スレーブはマスタと完全に一致 – 一部を複製対象から除外、とかはできない • スレーブは参照のみ可能 複製元(マスタ) 複製先(スレーブ) WAL バックエンド wal sender wal receiver WAL WAL 参照 更新 テーブルB テーブル A テーブル A テーブルB
  8. 8. 8 その2 ロジカルレプリケーション • ロジカルレプリケーション(10.0〜) • マスタ更新時のログ(WAL)を解析し、 論理的な変更内容のみスレーブに転送 • マスタの変更を部分的に複製可能 – 必要なテーブルだけ、必要な操作だけ • スレーブへの更新も可能 複製元(マスタ) 複製先(スレーブ) WAL バックエンド wal sender apply worker WAL テーブルB 論理データ テーブル A 参照 更新 テーブル A テーブルB Bの更新は 反映しない 論理データ に変換
  9. 9. 9 その2 ロジカルレプリケーション • ロジカルレプリケーション – 検索用途に特化したインデックスやテーブルをス レーブだけに追加できる。 ⇒ 分析用途に応用しやすい – 複製対象を限定できる。 ⇒ レプリケーションの負荷、遅延を低減 – 異なるバージョン間で複製できる。 • ストリーミングレプリケーション – バイナリレベルで一致した複製が得られる。 ⇒ 複数サーバで冗長化して可用性UP
  10. 10. 10 その2 ロジカルレプリケーション • 制約:コンフリクト(衝突) – マスタとスレーブでそれぞれ同じ主キーの レコードを更新した場合 – マスタで更新したレコードと同じ主キーの レコードがスレーブに存在しない場合 • 衝突した場合の挙動 – レプリケーションを停止 ← 制約違反の時 – 処理を継続 ← 更新対象レコードがない時 • レプリケーションが停止した場合、 手動で解消する必要がある。 – 複製先の対象レコードを削除
  11. 11. 11 その2 ロジカルレプリケーション • 制約:双方向レプリケーション – 同じテーブルをマルチマスタにはできない。 • 制約:テーブル以外のレプリケーション – DDL(CREATE TABLE等)やTRUNCATEは 複製しない。 – シーケンスも複製しない。 サーバ1 サーバ2 テーブルA テーブルA 同じテーブル間はNG サーバ1 サーバ2 テーブルA テーブルが違えばOK テーブルB テーブルA テーブルB
  12. 12. 12 その3 パーティショニング • 大きなテーブルを複数の子テーブルに分割 – 必要な子テーブルのみアクセスして性能向上 • これまでのパーティショニング(〜9.6) – テーブル継承、CHECK制約、トリガの組合せで実 現。ちょっと無理やりな感 – パーティションテーブル作成の手順が煩雑 – 親テーブルのINSERTトリガが低速 親テーブル 子テーブル (1月分) 子テーブル (2月分) 子テーブル (3月分) INSERTトリガ CHECK制約 CHECK制約 CHECK制約 パーティションテーブルの作成手順 1. 親テーブルを作成 2. 継承する子テーブルを作成 3. 全ての子テーブルにCHECK制約を作成 4. 親テーブルにINSERTトリガを作成
  13. 13. 13 その3 パーティショニング • 新しいパーティショニング(10.0〜) – INHERIT指定、CHECK制約、トリガ設定不要 – 子テーブルを容易に追加、削除可能 – 振り分けルールはリストとレンジの2種類 =# CREATE TABLE parent(a int, b text) PARTITION BY RANGE (a); =# CREATE TABLE child1 PARTITION OF parent FOR VALUES FROM (0) TO (100); =# CREATE TABLE child2 PARTITION OF parent FOR VALUES FROM (100) TO (200); =# CREATE TABLE child3 PARTITION OF parent FOR VALUES FROM (200) TO (300); =# ALTER TABLE parent ATTACH PARTITION child4 FOR VALUES (300) TO (400); =# ALTER TABLE parent DETACH PARTITION child1;
  14. 14. 14 その3 パーティショニング • 新しいパーティショニングのメリット – 親、子テーブルの作成が容易 – 親テーブルへのINSERT性能が向上 – 複数階層のパーティショニングも可能 • 新しいパーティショニングの制約 – 親テーブルへのインデックス作成 – パーティションを跨ぐUPDATE – ハッシュパーティショニング – 既存パーティションの分割、マージ
  15. 15. 15 その4 パラレルクエリ • これまでのパラレルクエリ(〜9.6) – 1つのSQLを複数プロセスで 並列処理することが可能に(9.6) – 使える場面が限定的 • Sequential Scan, Nested Loop Join, Hash Join Big Table サーバ プロセス 従来(〜9.5) 9.6 以降 サーバ プロセス Big Table CPUは 1つしか 使えない ワーカ プロセス ワーカ プロセス ワーカ プロセスCPUを 複数使う
  16. 16. 16 その4 パラレルクエリ • パラレルクエリの改善点(10.0〜) – 使える場面が増えた • Sequential Scan • Index Scan • Index Only Scan • Bitmap Heap Scan • Nested Loop Join • Hash Join • Merge Join • Gather Merge • 非相関サブクエリ • パラレルクエリの制約 – UPDATE, DELETE, DDLには未対応
  17. 17. 17 その5 同期レプリケーション • これまでの同期レプリケーション – WALのスレーブ到達を保証。データ損失防止 – 同期レプリケーション先は最大1つ(〜9.5) – 複数の同期レプリケーションが可能(9.6) マスタ スレーブA スレーブC スレーブB 同期 非同期 非同期 マスタ スレーブA スレーブC スレーブB 同期 同期 非同期 先頭から2台の WAL到達を待つ 先頭から1台の WAL到達を待つ
  18. 18. 18 その5 同期レプリケーション • Quorum-based同期レプリケーション(10.0〜) – 指定順に関係なく一定数以上スレーブにWALが到 達すればOK(9.6までは指定順で固定) – 遅いスレーブを待たずにすむ ⇒ 性能面で優位 – 同期先のスレーブは変動 ⇒ マスタ停止時の切替先選定に注意 マスタ スレーブA スレーブC スレーブB 同期 非同期 同期 3台のうちどれか2 台のWAL到達を 待つ
  19. 19. 19 バージョンアップで注意するポイント • PostgreSQL10では、後方互換性を 犠牲にした変更も。 • 例えば、WALの名称変更 – XLOG から WAL に統一 – ディレクトリ名、コマンド名、関数名、パラメータ名、 エラーメッセージが変更された。 – 例:ディレクトリ pg_xlog ⇒ pg_wal – 例:コマンド pg_receivexlog ⇒ pg_receivewal • 運用スクリプトが動かなくなる可能性
  20. 20. 20 おわりに • PostgreSQL10以降もどんどん進化予定 • PostgreSQLの新機能は複数バージョン を経て完成していく – ロジカルレプリケーションやパラレルクエリは下地 の機能が9.6以前から徐々に取り込まれていた。 – 新機能リリース直後は制約も多い。 • 新機能は制約事項を理解して利用しよう。

×