© 2020 NTT DATA Corporation 1 © 2020 NTT DATA Corporation
第13回 PostgreSQLアンカンファレンス@オンライン
PostgreSQL13での
pg_basebackupの改善について
2020年5月21日
株式会社NTTデータ 藤井雅雄 @fujii_masao
© 2020 NTT DATA Corporation 2
藤井 雅雄 @fujii_masao
Database Technical Lead @ NTTデータ
データベース研究開発、PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション(非同期 / 同期 / カスケード / クォーラムコミット)
WAL圧縮
pg_bigm(全文検索モジュール)コミッタ
自己紹介
© 2020 NTT DATA Corporation 3
本講演について
講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
© 2020 NTT DATA Corporation 4
PostgreSQL13 での
pg_basebackup の改善について
© 2020 NTT DATA Corporation 5
PostgreSQL 13
• 現在コミュニティで開発中の最新バージョン
• Feature Freeze済。機能一覧はリリースノートから
https://postgresql.org/docs/devel/release-13.html
• 5月にβ1、10~11月に正式リリースの予定
今日紹介する内容は、正式リリースまでの間に
変更となる可能性があることにご注意ください!!
© 2020 NTT DATA Corporation 6
pg_basebackupとは
PostgreSQLのベースバックアップを取得するコマンド
$ pg_basebackup -h 192.168.0.x -D /bkp/data
バックアップDBデータ
© 2020 NTT DATA Corporation 7
新機能(1)
バックアップ取得の進捗状況の確認
© 2020 NTT DATA Corporation 8
クライアント側でのバックアップ取得の進捗状況
以前のバージョンから、--progressオプションを指定することで、
バックアップ取得の進捗状況をクライアント側で確認することは可能
$ pg_basebackup -h 192.168.0.x -D /bkp/data --progress
1339087/2894148 kB (46%), 2/4 tablespaces
バックアップDBデータ
© 2020 NTT DATA Corporation 9
サーバ側でのバックアップ取得の進捗状況 (PostgreSQL13)
PostgreSQL13からは、
バックアップ取得の進捗状況をサーバ側でもSQLで確認することが可能に!
$ psql
=# SELECT * FROM pg_stat_progress_basebackup;
バックアップDBデータ
© 2020 NTT DATA Corporation 10
pg_stat_progress_basebackup
=# SELECT * FROM pg_stat_progress_basebackup;
-[ RECORD 1 ]:--------+---------------------------
pid | 58783
phase | streaming database files
backup_total | 2963609088
backup_streamed | 1372009984
tablespaces_total | 4
tablespaces_streamed| 3
• バックアップを担当するサーバ側プロセスのPID
• バックアップ取得の現在の処理フェーズ
• バックアップ対象データのトータルサイズ
• 現在転送済み(取得済み)のバックアップのサイズ
• バックアップ対象のテーブルスペースの数
• 現在転送済み(取得済み)のテーブルスペースの数
© 2020 NTT DATA Corporation 11
バックアップ取得の処理フェーズ
① 初期準備
③ サイズ評価
④ バックアップ転送
バックアップ開始
バックアップ完了
⑤ WAL転送/アーカイブ
② チェックポイント
=# SELECT * FROM pg_stat_progress_basebackup;
-[ RECORD 1 ]:--------+---------------------------
pid | 58783
phase | streaming database files
backup_total | 2963609088
backup_streamed | 1372009984
tablespaces_total | 4
tablespaces_streamed| 3
© 2020 NTT DATA Corporation 12
(参考) PostgreSQLのコマンド進捗機能
9.6
• pg_stat_progress_vacuum → VACUUM や autovacuum の進捗確認
12
• pg_stat_progress_cluster → CLUSTER や VACUUM FULL の進捗確認
• pg_stat_progress_create_index → CREATE INDEX や REINDEX の進捗確認
13
• pg_stat_progress_analyze → ANALYZE や autoanalyze の進捗確認
• pg_stat_progress_basebackup → pg_basebackup の進捗確認
© 2020 NTT DATA Corporation 13
新機能(2)
バックアップ・マニフェスト
© 2020 NTT DATA Corporation 14
バックアップで困るケース
バックアップをリストアしてDBデータを復旧したいとき、
バックアップがリストアできる正常状態なのか、破損しているのか判断つかない!?
バックアップ
© 2020 NTT DATA Corporation 15
バックアップ・マニフェスト (PostgreSQL13)
PostgreSQL13からは、
① バックアップ取得時に、バックアップの妥当性を検証するための情報である
バックアップ・マニフェスト (backup_manifest) を取得可能に!
② pg_verifybackup コマンドを使って、バックアップ・マニフェストから
バックアップの妥当性を検証可能に!
backup_manifest
バックアップDBデータ
© 2020 NTT DATA Corporation 16
バックアップ・マニフェストの取得
$ pg_basebackup -h 192.168.0.x -D /bkp/data
$ ls /bkp/data
PG_VERSION pg_dynshmem pg_replslot pg_tblspc
backup_label pg_hba.conf pg_serial pg_twophase
backup_manifest pg_ident.conf pg_snapshots pg_wal
base pg_logical pg_stat pg_xact
global pg_multixact pg_stat_tmp postgresql.auto.conf
pg_commit_ts pg_notify pg_subtrans postgresql.conf
© 2020 NTT DATA Corporation 17
バックアップ・マニフェストの取得
$ cat /bkp/data/backup_manifest
{ "PostgreSQL-Backup-Manifest-Version": 1,
"Files": [
{ "Path": "backup_label", "Size": 224, "Last-Modified": "2020-05-14 15:47:21
GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "0dc6dc58" },
{ "Path": "pg_multixact/members/0000", "Size": 8192, "Last-Modified": "2020-
05-14 15:46:01 GMT", "Checksum-Algorithm": "CRC32C", "Checksum":
"23464490" },
...
バックアップに含まれるすべてのファイルについて、
ファイルパスやサイズ、最終変更日時、チェックサム、チェックサム・アルゴリズムを
JSON形式で一覧化したファイル
© 2020 NTT DATA Corporation 18
バックアップの妥当性の検証
$ pg_verifybackup /bkp/data
バックアップの妥当性検証に成功
backup successfully verified
バックアップ取得時には存在していたファイルが、現在のバックアップから消えている
pg_verifybackup: error: "PG_VERSION" is present in the manifest but not on disk
バックアップ取得時にはなかったファイルが、現在のバックアップに存在している
pg_verifybackup: error: "hoge" is present on disk but not in the manifest
バックアップ取得時と現在とでファイルのサイズが異なる
pg_verifybackup: error: "PG_VERSION" has size 0 on disk but size 3 in the manifest
バックアップ取得時と現在とでファイルの内容(チェックサム)が異なる
pg_verifybackup: error: checksum mismatch for file "PG_VERSION"
© 2020 NTT DATA Corporation 19
まとめ
© 2020 NTT DATA Corporation 20
まとめ
PostgreSQL13から、pg_basebackupで
1. バックアップ取得の進捗状況をサーバ側でもSQLで確認
2. バックアップ・マニフェストによりバックアップの妥当性を判断
できるようになります。
v13βがリリースされたら、ぜひ機能をお試しいただければ!!
© 2020 NTT DATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。

PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)

  • 1.
    © 2020 NTTDATA Corporation 1 © 2020 NTT DATA Corporation 第13回 PostgreSQLアンカンファレンス@オンライン PostgreSQL13での pg_basebackupの改善について 2020年5月21日 株式会社NTTデータ 藤井雅雄 @fujii_masao
  • 2.
    © 2020 NTTDATA Corporation 2 藤井 雅雄 @fujii_masao Database Technical Lead @ NTTデータ データベース研究開発、PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション(非同期 / 同期 / カスケード / クォーラムコミット) WAL圧縮 pg_bigm(全文検索モジュール)コミッタ 自己紹介
  • 3.
    © 2020 NTTDATA Corporation 3 本講演について 講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech
  • 4.
    © 2020 NTTDATA Corporation 4 PostgreSQL13 での pg_basebackup の改善について
  • 5.
    © 2020 NTTDATA Corporation 5 PostgreSQL 13 • 現在コミュニティで開発中の最新バージョン • Feature Freeze済。機能一覧はリリースノートから https://postgresql.org/docs/devel/release-13.html • 5月にβ1、10~11月に正式リリースの予定 今日紹介する内容は、正式リリースまでの間に 変更となる可能性があることにご注意ください!!
  • 6.
    © 2020 NTTDATA Corporation 6 pg_basebackupとは PostgreSQLのベースバックアップを取得するコマンド $ pg_basebackup -h 192.168.0.x -D /bkp/data バックアップDBデータ
  • 7.
    © 2020 NTTDATA Corporation 7 新機能(1) バックアップ取得の進捗状況の確認
  • 8.
    © 2020 NTTDATA Corporation 8 クライアント側でのバックアップ取得の進捗状況 以前のバージョンから、--progressオプションを指定することで、 バックアップ取得の進捗状況をクライアント側で確認することは可能 $ pg_basebackup -h 192.168.0.x -D /bkp/data --progress 1339087/2894148 kB (46%), 2/4 tablespaces バックアップDBデータ
  • 9.
    © 2020 NTTDATA Corporation 9 サーバ側でのバックアップ取得の進捗状況 (PostgreSQL13) PostgreSQL13からは、 バックアップ取得の進捗状況をサーバ側でもSQLで確認することが可能に! $ psql =# SELECT * FROM pg_stat_progress_basebackup; バックアップDBデータ
  • 10.
    © 2020 NTTDATA Corporation 10 pg_stat_progress_basebackup =# SELECT * FROM pg_stat_progress_basebackup; -[ RECORD 1 ]:--------+--------------------------- pid | 58783 phase | streaming database files backup_total | 2963609088 backup_streamed | 1372009984 tablespaces_total | 4 tablespaces_streamed| 3 • バックアップを担当するサーバ側プロセスのPID • バックアップ取得の現在の処理フェーズ • バックアップ対象データのトータルサイズ • 現在転送済み(取得済み)のバックアップのサイズ • バックアップ対象のテーブルスペースの数 • 現在転送済み(取得済み)のテーブルスペースの数
  • 11.
    © 2020 NTTDATA Corporation 11 バックアップ取得の処理フェーズ ① 初期準備 ③ サイズ評価 ④ バックアップ転送 バックアップ開始 バックアップ完了 ⑤ WAL転送/アーカイブ ② チェックポイント =# SELECT * FROM pg_stat_progress_basebackup; -[ RECORD 1 ]:--------+--------------------------- pid | 58783 phase | streaming database files backup_total | 2963609088 backup_streamed | 1372009984 tablespaces_total | 4 tablespaces_streamed| 3
  • 12.
    © 2020 NTTDATA Corporation 12 (参考) PostgreSQLのコマンド進捗機能 9.6 • pg_stat_progress_vacuum → VACUUM や autovacuum の進捗確認 12 • pg_stat_progress_cluster → CLUSTER や VACUUM FULL の進捗確認 • pg_stat_progress_create_index → CREATE INDEX や REINDEX の進捗確認 13 • pg_stat_progress_analyze → ANALYZE や autoanalyze の進捗確認 • pg_stat_progress_basebackup → pg_basebackup の進捗確認
  • 13.
    © 2020 NTTDATA Corporation 13 新機能(2) バックアップ・マニフェスト
  • 14.
    © 2020 NTTDATA Corporation 14 バックアップで困るケース バックアップをリストアしてDBデータを復旧したいとき、 バックアップがリストアできる正常状態なのか、破損しているのか判断つかない!? バックアップ
  • 15.
    © 2020 NTTDATA Corporation 15 バックアップ・マニフェスト (PostgreSQL13) PostgreSQL13からは、 ① バックアップ取得時に、バックアップの妥当性を検証するための情報である バックアップ・マニフェスト (backup_manifest) を取得可能に! ② pg_verifybackup コマンドを使って、バックアップ・マニフェストから バックアップの妥当性を検証可能に! backup_manifest バックアップDBデータ
  • 16.
    © 2020 NTTDATA Corporation 16 バックアップ・マニフェストの取得 $ pg_basebackup -h 192.168.0.x -D /bkp/data $ ls /bkp/data PG_VERSION pg_dynshmem pg_replslot pg_tblspc backup_label pg_hba.conf pg_serial pg_twophase backup_manifest pg_ident.conf pg_snapshots pg_wal base pg_logical pg_stat pg_xact global pg_multixact pg_stat_tmp postgresql.auto.conf pg_commit_ts pg_notify pg_subtrans postgresql.conf
  • 17.
    © 2020 NTTDATA Corporation 17 バックアップ・マニフェストの取得 $ cat /bkp/data/backup_manifest { "PostgreSQL-Backup-Manifest-Version": 1, "Files": [ { "Path": "backup_label", "Size": 224, "Last-Modified": "2020-05-14 15:47:21 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "0dc6dc58" }, { "Path": "pg_multixact/members/0000", "Size": 8192, "Last-Modified": "2020- 05-14 15:46:01 GMT", "Checksum-Algorithm": "CRC32C", "Checksum": "23464490" }, ... バックアップに含まれるすべてのファイルについて、 ファイルパスやサイズ、最終変更日時、チェックサム、チェックサム・アルゴリズムを JSON形式で一覧化したファイル
  • 18.
    © 2020 NTTDATA Corporation 18 バックアップの妥当性の検証 $ pg_verifybackup /bkp/data バックアップの妥当性検証に成功 backup successfully verified バックアップ取得時には存在していたファイルが、現在のバックアップから消えている pg_verifybackup: error: "PG_VERSION" is present in the manifest but not on disk バックアップ取得時にはなかったファイルが、現在のバックアップに存在している pg_verifybackup: error: "hoge" is present on disk but not in the manifest バックアップ取得時と現在とでファイルのサイズが異なる pg_verifybackup: error: "PG_VERSION" has size 0 on disk but size 3 in the manifest バックアップ取得時と現在とでファイルの内容(チェックサム)が異なる pg_verifybackup: error: checksum mismatch for file "PG_VERSION"
  • 19.
    © 2020 NTTDATA Corporation 19 まとめ
  • 20.
    © 2020 NTTDATA Corporation 20 まとめ PostgreSQL13から、pg_basebackupで 1. バックアップ取得の進捗状況をサーバ側でもSQLで確認 2. バックアップ・マニフェストによりバックアップの妥当性を判断 できるようになります。 v13βがリリースされたら、ぜひ機能をお試しいただければ!!
  • 21.
    © 2020 NTTDATA Corporation本資料に記載されている会社名、商品名、又はサービス名は、各社の登録商標又は商標です。