© 2021 NTT DATA Corporation 1 © 2021 NTT DATA Corporation
PostgreSQL の full_page_writes について
2021年6月8日
株式会社NTTデータ 藤井 雅雄
第24回 PostgreSQLアンカンファレンス@オンライン
© 2021 NTT DATA Corporation 2
2
© 2021 NTT DATA Corporation
自己紹介
藤井 雅雄
Database Technical Lead @ NTTデータ
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全文検索モジュール) コミッタ
@fujii_masao
© 2021 NTT DATA Corporation 3
3
© 2021 NTT DATA Corporation
https://codezine.jp/article/detail/14175
© 2021 NTT DATA Corporation 4
4
© 2021 NTT DATA Corporation
本講演について
講演資料は、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
講演資料に掲載のフロー図は、動作フローのイメージです。
実際の動作とは厳密には異なることにご了承ください。
© 2021 NTT DATA Corporation
full_page_writes
© 2021 NTT DATA Corporation 6
6
© 2021 NTT DATA Corporation
full_page_writes
https://www.postgresql.jp/document/current/html/runtime-config-wal.html#GUC-FULL-PAGE-WRITES
このパラメータが有効の場合、PostgreSQLサーバは、チェックポイントの後にそのページが最初に変更された過程で、ディ
スクページの全ての内容をWALに書き込みます。 オペレーティングシステムがクラッシュした時に進行中のページ書き込みは途中
までしか終わっていない可能性があり、ディスク上のページが古いデータと新しいデータが混在する状態になるため、この機能が必
要です。 通常WAL内に保存される行レベルの変更データは、クラッシュ後のリカバリ時にこうしたページを完全に復旧させるには
不十分です。 完全なページイメージを保存することにより、ページを正しく復旧できることを保証しますが、その代わりに、
WALに書き込まなければならないデータ量が増加することになります。 (WAL再生は常にチェックポイントから始まるため、
チェックポイント後のそれぞれのページの最初の変更時にこれを行えば十分です。 従って、完全ページ書き出しのコストを低減する
方法の1つは、チェックポイント間隔パラメータを大きくすることです。)
このパラメータを無効にすると、通常の操作速度が上がりますが、システム障害後に、回復不能なデータ破損、あるいは警告
なしのデータ損壊をもたらすかもしれません。 このリスクは小さいながらfsyncを無効にした場合と似ています。そしてそのfsyncに
対して推奨されている同一の状況に基づく限りにおいて停止されなければなりません。
このパラメータを無効にしてもポイントインタイムリカバリ(PITR)用のWALアーカイブの使用に影響ありません( 25.3を参照し
てください)。
このパラメータはpostgresql.confファイル内、または、サーバのコマンドラインでのみ設定可能です。 デフォルトはonです。
© 2021 NTT DATA Corporation 7
7
© 2021 NTT DATA Corporation
full_page_writesで解決したい問題
AA
BB
XX
YY
共有バッファ(メモリ) ディスク
XX
BB
XX
YY
バッファ置換やチェックポイントを
契機としたページ書き出しの開始
ページ書き出しの完了
ページ8KBの前半4KBの
書き込み完了
ページ8KBすべての
書き込み完了
© 2021 NTT DATA Corporation 8
8
© 2021 NTT DATA Corporation
full_page_writesで解決したい問題
AA
BB
XX
YY
共有バッファ(メモリ) ディスク
XX
BB
バッファ置換やチェックポイントを
契機としたページ書き出しの開始
ページ8KBの前半4KBを
書き込んだ時点で
サーバがクラッシュ
© 2021 NTT DATA Corporation 9
9
© 2021 NTT DATA Corporation
full_page_writesで解決したい問題
DBデータ
(ディスク)
XX
BB
中途半端に書き込まれたページ
(Torn Page / Partial Writes)
XX
YY
リカバリで戻したい最新ページ
WAL
(ディスク)
WAL①
リカバリで適用するWAL
WAL②
XX
YY
完全なページイメージ をそのままWALとして記録することで、
中途半端なページを復旧可能にする!!
full_page_writes=onでは、
© 2021 NTT DATA Corporation 10
10
© 2021 NTT DATA Corporation
項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) WAL(fpw=off)
1 CHECKPOINT
2 UPDATE A1→A2
3 UPDATE A2→A3
4 UPDATE B1→B2
5 UPDATE X1→X2
6 CHECKPOINT
7 UPDATE A3→A4
CHECKPOINTとfpw=on/offの関係
A1
B1
X1
Y1
A1
B1
X1
Y1
A2
B1
A1→A2
A2
B1
X1
Y1
A1
B1
X1
Y1
A3
B1
X1
Y1
A1
B1
X1
Y1
A2→A3 A2→A3
A3
B2
X1
Y1
A1
B1
X1
Y1
B1→B2 B1→B2
X2
Y1
X1→X2
A3
B2
X2
Y1
A1
B1
X1
Y1
A3
B2
X2
Y1
A3
B2
X2
Y1
CHECKPOINT CHECKPOINT
CHECKPOINT CHECKPOINT
A4
B2
A3→A4
A4
B2
X2
Y1
A3
B2
X2
Y1
fpw=onの場合、
CHECKPOINT以降で、
初回のページ変更時のみ
ページイメージをWAL出力
2回目以降のページ変更で
は通常のWALを出力
fpw=offの場合、
通常のWALを出力
fpw=onの場合、
CHECKPOINT以降の
初回のページ変更のため
ページイメージをWAL出力
© 2021 NTT DATA Corporation 11
11
© 2021 NTT DATA Corporation
項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) WAL(fpw=off)
1 CHECKPOINT
2 UPDATE A1→A2
3 UPDATE A2→A3
4 UPDATE B1→B2
5 UPDATE X1→X2
6 CHECKPOINT
故障例
A1
B1
X1
Y1
A1
B1
X1
Y1
A2
B1
A1→A2
A2
B1
X1
Y1
A1
B1
X1
Y1
A3
B1
X1
Y1
A1
B1
X1
Y1
A2→A3 A2→A3
A3
B2
X1
Y1
A1
B1
X1
Y1
B1→B2 B1→B2
X2
Y1
X1→X2
A3
B2
X2
Y1
A1
B1
X1
Y1
A3
B2
X2
Y1
A3
B1
X1
Y1
CHECKPOINT CHECKPOINT
1ページ目の前半(A3)はディスクに書けたが、後半(B2)を書く前に故障が発生
2ページ目は、ディスク書き込み前に故障が発生
© 2021 NTT DATA Corporation 12
12
© 2021 NTT DATA Corporation
クラッシュリカバリのゴール
項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) WAL(fpw=off)
1 リカバリ前
2 リカバリ開始
3 WAL適用
4 WAL適用
5 WAL適用
6 WAL適用
7 リカバリ完了
A2
B1
A1→A2
A2→A3 A2→A3
B1→B2 B1→B2
X2
Y1
X1→X2
A3
B1
X1
Y1
CHECKPOINT CHECKPOINT
A3
B2
X2
Y1
故障時のディスク上のDBデータに
WALを適用して、最新DBデータ
(故障時のメモリ上のDBデータ)を
復元したい
© 2021 NTT DATA Corporation 13
13
© 2021 NTT DATA Corporation
fpw=onのクラッシュリカバリ
項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on)
1 リカバリ前
2 リカバリ開始
3 WAL適用
4 WAL適用
5 WAL適用
6 WAL適用
7 リカバリ完了
A2
B1
A2→A3
B1→B2
X2
Y1
A3
B1
X1
Y1
CHECKPOINT
A3
B2
X2
Y1
A3
B1
X1
Y1
A3
B1
X1
Y1
A2
B1
A3
B1
X1
Y1
A3
B1
A3
B1
X1
Y1
A3
B2
A3
B2
X2
Y1
A3
B1
X1
Y1
A3
B2
X2
Y1
© 2021 NTT DATA Corporation 14
14
© 2021 NTT DATA Corporation
fpw=offのクラッシュリカバリ
項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=off)
1 リカバリ前
2 リカバリ開始
3 WAL適用
4
5
6
7
A3
B1
X1
Y1
A3
B1
X1
Y1
A3
B1
X1
Y1
A3
B1 A1→A2
A2→A3
B1→B2
X1→X2
CHECKPOINT
ディスクから読み込んだページに対して、
WALが不整合で適用できない
© 2021 NTT DATA Corporation 15
15
© 2021 NTT DATA Corporation
項番 処理・操作 WAL(fpw=on) WAL(fpw=off)
1 CHECKPOINT
2 UPDATE A1→A2
3 UPDATE A2→A3
4 UPDATE B1→B2
5 UPDATE X1→X2
6 CHECKPOINT
7 UPDATE A3→A4
fpw=on/offのWAL出力量
A2
B1
A1→A2
A2→A3 A2→A3
B1→B2 B1→B2
X2
Y1
X1→X2
CHECKPOINT CHECKPOINT
CHECKPOINT CHECKPOINT
A4
B2
A3→A4
fpw=onの場合、
ページ内の1ビットを変更するだけでも
8KBのページイメージをWAL出力
© 2021 NTT DATA Corporation 16
16
© 2021 NTT DATA Corporation
項番 処理・操作
WAL(fpw=on)
※WAL圧縮OFF
WAL(fpw=on)
※WAL圧縮ON
WAL(fpw=off)
1 CHECKPOINT
2 UPDATE A1→A2
3 UPDATE A2→A3
4 UPDATE B1→B2
5 UPDATE X1→X2
6 CHECKPOINT
7 UPDATE A3→A4
fpw=on/offのWAL出力量
A2
B1
A1→A2
A2→A3 A2→A3
B1→B2 B1→B2
X2
Y1
X1→X2
CHECKPOINT CHECKPOINT
CHECKPOINT CHECKPOINT
A4
B2
A3→A4
A2
B1
A2→A3
B1→B2
X2
Y1
CHECKPOINT
CHECKPOINT
A4
B2
圧縮
圧縮
圧縮
wal_compression=onの設定により、
fpw=onでWAL出力されるページイメージ
を圧縮できる
© 2021 NTT DATA Corporation 17
17
© 2021 NTT DATA Corporation
fpw=on/offのWAL出力量
0
20
40
60
80
100
0 100 200 300
WAL出力量(MB)
経過時間(秒)
fpw=on
WAL圧縮off
fpw=on
WAL圧縮on
fpw=off
0
20
40
60
80
100
0 100 200 300
WAL出力量(MB)
経過時間(秒)
fpw=on
WAL圧縮off
fpw=on
WAL圧縮on
fpw=off
pgbenchを1,000tpsで5分間実行して、その間のWAL出力量を設定ごとに比較する。
pgbench_accountsのfillerカラムを
ランダムな文字列に置き換え
pgbenchのDBデータをそのまま利用
(pgbench_accountsのfillerカラムは空文字列) fpw=onだと、
チェックポイント毎に
WAL出力量が増加
fpw=offのWAL出力量は、
onに比べて10分の1未満で、
チェックポイント毎の増加もない
データ大半が空文字のため
WAL圧縮が効きやすい データ大半がランダム文字列のため
WAL圧縮が効きにくい
© 2021 NTT DATA Corporation 18
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。
© 2021 NTT DATA Corporation 19
19
© 2021 NTT DATA Corporation
バックアップでも発生するTorn Page
AA
BB
XX
YY
共有バッファ(メモリ) ディスク
XX
BB
XX
YY
バッファ置換やチェックポイントを
契機としたページ書き出しの開始
ページ書き出しの完了
ページ8KBの前半4KBの
書き込み完了
ページ8KBすべての
書き込み完了
XX
BB
バックアップ
ページ書き出し中のページコピー
© 2021 NTT DATA Corporation 20
20
© 2021 NTT DATA Corporation
バックアップでも発生するTorn Page
バックアップ
(ディスク)
XX
BB
中途半端に書き込まれたページ
(Torn Page / Partial Writes)
XX
YY
リカバリで戻したい最新ページ
WAL
(ディスク)
WAL①
リカバリで適用するWAL
WAL②
XX
YY
完全なページイメージ をそのままWALとして記録することで、
中途半端なページを復旧可能にする!!
full_page_writes=onでは、
© 2021 NTT DATA Corporation 21
21
© 2021 NTT DATA Corporation
fpw=onのバックアップからのリカバリ
項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on)
1
2
3
4
5
6
7
8
A2
B1
A2→A3
B1→B2
X2
Y1
A1
B1
X1
Y1
C1
D1
C1
D2
A2
B1
A3
B1
A3
B1
X2
Y1
A1
B1
X1
Y1
C1
D1
A1
B1
X1
Y1
C1
D1
A3
B1
X1
Y1
C1
D1
C1
D2
X2
Y1
A3
B1
X2
Y1
C1
D1
C1
D2
A3
B2
X2
Y2
X2
Y2
A3
B2
A3
B1
X2
Y1
C1
D2
C1
D3
X2
Y2
C1
D3
A3
B2
X2
Y1
C1
D2
C1→C2
X2
Y2
C2
D3
A3
B2
X2
Y1
C1
D2
バックアップ
CKPT
項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on)
9
10
11
12
13
14
15
16
A4
B2
C2
D3
A3
B2
X2
Y2
C1
D2
A4
B2
X2→X3
A4
B2
X3
Y2
A3
B2
X2
Y2
C2
D3
C2→C3
C3
D3
X3
Y2
A4
B2
X2
Y2
C2
D3
A4
B3
X3
Y3
C3
D4
C3
D3
A4
B3
A4
B2
X3
Y2
C2
D3
CKPT
X3
Y3
A4
B3
A4
B2
X3
Y2
C3
D3
X3
Y3
C3
D4
A4
B2
X3
Y2
C3
D3
X3→X4
X4→X5
X4
Y3
C3
D4
A4
B2
X3
Y2
C3
D3
X5
Y3
C3
D4
A4
B2
X3
Y2
C3
D3
DBデータのランダムリードが3回と少ない
© 2021 NTT DATA Corporation 22
22
© 2021 NTT DATA Corporation
fpw=offのバックアップからのリカバリ
項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=off)
1
2
3
4
5
6
7
8
A2
B1
A2→A3
B1→B2
X2
Y1
A1
B1
X1
Y1
C1
D1
C1
D2
A2
B1
A3
B1
A3
B1
X2
Y1
A1
B1
X1
Y1
C1
D1
A1
B1
X1
Y1
C1
D1
A3
B1
X1
Y1
C1
D1
C1
D2
X2
Y1
A3
B1
X2
Y1
C1
D1
C1
D2
A3
B2
X2
Y2
A3
B2
A3
B1
X2
Y1
C1
D2
X2
Y2
C1
D3
A3
B2
X2
Y1
C1
D2
C1→C2
X2
Y2
C2
D3
A3
B2
X2
Y1
C1
D2
バックアップ
CKPT
項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on)
9
10
11
12
13
14
15
16
A4
B2
C2
D3
A3
B2
X2
Y2
C1
D2
X2→X3
A4
B2
X3
Y2
A3
B2
X2
Y2
C2
D3
C2→C3
C3
D3
X3
Y2
A4
B2
X2
Y2
C2
D3
C3
D3
A4
B3
A4
B2
X3
Y2
C2
D3
CKPT
X3
Y3
A4
B3
A4
B2
X3
Y2
C3
D3
X3
Y3
C3
D4
A4
B2
X3
Y2
C3
D3
X3→X4
X4→X5
X4
Y3
C3
D4
A4
B2
X3
Y2
C3
D3
X5
Y3
C3
D4
A4
B2
X3
Y2
C3
D3
Y1→Y2
D2→D3
A3→A4
B2→B3
Y2→Y3
D3→D4
DBデータのランダムリードが9回と多い
fpw=off設定でも、バックアップ中はfpw=onに強制設定

PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1.
    © 2021 NTTDATA Corporation 1 © 2021 NTT DATA Corporation PostgreSQL の full_page_writes について 2021年6月8日 株式会社NTTデータ 藤井 雅雄 第24回 PostgreSQLアンカンファレンス@オンライン
  • 2.
    © 2021 NTTDATA Corporation 2 2 © 2021 NTT DATA Corporation 自己紹介 藤井 雅雄 Database Technical Lead @ NTTデータ データベース研究開発 PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション WAL圧縮 バックアップ進捗確認 pg_bigm(全文検索モジュール) コミッタ @fujii_masao
  • 3.
    © 2021 NTTDATA Corporation 3 3 © 2021 NTT DATA Corporation https://codezine.jp/article/detail/14175
  • 4.
    © 2021 NTTDATA Corporation 4 4 © 2021 NTT DATA Corporation 本講演について 講演資料は、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech 講演資料に掲載のフロー図は、動作フローのイメージです。 実際の動作とは厳密には異なることにご了承ください。
  • 5.
    © 2021 NTTDATA Corporation full_page_writes
  • 6.
    © 2021 NTTDATA Corporation 6 6 © 2021 NTT DATA Corporation full_page_writes https://www.postgresql.jp/document/current/html/runtime-config-wal.html#GUC-FULL-PAGE-WRITES このパラメータが有効の場合、PostgreSQLサーバは、チェックポイントの後にそのページが最初に変更された過程で、ディ スクページの全ての内容をWALに書き込みます。 オペレーティングシステムがクラッシュした時に進行中のページ書き込みは途中 までしか終わっていない可能性があり、ディスク上のページが古いデータと新しいデータが混在する状態になるため、この機能が必 要です。 通常WAL内に保存される行レベルの変更データは、クラッシュ後のリカバリ時にこうしたページを完全に復旧させるには 不十分です。 完全なページイメージを保存することにより、ページを正しく復旧できることを保証しますが、その代わりに、 WALに書き込まなければならないデータ量が増加することになります。 (WAL再生は常にチェックポイントから始まるため、 チェックポイント後のそれぞれのページの最初の変更時にこれを行えば十分です。 従って、完全ページ書き出しのコストを低減する 方法の1つは、チェックポイント間隔パラメータを大きくすることです。) このパラメータを無効にすると、通常の操作速度が上がりますが、システム障害後に、回復不能なデータ破損、あるいは警告 なしのデータ損壊をもたらすかもしれません。 このリスクは小さいながらfsyncを無効にした場合と似ています。そしてそのfsyncに 対して推奨されている同一の状況に基づく限りにおいて停止されなければなりません。 このパラメータを無効にしてもポイントインタイムリカバリ(PITR)用のWALアーカイブの使用に影響ありません( 25.3を参照し てください)。 このパラメータはpostgresql.confファイル内、または、サーバのコマンドラインでのみ設定可能です。 デフォルトはonです。
  • 7.
    © 2021 NTTDATA Corporation 7 7 © 2021 NTT DATA Corporation full_page_writesで解決したい問題 AA BB XX YY 共有バッファ(メモリ) ディスク XX BB XX YY バッファ置換やチェックポイントを 契機としたページ書き出しの開始 ページ書き出しの完了 ページ8KBの前半4KBの 書き込み完了 ページ8KBすべての 書き込み完了
  • 8.
    © 2021 NTTDATA Corporation 8 8 © 2021 NTT DATA Corporation full_page_writesで解決したい問題 AA BB XX YY 共有バッファ(メモリ) ディスク XX BB バッファ置換やチェックポイントを 契機としたページ書き出しの開始 ページ8KBの前半4KBを 書き込んだ時点で サーバがクラッシュ
  • 9.
    © 2021 NTTDATA Corporation 9 9 © 2021 NTT DATA Corporation full_page_writesで解決したい問題 DBデータ (ディスク) XX BB 中途半端に書き込まれたページ (Torn Page / Partial Writes) XX YY リカバリで戻したい最新ページ WAL (ディスク) WAL① リカバリで適用するWAL WAL② XX YY 完全なページイメージ をそのままWALとして記録することで、 中途半端なページを復旧可能にする!! full_page_writes=onでは、
  • 10.
    © 2021 NTTDATA Corporation 10 10 © 2021 NTT DATA Corporation 項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) WAL(fpw=off) 1 CHECKPOINT 2 UPDATE A1→A2 3 UPDATE A2→A3 4 UPDATE B1→B2 5 UPDATE X1→X2 6 CHECKPOINT 7 UPDATE A3→A4 CHECKPOINTとfpw=on/offの関係 A1 B1 X1 Y1 A1 B1 X1 Y1 A2 B1 A1→A2 A2 B1 X1 Y1 A1 B1 X1 Y1 A3 B1 X1 Y1 A1 B1 X1 Y1 A2→A3 A2→A3 A3 B2 X1 Y1 A1 B1 X1 Y1 B1→B2 B1→B2 X2 Y1 X1→X2 A3 B2 X2 Y1 A1 B1 X1 Y1 A3 B2 X2 Y1 A3 B2 X2 Y1 CHECKPOINT CHECKPOINT CHECKPOINT CHECKPOINT A4 B2 A3→A4 A4 B2 X2 Y1 A3 B2 X2 Y1 fpw=onの場合、 CHECKPOINT以降で、 初回のページ変更時のみ ページイメージをWAL出力 2回目以降のページ変更で は通常のWALを出力 fpw=offの場合、 通常のWALを出力 fpw=onの場合、 CHECKPOINT以降の 初回のページ変更のため ページイメージをWAL出力
  • 11.
    © 2021 NTTDATA Corporation 11 11 © 2021 NTT DATA Corporation 項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) WAL(fpw=off) 1 CHECKPOINT 2 UPDATE A1→A2 3 UPDATE A2→A3 4 UPDATE B1→B2 5 UPDATE X1→X2 6 CHECKPOINT 故障例 A1 B1 X1 Y1 A1 B1 X1 Y1 A2 B1 A1→A2 A2 B1 X1 Y1 A1 B1 X1 Y1 A3 B1 X1 Y1 A1 B1 X1 Y1 A2→A3 A2→A3 A3 B2 X1 Y1 A1 B1 X1 Y1 B1→B2 B1→B2 X2 Y1 X1→X2 A3 B2 X2 Y1 A1 B1 X1 Y1 A3 B2 X2 Y1 A3 B1 X1 Y1 CHECKPOINT CHECKPOINT 1ページ目の前半(A3)はディスクに書けたが、後半(B2)を書く前に故障が発生 2ページ目は、ディスク書き込み前に故障が発生
  • 12.
    © 2021 NTTDATA Corporation 12 12 © 2021 NTT DATA Corporation クラッシュリカバリのゴール 項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) WAL(fpw=off) 1 リカバリ前 2 リカバリ開始 3 WAL適用 4 WAL適用 5 WAL適用 6 WAL適用 7 リカバリ完了 A2 B1 A1→A2 A2→A3 A2→A3 B1→B2 B1→B2 X2 Y1 X1→X2 A3 B1 X1 Y1 CHECKPOINT CHECKPOINT A3 B2 X2 Y1 故障時のディスク上のDBデータに WALを適用して、最新DBデータ (故障時のメモリ上のDBデータ)を 復元したい
  • 13.
    © 2021 NTTDATA Corporation 13 13 © 2021 NTT DATA Corporation fpw=onのクラッシュリカバリ 項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) 1 リカバリ前 2 リカバリ開始 3 WAL適用 4 WAL適用 5 WAL適用 6 WAL適用 7 リカバリ完了 A2 B1 A2→A3 B1→B2 X2 Y1 A3 B1 X1 Y1 CHECKPOINT A3 B2 X2 Y1 A3 B1 X1 Y1 A3 B1 X1 Y1 A2 B1 A3 B1 X1 Y1 A3 B1 A3 B1 X1 Y1 A3 B2 A3 B2 X2 Y1 A3 B1 X1 Y1 A3 B2 X2 Y1
  • 14.
    © 2021 NTTDATA Corporation 14 14 © 2021 NTT DATA Corporation fpw=offのクラッシュリカバリ 項番 処理・操作 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=off) 1 リカバリ前 2 リカバリ開始 3 WAL適用 4 5 6 7 A3 B1 X1 Y1 A3 B1 X1 Y1 A3 B1 X1 Y1 A3 B1 A1→A2 A2→A3 B1→B2 X1→X2 CHECKPOINT ディスクから読み込んだページに対して、 WALが不整合で適用できない
  • 15.
    © 2021 NTTDATA Corporation 15 15 © 2021 NTT DATA Corporation 項番 処理・操作 WAL(fpw=on) WAL(fpw=off) 1 CHECKPOINT 2 UPDATE A1→A2 3 UPDATE A2→A3 4 UPDATE B1→B2 5 UPDATE X1→X2 6 CHECKPOINT 7 UPDATE A3→A4 fpw=on/offのWAL出力量 A2 B1 A1→A2 A2→A3 A2→A3 B1→B2 B1→B2 X2 Y1 X1→X2 CHECKPOINT CHECKPOINT CHECKPOINT CHECKPOINT A4 B2 A3→A4 fpw=onの場合、 ページ内の1ビットを変更するだけでも 8KBのページイメージをWAL出力
  • 16.
    © 2021 NTTDATA Corporation 16 16 © 2021 NTT DATA Corporation 項番 処理・操作 WAL(fpw=on) ※WAL圧縮OFF WAL(fpw=on) ※WAL圧縮ON WAL(fpw=off) 1 CHECKPOINT 2 UPDATE A1→A2 3 UPDATE A2→A3 4 UPDATE B1→B2 5 UPDATE X1→X2 6 CHECKPOINT 7 UPDATE A3→A4 fpw=on/offのWAL出力量 A2 B1 A1→A2 A2→A3 A2→A3 B1→B2 B1→B2 X2 Y1 X1→X2 CHECKPOINT CHECKPOINT CHECKPOINT CHECKPOINT A4 B2 A3→A4 A2 B1 A2→A3 B1→B2 X2 Y1 CHECKPOINT CHECKPOINT A4 B2 圧縮 圧縮 圧縮 wal_compression=onの設定により、 fpw=onでWAL出力されるページイメージ を圧縮できる
  • 17.
    © 2021 NTTDATA Corporation 17 17 © 2021 NTT DATA Corporation fpw=on/offのWAL出力量 0 20 40 60 80 100 0 100 200 300 WAL出力量(MB) 経過時間(秒) fpw=on WAL圧縮off fpw=on WAL圧縮on fpw=off 0 20 40 60 80 100 0 100 200 300 WAL出力量(MB) 経過時間(秒) fpw=on WAL圧縮off fpw=on WAL圧縮on fpw=off pgbenchを1,000tpsで5分間実行して、その間のWAL出力量を設定ごとに比較する。 pgbench_accountsのfillerカラムを ランダムな文字列に置き換え pgbenchのDBデータをそのまま利用 (pgbench_accountsのfillerカラムは空文字列) fpw=onだと、 チェックポイント毎に WAL出力量が増加 fpw=offのWAL出力量は、 onに比べて10分の1未満で、 チェックポイント毎の増加もない データ大半が空文字のため WAL圧縮が効きやすい データ大半がランダム文字列のため WAL圧縮が効きにくい
  • 18.
    © 2021 NTTDATA Corporation 18 その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。
  • 19.
    © 2021 NTTDATA Corporation 19 19 © 2021 NTT DATA Corporation バックアップでも発生するTorn Page AA BB XX YY 共有バッファ(メモリ) ディスク XX BB XX YY バッファ置換やチェックポイントを 契機としたページ書き出しの開始 ページ書き出しの完了 ページ8KBの前半4KBの 書き込み完了 ページ8KBすべての 書き込み完了 XX BB バックアップ ページ書き出し中のページコピー
  • 20.
    © 2021 NTTDATA Corporation 20 20 © 2021 NTT DATA Corporation バックアップでも発生するTorn Page バックアップ (ディスク) XX BB 中途半端に書き込まれたページ (Torn Page / Partial Writes) XX YY リカバリで戻したい最新ページ WAL (ディスク) WAL① リカバリで適用するWAL WAL② XX YY 完全なページイメージ をそのままWALとして記録することで、 中途半端なページを復旧可能にする!! full_page_writes=onでは、
  • 21.
    © 2021 NTTDATA Corporation 21 21 © 2021 NTT DATA Corporation fpw=onのバックアップからのリカバリ 項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) 1 2 3 4 5 6 7 8 A2 B1 A2→A3 B1→B2 X2 Y1 A1 B1 X1 Y1 C1 D1 C1 D2 A2 B1 A3 B1 A3 B1 X2 Y1 A1 B1 X1 Y1 C1 D1 A1 B1 X1 Y1 C1 D1 A3 B1 X1 Y1 C1 D1 C1 D2 X2 Y1 A3 B1 X2 Y1 C1 D1 C1 D2 A3 B2 X2 Y2 X2 Y2 A3 B2 A3 B1 X2 Y1 C1 D2 C1 D3 X2 Y2 C1 D3 A3 B2 X2 Y1 C1 D2 C1→C2 X2 Y2 C2 D3 A3 B2 X2 Y1 C1 D2 バックアップ CKPT 項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) 9 10 11 12 13 14 15 16 A4 B2 C2 D3 A3 B2 X2 Y2 C1 D2 A4 B2 X2→X3 A4 B2 X3 Y2 A3 B2 X2 Y2 C2 D3 C2→C3 C3 D3 X3 Y2 A4 B2 X2 Y2 C2 D3 A4 B3 X3 Y3 C3 D4 C3 D3 A4 B3 A4 B2 X3 Y2 C2 D3 CKPT X3 Y3 A4 B3 A4 B2 X3 Y2 C3 D3 X3 Y3 C3 D4 A4 B2 X3 Y2 C3 D3 X3→X4 X4→X5 X4 Y3 C3 D4 A4 B2 X3 Y2 C3 D3 X5 Y3 C3 D4 A4 B2 X3 Y2 C3 D3 DBデータのランダムリードが3回と少ない
  • 22.
    © 2021 NTTDATA Corporation 22 22 © 2021 NTT DATA Corporation fpw=offのバックアップからのリカバリ 項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=off) 1 2 3 4 5 6 7 8 A2 B1 A2→A3 B1→B2 X2 Y1 A1 B1 X1 Y1 C1 D1 C1 D2 A2 B1 A3 B1 A3 B1 X2 Y1 A1 B1 X1 Y1 C1 D1 A1 B1 X1 Y1 C1 D1 A3 B1 X1 Y1 C1 D1 C1 D2 X2 Y1 A3 B1 X2 Y1 C1 D1 C1 D2 A3 B2 X2 Y2 A3 B2 A3 B1 X2 Y1 C1 D2 X2 Y2 C1 D3 A3 B2 X2 Y1 C1 D2 C1→C2 X2 Y2 C2 D3 A3 B2 X2 Y1 C1 D2 バックアップ CKPT 項番 DBデータ(メモリ) DBデータ(ディスク) WAL(fpw=on) 9 10 11 12 13 14 15 16 A4 B2 C2 D3 A3 B2 X2 Y2 C1 D2 X2→X3 A4 B2 X3 Y2 A3 B2 X2 Y2 C2 D3 C2→C3 C3 D3 X3 Y2 A4 B2 X2 Y2 C2 D3 C3 D3 A4 B3 A4 B2 X3 Y2 C2 D3 CKPT X3 Y3 A4 B3 A4 B2 X3 Y2 C3 D3 X3 Y3 C3 D4 A4 B2 X3 Y2 C3 D3 X3→X4 X4→X5 X4 Y3 C3 D4 A4 B2 X3 Y2 C3 D3 X5 Y3 C3 D4 A4 B2 X3 Y2 C3 D3 Y1→Y2 D2→D3 A3→A4 B2→B3 Y2→Y3 D3→D4 DBデータのランダムリードが9回と多い fpw=off設定でも、バックアップ中はfpw=onに強制設定