Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
PostgreSQLのバージョンアップの話 / PostgreSQL Version up
Search
soudai sone
PRO
November 24, 2018
Technology
7
4.5k
PostgreSQLのバージョンアップの話 / PostgreSQL Version up
第25回 中国地方DB勉強会 in 鳥取の登壇資料です。
http://dbstudychugoku.github.io/
soudai sone
PRO
November 24, 2018
Tweet
Share
More Decks by soudai sone
See All by soudai sone
手を動かしながら学ぶデータモデリング - 論理設計から物理設計まで / Data modeling
soudai
PRO
24
5.4k
これからアウトプットする人たちへ - アウトプットを支える技術 / that support output
soudai
PRO
18
5.5k
コミュニティと計画的偶発性理論 - 出会いが人生を変える / Life-Changing Encounters
soudai
PRO
7
1.7k
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
61
37k
変化に強いテーブル設計の勘所 / Table design that is resistant to changes
soudai
PRO
68
19k
抽象化をするということ - 具体と抽象の往復を身につける / Abstraction and concretization
soudai
PRO
50
25k
目の前の仕事と向き合うことで成長できる - 仕事とスキルを広げる / Every little bit counts
soudai
PRO
38
34k
ソフトウェアエンジニアとしてキャリアの螺旋を駆け上がる方法 - 経験と出会いが人生を変える / Career-Anchor-Drive
soudai
PRO
20
6.9k
新婚19年目から学ぶ夫婦円満の正しい歩き方 / Life is beautiful
soudai
PRO
12
4.8k
Other Decks in Technology
See All in Technology
内部品質・フロー効率・コミュニケーションコストを悪化させ現場を苦しめかねない16の組織設計アンチパターン[超簡易版] / 16 Organization Design Anti-Patterns for Software Development
mtx2s
2
950
Logik: A Free and Open-source FPGA Toolchain
omasanori
0
300
Amazon ECS デプロイツール ecspresso の開発を支える「正しい抽象化」の探求 / YAPC::Fukuoka 2025
fujiwara3
12
3k
探求の技術
azukiazusa1
7
2.1k
CDKの魔法を少し解いてみる ― synth・build・diffで覗くIaCの裏側 ―
takahumi27
1
150
Spring Boot利用を前提としたJavaライブラリ開発方法の提案
kokihoshihara
PRO
2
210
Flutter DevToolsで発見! 本番アプリのパフォーマンス問題と改善の実践
goto_tsl
1
610
AIでテストプロセスを自動化しよう251113.pdf
sakatakazunori
0
130
QAエンジニアがプロダクト専任で チームの中に入ると。。。?/登壇資料(杉森 太樹)
hacobu
PRO
1
550
プログラミング言語を書く前に日本語を書く── AI 時代に求められる「言葉で考える」力/登壇資料(井田 献一朗)
hacobu
PRO
0
160
バグと向き合い、仕組みで防ぐ
____rina____
0
280
なぜインフラコードのモジュール化は難しいのか - アプリケーションコードとの本質的な違いから考える
mizzy
52
16k
Featured
See All Featured
GitHub's CSS Performance
jonrohan
1032
470k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Fantastic passwords and where to find them - at NoRuKo
philnash
52
3.5k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Being A Developer After 40
akosma
91
590k
Fireside Chat
paigeccino
41
3.7k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
10
660
RailsConf 2023
tenderlove
30
1.3k
How GitHub (no longer) Works
holman
315
140k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Learning to Love Humans: Emotional Interface Design
aarron
274
41k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
132
19k
Transcript
PostgreSQLのバージョンアップ ~11の話もあるよ ~ 第25回 中国地方DB勉強会 in 鳥取
What is it? バージョンアップしてますか?
What is it? やり方が分からない
What is it? 上げてメリットあるの?
What is it? そんな課題・疑問にお答えします
あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4
停止を最小化したVersion up 5 まとめ
あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4
停止を最小化したVersion up 5 まとめ
自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 •
3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も
自己紹介 曽根 壮大(34歳) 株式会社オミカレ 副社長/CTO • 日本PostgreSQLユーザ会 勉強会分科会 座長 •
3人の子供がいます • 技術的にはWeb/LL言語/RDBが好きです そ ね た け と も
婚活といえばオミカレ https://party-calendar.net/
あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4
停止を最小化したVersion up 5 まとめ
Version upのメリット バージョンアップのメリット
Version upのメリット •新機能が使える •パフォーマンス向上する 12/22 発売のWeb+DBを読んで
PostgreSQLカンファレンス https://www.postgresql.jp/jpug-pgcon2018
PostgreSQL 11 解体新書 PostgreSQL カンファレンス 2018 https://speakerdeck.com/soudai/postgresql11-release
Version upのメリット 12/22 発売のWeb+DBを読んで (大事なことなので二回)
Version upの種類 PostgreSQLのバージョンアップ
Version upの種類 ざっくり4種類ある
Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単
全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第
• 自分たちの要件に合わせて選ぶ > 無理に難しい手段をとらない • 停止時間を取るほうが難易度は低い • 古いPostgreSQL(7系とか) > 選択肢が無いので停止
Version upの種類
• 自分たちの要件に合わせて選ぶ > 無理に難しい手段をとらない • 停止時間を取るほうが難易度は低い • 古いPostgreSQL(7系とか) > 選択肢が無いので停止
Version upの種類 後述の方法で出来なくはないけど…
Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単
全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第
Version upの種類 データが大きい場合に 色んな方法を検討します
Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単
全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第
Version upの種類 ???「止めてもらっては困る」
Version upの種類 ???「止めてもらっては困る」 ↓ 停止時間を短くする工夫
Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単
全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第
Version upの種類 要件が整理できたところで 具体的な手法を見ていきます
あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4
停止を最小化したVersion up 5 まとめ
停止を伴うバージョンアップ 長時間の停止を伴う
Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単
全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チームs次第
停止を伴うバージョンアップ pg_dump/pg_restoreが基本
停止を伴うバージョンアップ pg_dump/pg_restoreが基本 ↓ バックアップ、リストアをする
停止を伴うバージョンアップ • プレーンテキスト形式(SQL) • カスタムアーカイブ形式(圧縮したバイナリ) • ディレクトリ形式(表単位の圧縮したバイナリ) • TAR形式(表単位のバイナリ) pg_dumpの種類
停止を伴うバージョンアップ • プレーンテキスト形式(SQL) • カスタムアーカイブ形式(圧縮したバイナリ) • ディレクトリ形式(表単位の圧縮したバイナリ) • TAR形式(表単位のバイナリ) pg_dumpの種類
オススメ!
pg_dump/pg_restore // -Fc カスタムアーカイブ形式 // -f は出力先 $ pg_dump –Fc
データベース名 –U ユーザ名 ¥ –h ホスト名 –f /tmp/db.dump // リストア方法 $ pg_restore -d データベース名 /tmp/db.dump
停止を伴うバージョンアップ これだけ!!
停止を伴うバージョンアップ 質問 「pg_dumpallじゃだめですか?」
停止を伴うバージョンアップ 回答 全DB移行するならそっち
停止を伴うバージョンアップ pg_dumpallは内部的に pg_dumpをまとめてるだけ
停止を伴うバージョンアップ 注意点 postgresql.conf 等は 自分で設定が必要
停止を伴うバージョンアップ Webサーバ pg_dump pg_dumpの前に接続を停止する 旧DB クライアント 新DB
停止を伴うバージョンアップ Webサーバ pg_restoreが終わったら切り替える 旧DB クライアント 新DB pg_restore
停止を伴うバージョンアップ • Versionを一気に上げられる • pg_dump/pg_restoreを事前に試せる スケジュールが調整しやすい • ロールバックが簡単(旧DBにつなぎ直すだけ) • ステージング等で試しやすい
この方式のメリット
停止を伴うバージョンアップ • データ量が増えれば増えるほど時間がかかる • 停止は必須 • 移行用のインスタンスやサーバが必要 この方式のデメリット
停止を伴うバージョンアップ • データ量が増えれば増えるほど時間がかかる • 停止は必須 • 移行用のインスタンスやサーバが必要 この方式のデメリット dumpファイルが数十GBを 超えてくると厳しい
停止を伴うバージョンアップ pg_upgrade
停止を伴うバージョンアップ pg_upgrade ↓ 使用中のDBクラスタを そのまま新しいバージョンにする
停止を伴うバージョンアップ PostgreSQL 8.4以降、データファイルの構造が変更さ れていないため、pg_upgradeはテーブルやインデックス の再構築をしません。 制御ファイルやシステムカタログなどを修正して バージョンアップするため、手順としてもシンプルです。
停止を伴うバージョンアップ Webサーバ pg_upgrade 接続を停止する 旧DB クライアント
停止を伴うバージョンアップ Webサーバ 新DB クライアント Upgradeできたら接続を再開
停止を伴うバージョンアップ 注意点 同じくpostgresql.conf 等は 自分で設定が必要
停止を伴うバージョンアップ コピーモードとリンクモード
停止を伴うバージョンアップ コピーモードとリンクモード 旧DBのデータが残るので ロールバックを考えたらこっち
停止を伴うバージョンアップ コピーモードとリンクモード データコピーが無いので高速
停止を伴うバージョンアップ どれくらい速度が変わるのか?
停止を伴うバージョンアップ どれくらい速度が変わるのか? ↓ 最大で400倍程度
150GB、850テーブルの移行時 移行方法 所要時間(分) dump/restore(通常の方法) 300 dump/パラレルrestore(8.4からの機能) 180 pg_upgrade (コピーモード) 44
pg_upgrade (リンクモード) 0.7 引用元 : https://lets.postgresql.jp/documents/technical/contrib/pg_upgrade
pg_upgradeの事例 3TB超のCacooのPostgreSQL 9.3を 9.5にアップグレードした話 https://nulab-inc.com/ja/blog/cacoo/postgresql-from-9-3-to-9-5/
停止を伴うバージョンアップ • 停止時間を短くして、すばやくバージョンアップ • 移行用のインスタンスやサーバが不要 • 手順が簡単 • 事前に試すことができる この方式のメリット
停止を伴うバージョンアップ • リンクモードは高速だがロールバックが出来ない • 停止は必須 • Versionの制約がある • 事前に対象のPostgreSQLのインストールが必要 この方式のデメリット
停止を伴うバージョンアップ 最近はDISKも早いので pg_dumpで大体なんとかなる (停止さえできれば)
あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4
停止を最小化したVersion up 5 まとめ
停止を最小化したVersion up それでも止めれない時 または巨大なDBの時
Version upの種類 項目 停止時間 難易度 補足 Pg_dump/pg_restore 長い データ量に比例 簡単
全部のVersionに対応 pg_upgrade 一定時間 データ量に依存しない 簡単 8.4以降 レプリケーション 切り替え時間のみ 中程度 Versionによって違う APPの二重書込 切り替え時間のみ ??? チーム次第
停止を最小化したVersion up レプリケーションを活用する
停止を最小化したVersion up ロジカルレプリケーション
Version upの種類 特徴 ストリーミングレプリケーション (物理レプリケーション) ロジカルレプリケーション (論理レプリケーション) レプリケーション対象 全てのデータベース データベース単位、テーブル単
位など柔軟に設定可能 利用用途 バックアップ、参照負荷分散 部分的なレプリケーション、 バージョンアップ 何を伝搬するか トランザクションログ(WAL) 変更された行の情報 受信側での更新 不可能 可能 異なるバージョン間でのレ プリケーション 不可能 可能 対応バージョン 9.0以降 10以降 引用元:www.intellilink.co.jp/article/column/oss-postgres03.html
ロジカル レプリケーション プライマリ スタンバイ ロジカル レプリケーション PostgreSQL 10 スタンバイ プライマリ
フェイルオーバー クライアント 切り替え PostgreSQL 11 プライマリ スタンバイ PostgreSQL 10 クライアント レプリケーションの構築 PostgreSQL 11 ストリーミング レプリケーション クライアント 停止を最小化したVersion up
停止を最小化したVersion up ロジカルレプリケーション が最強なのでは?
Version upの種類 特徴 ストリーミングレプリケーション (物理レプリケーション) ロジカルレプリケーション (論理レプリケーション) レプリケーション対象 全てのデータベース データベース単位、テーブル単
位など柔軟に設定可能 利用用途 バックアップ、参照負荷分散 部分的なレプリケーション、 バージョンアップ 何を伝搬するか トランザクションログ(WAL) 変更された行の情報 受信側での更新 不可能 可能 異なるバージョン間でのレ プリケーション 不可能 可能 対応バージョン 9.0以降 10以降 www.intellilink.co.jp/article/column/oss-postgres03.htmls
停止を最小化したVersion up PostgreSQL 10の現場が ほとんど無い (しかも11は出たばっかり) 今後に期待
停止を最小化したVersion up 代替案 1 Amazon Database Migration Service
None
停止を最小化したVersion up AWSは便利 (ただし9.4以降)
停止を最小化したVersion up pglogicalでも同じことが出来る (ただし9.4以降)
停止を最小化したVersion up 9.4未満の人? 停止してバージョンアップしましょう データがでかい場合、難易度 “高”になる
停止を最小化したVersion up 代替案 2 Slony-I
停止を最小化したVersion up Slony-I トリガーを利用した 非同期レプリケーションツール ロジカルレプリケーション と同じようなことが出来る
停止を最小化したVersion up Slony-Iは設定ファイルが煩雑 (ぶっちゃけむずい)
停止を最小化したVersion up Slony-Iはトリガーベースなので パフォーマンスが悪い (大規模だと厳しい)
停止を最小化したVersion up しかし現状では一番の現実解
停止を伴うバージョンアップ 注意点 Slony-I 2.0は8.3以上で動作 それ未満のバージョンアップの時は古いSlony-Iが必要
停止を最小化したVersion up • 停止時間を極小化出来る(切り替え時間のみ) • データ量の大きさに依存しない • 新しいバージョンでは簡単に出来る この方式のメリット
停止を最小化したVersion up • フェイルオーバーの時に大規模だと参照が捌けない • 用意に必要なサーバの台数が多い • 技術的な難易度が高くなる • 障害時の切り戻しが難しい
この方式のデメリット
停止を最小化したVersion up インフラを触らずに データを連携する方法
停止を最小化したVersion up アプリケーションが 新旧DBに書き込む
プライマリ プライマリ PostgreSQL 10 アプリケーション PostgreSQL 11 停止を最小化したVersion up 両方に書き込み
参照は旧DB
プライマリ プライマリ PostgreSQL 10 アプリケーション PostgreSQL 11 停止を最小化したVersion up 旧DBの書き込みをやめる
参照を切り替える
停止を最小化したVersion up レプリケーションと 同じような効果がある
停止を最小化したVersion up モデル層がリポジトリパターンで 適切に設計されていた場合は 比較的簡単に出来る 大体されてない
停止を最小化したVersion up どれも工数はそれなりに掛かる ↓ 停止出来るなら停止した方が楽
あじぇんだ 1 自己紹介 2 Version upの種類とメリット 3 停止を伴うVersion up 4
停止を最小化したVersion up 5 まとめ
まとめ PostgreSQLは魅力的な機能が豊富!
None
まとめ バージョンを常に上げていきましょう
まとめ バージョンを常に上げていきましょう ↓ そういう文化を作る
まとめ 時間が経てばを経つほど バージョンの問題は根深くなる (データが大きくなるなど)
まとめ 最新版に追従していきましょう
おまけ シャーディングとかNoSQLなど 複数のデータストア層があると ゲキムズなのでやっぱ停止すべき
ご清聴ありがとうございました