SlideShare a Scribd company logo
8
Most read
18
Most read
21
Most read
© 2024 NTT DATA Group Corporation
© 2024 NTT DATA Group Corporation
第48回PostgreSQLアンカンファレンス
バージョン17からの
pg_stat_bgwriter
2024年8月29日
NTTデータグループ 鳥越 淳
© 2024 NTT DATA Group Corporation 2
自己紹介
• 鳥越 淳(とりこし あつし)
• 2008年頃からオープンソースを扱う業務に従事
• PostgreSQLは9.6頃から
• 『PostgreSQL徹底入門 第4版』(翔泳社) 8~13章執筆
© 2024 NTT DATA Group Corporation 3
本講演について
• 今秋リリース予定のPostgreSQL 17に関連する話です。2024年8月時点の情報なので、将来的に変更
される可能性がある点ご了承ください
• その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です
© 2024 NTT DATA Group Corporation 4
background writerってなんだっけ?
© 2024 NTT DATA Group Corporation 5
前提: 共有バッファの使い方超概要
• PostgreSQLでは、基本的にバックエンド※からの読み書きいずれも共有バッファを経由する
• 参照クエリの場合:
• 共有バッファ上にデータがあればそれを読み込む(キャッシュヒット)
• 共有バッファ上にデータがなければ、ストレージにアクセスし共有バッファ上に展開(キャッシュミス)
共有バッファ
バックエンド
バックエンド ストレージ
キャッシュ
ヒット
キャッシュ
ミス
※バックエンド: クライアントのクエリを処理するプロセス
© 2024 NTT DATA Group Corporation 6
前提: 共有バッファの使い方超概要
• PostgreSQLでは、基本的にバックエンドからの読み書きいずれも共有バッファを経由する
• 更新クエリの場合:
• バックエンドは共有バッファに書き込むだけで、ストレージへの永続化はしない
一方でWALは通常ストレージに永続化して、データが失われないようにする
• まだ永続化されていない共有バッファのデータ(dirty)は、基本的にcheckpointerプロセスがあとでま
とめて永続化
共有バッファ
バックエンド
ストレージ
あとで
checkpointer
などが書き込み
共有バッファに
書き込むだけ
高速
checkpointer
© 2024 NTT DATA Group Corporation 7
バックエンドが自らdirtyなデータを書き込むケース
• checkpointerによる永続化が間に合わず、バックエンドが利用可能な共有バッファ領域がない場合、
バックエンドは自らdirtyなデータをストレージに書き込む
• この処理はストレージへの永続化を伴うので高負荷。できるだけ避けたい
共有バッファ
dirty dirty
dirty dirty
dirty dirty
バックエンド
ストレージ
書き込みが間に合
わない..
使えるbufferがない!
クエリ返すのが遅くなるが、
自分でストレージに書き込
むしかない..
checkpointer
© 2024 NTT DATA Group Corporation 8
background writerの出番
• checkpointerによる永続化が間に合わず、バックエンドが利用可能な共有バッファ領域がない場合、
バックエンドは自らdirtyなデータをストレージに書き込む
• この処理はストレージへの永続化を伴うので高負荷。できるだけ避けたい
• background writerは、dirtyなページを定期的に書き込み、バックエンドが利用可能な共有バッファを
事前に作る
共有バッファ
dirty dirty
dirty clean
dirty clean
バックエンド
ストレージ
cleanなバッファがあった
ので、自分でストレージ
に書き込まずに済んだ♪
backgground writerも加勢。
Checkpointに関係なくじわじ
わとストレージへ永続化
checkpointer
background
writer
© 2024 NTT DATA Group Corporation 9
pg_stat_bgwriterのv17での変更
© 2024 NTT DATA Group Corporation 10
pg_stat_bgwriterの17での変更
• background writerの活動をモニタリングするビュー
バージョン16:
© 2024 NTT DATA Group Corporation 11
pg_stat_bgwriterの17での変更
• background writerの活動をモニタリングするビュー
バージョン16 バージョン17
© 2024 NTT DATA Group Corporation 12
pg_stat_bgwriterで削除されたカラム①
• checkpointer関連の情報は、17で新しく作成されたpg_stat_checkpointerビューへ移動
• かなり昔(~9.2)はcheckpointerとbackground writerは同じプロセスだったので、その名残で
pg_stat_bgwriterしかなかった
バージョン16
pg_stat_checkpointer
へ移動
© 2024 NTT DATA Group Corporation 13
pg_stat_bgwriterで削除されたカラム②
• バックエンドが自らdirtyなデータをストレージに書き込んだ件数(buffers_backend,
buffers_backend_fsync)も削除 → 17ではどこを参照すればよい?
バージョン16
p.7再掲
© 2024 NTT DATA Group Corporation 14
pg_stat_bgwriterで削除されたカラム②
• バックエンドが自らdirtyなデータをストレージに書き込んだ件数(buffers_backend, あああ
buffers_backend_fsync)も削除 → 17ではどこを参照すればよい?
• pg_stat_ioのbackend_type = client backend, object = relation, context = normal
がpg_stat_bgwriter.buffers_backendで見たかった情報に相当
バージョン17 リリースノートより
© 2024 NTT DATA Group Corporation 15
pg_stat_bgwriterで削除されたカラム②
• バックエンドが自らdirtyなデータをストレージに書き込んだ件数(buffers_backend, あああ
buffers_backend_fsync)も削除 → 17ではどこを参照すればよい?
• pg_stat_ioのbackend_type = client backend, object = relation, context = normal
がpg_stat_bgwriter.buffers_backendで見たかった情報に相当
バージョン17 リリースノートより
なぜ’similar’?
© 2024 NTT DATA Group Corporation 16
pg_stat_bgwriter.buffers_backendから
pg_stat_ioへ
© 2024 NTT DATA Group Corporation 17
pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い
• buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき
ず、チューニングなどする上で必ずしも有益な情報ではなかった
© 2024 NTT DATA Group Corporation 18
ストレージ
pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い①
• buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき
ず、チューニングなどする上で必ずしも有益な情報ではなかった
• ファイルサイズを拡張するI/O(extend)もbuffers_backendに含まれるが、このI/Oはバックエンドが
実施する必要がある
• 例えば、extend起因でbuffers_backendが大きい場合に、background writerのチューニングを
実施しても効果は見込めない
共有バッファ
バックエンド
ストレージ上のブロックに
空き領域がない場合は、
ファイルを拡張する
background
writer
ファイルサイズ拡張は
私の仕事じゃない..
© 2024 NTT DATA Group Corporation 19
pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い①
• buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき
ず、チューニングなどする上で必ずしも有益な情報ではなかった
• ファイルサイズを拡張するI/O(extend)もbuffers_backendに含まれるが、このI/Oはバックエンドが
実施する必要がある
• 例えば、extend起因でbuffers_backendが大きい場合に、background writerのチューニングを
実施しても効果は見込めない
データを挿入し、extend
を発生させる
buffers_backendは
12190
writesは5363
そこまで大きくない extendも5406
かなり多い
© 2024 NTT DATA Group Corporation 20
pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い②
• buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき
ず、チューニングなどする上で必ずしも有益な情報ではなかった
• バックエンド以外のプロセスによって発生したI/Oについてもbuffers_backendに含まれていた
• 例えば、vacuumのworkerプロセスが発生させるI/Oについてもbuffers_backendにカウントしてい
たが、こちらはvacuum_buffer_usage_limitなどvacuum専用の共有バッファアクセス戦略をチュー
ニングするパラメータがあるので、区別されるのが望ましい
データを削除し、vacuumが
動作するのを待つ
buffers_backendは
26971
backendのwritesは
5358とそこまで大きくない
vacuumのwritesが10894
と大きい値
© 2024 NTT DATA Group Corporation 21
まとめ
• pg_stat_bgwriterは、バージョン17から名前どおりbackground writerの情報だけになる予定
• checkpointerの情報はpg_stat_checkpointerに移動
• バックエンドによる直接の書き込みは、pg_stat_ioのbackend_type = ‘client backend‘を参照
。以前より粒度の細かい適切な情報が取得可能
© 2024 NTT DATA Group Corporation 22
おまけ
• 今回pg_stat_bgwriter、pg_stat_ioをリセットするためにpg_stat_reset_shared()を利用しま
した。本関数は16までは引数でリセットする対象を指定する必要がありました:
• 17からは、引数を指定しない場合、各種統計情報をすべて※削除することが可能になる予定です:
※具体的には、pg_stat_archiver, pg_stat_bgwriter, pg_stat_checkpointer, pg_stat_io, pg_stat_recovery_prefetch,
pg_stat_slru, pg_stat_wal
記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PDF
PostgreSQLの運用・監視にまつわるエトセトラ
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PDF
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
PDF
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL17対応版 EXPLAINオプションについて (第49回PostgreSQLアンカンファレンス@東京 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのトラブルシューティング@第5回中国地方DB勉強会
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)

What's hot (20)

PDF
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)
PDF
PostgreSQLバックアップの基本
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PPTX
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PDF
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL: XID周回問題に潜む別の問題
PDF
PostgreSQL 15 開発最新情報
PDF
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PDF
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション徹底紹介
PDF
Vacuum徹底解説
PDF
あなたの知らないPostgreSQL監視の世界
PPTX
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
auto_explainのススメ (第48回 PostgreSQLアンカンファレンス 発表資料)
PostgreSQLバックアップの基本
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQL16でのロールに関する変更点(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL 15 開発最新情報
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
pg_hint_planを知る(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
NTT DATA と PostgreSQL が挑んだ総力戦
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
pg_stat_activityの不可解な観測結果の謎 (第47回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLレプリケーション徹底紹介
Vacuum徹底解説
あなたの知らないPostgreSQL監視の世界
AlloyDBを触ってみた!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
Ad

Similar to バージョン17からのpg_stat_bgwriter (第48回 PostgreSQLアンカンファレンス 発表資料) (20)

PDF
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PDF
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PPTX
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PDF
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
PDF
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
PDF
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
PDF
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
PDF
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
論理レプリケーション用スロットのフェールオーバ機能 (第48回 PostgreSQLアンカンファレンス 発表資料)
PDF
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PDF
PostgreSQLによるデータ分析ことはじめ
PDF
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PPTX
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
PDF
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
PPTX
OpenStack Congress Deep Dive
PDF
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL開発コミュニティに参加しよう! (オープンデベロッパーズカンファレンス(ODC)2024 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
YugabyteDBの拡張機能(YugabyteDB Meetup #2 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
論理レプリケーション用スロットのフェールオーバ機能 (第48回 PostgreSQLアンカンファレンス 発表資料)
PGOを用いたPostgreSQL on Kubernetes入門(PostgreSQL Conference Japan 2022 発表資料)
PostgreSQLによるデータ分析ことはじめ
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLでpg_bigmを使って日本語全文検索 (MySQLとPostgreSQLの日本語全文検索勉強会 発表資料)
OSS活動のやりがいとそれから得たもの - PostgreSQLコミュニティにて -
OpenStack Congress Deep Dive
世界征服を目指す Jubatus だからこそ期待する 5 つのポイント
Ad

More from NTT DATA Technology & Innovation (20)

PDF
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PDF
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PDF
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
PDF
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
PDF
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
PDF
2025年現在のNewSQL (最強DB講義 #36 発表資料)
PDF
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
PDF
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
PDF
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
PDF
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PDF
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
PDF
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
PDF
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
PDF
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)
開発中の新機能 Spark Declarative Pipeline に飛びついてみたが難しかった(JEDAI DAIS Recap#2 講演資料)
PostgreSQL18新機能紹介(db tech showcase 2025 発表資料)
PGConf.dev 2025 参加レポート (JPUG総会併設セミナー2025 発表資料)
Can We Use Rust to Develop Extensions for PostgreSQL? (POSETTE: An Event for ...
つくって壊して直して学ぶ Database on Kubernetes (CloudNative Days Summer 2025 発表資料)
2025年現在のNewSQL (最強DB講義 #36 発表資料)
Java in Japan: A Journey of Community, Culture, and Global Integration (JavaO...
Unveiling the Hidden Layers of Java Class Files: Beyond Bytecode (Devnexus 2025)
論理レプリケーションのアーキテクチャ (第52回 PostgreSQLアンカンファレンス@オンライン 発表資料)
実はアナタの身近にある!? Linux のチェックポイント/レストア機能 (NTT Tech Conference 2025 発表資料)
Apache Sparkに対するKubernetesのNUMAノードを意識したリソース割り当ての性能効果 (Open Source Conference ...
PostgreSQL最新動向 ~カラムナストアから生成AI連携まで~ (Open Source Conference 2025 Tokyo/Spring ...
pgbenchのスレッドとクライアント (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2024年の開発状況 (第51回 PostgreSQLアンカンファレンス@オンライン 発表資料)
ストリーム処理はデータを失うから怖い?それ、何とかできますよ! 〜Apahe Kafkaを用いたストリーム処理における送達保証〜 (Open Source...
生成AI時代のPostgreSQLハイブリッド検索 (第50回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
パーティションのATTACH時の注意ポイント (第49回PostgreSQLアンカンファレンス@東京 発表資料)

バージョン17からのpg_stat_bgwriter (第48回 PostgreSQLアンカンファレンス 発表資料)

  • 1. © 2024 NTT DATA Group Corporation © 2024 NTT DATA Group Corporation 第48回PostgreSQLアンカンファレンス バージョン17からの pg_stat_bgwriter 2024年8月29日 NTTデータグループ 鳥越 淳
  • 2. © 2024 NTT DATA Group Corporation 2 自己紹介 • 鳥越 淳(とりこし あつし) • 2008年頃からオープンソースを扱う業務に従事 • PostgreSQLは9.6頃から • 『PostgreSQL徹底入門 第4版』(翔泳社) 8~13章執筆
  • 3. © 2024 NTT DATA Group Corporation 3 本講演について • 今秋リリース予定のPostgreSQL 17に関連する話です。2024年8月時点の情報なので、将来的に変更 される可能性がある点ご了承ください • その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です
  • 4. © 2024 NTT DATA Group Corporation 4 background writerってなんだっけ?
  • 5. © 2024 NTT DATA Group Corporation 5 前提: 共有バッファの使い方超概要 • PostgreSQLでは、基本的にバックエンド※からの読み書きいずれも共有バッファを経由する • 参照クエリの場合: • 共有バッファ上にデータがあればそれを読み込む(キャッシュヒット) • 共有バッファ上にデータがなければ、ストレージにアクセスし共有バッファ上に展開(キャッシュミス) 共有バッファ バックエンド バックエンド ストレージ キャッシュ ヒット キャッシュ ミス ※バックエンド: クライアントのクエリを処理するプロセス
  • 6. © 2024 NTT DATA Group Corporation 6 前提: 共有バッファの使い方超概要 • PostgreSQLでは、基本的にバックエンドからの読み書きいずれも共有バッファを経由する • 更新クエリの場合: • バックエンドは共有バッファに書き込むだけで、ストレージへの永続化はしない 一方でWALは通常ストレージに永続化して、データが失われないようにする • まだ永続化されていない共有バッファのデータ(dirty)は、基本的にcheckpointerプロセスがあとでま とめて永続化 共有バッファ バックエンド ストレージ あとで checkpointer などが書き込み 共有バッファに 書き込むだけ 高速 checkpointer
  • 7. © 2024 NTT DATA Group Corporation 7 バックエンドが自らdirtyなデータを書き込むケース • checkpointerによる永続化が間に合わず、バックエンドが利用可能な共有バッファ領域がない場合、 バックエンドは自らdirtyなデータをストレージに書き込む • この処理はストレージへの永続化を伴うので高負荷。できるだけ避けたい 共有バッファ dirty dirty dirty dirty dirty dirty バックエンド ストレージ 書き込みが間に合 わない.. 使えるbufferがない! クエリ返すのが遅くなるが、 自分でストレージに書き込 むしかない.. checkpointer
  • 8. © 2024 NTT DATA Group Corporation 8 background writerの出番 • checkpointerによる永続化が間に合わず、バックエンドが利用可能な共有バッファ領域がない場合、 バックエンドは自らdirtyなデータをストレージに書き込む • この処理はストレージへの永続化を伴うので高負荷。できるだけ避けたい • background writerは、dirtyなページを定期的に書き込み、バックエンドが利用可能な共有バッファを 事前に作る 共有バッファ dirty dirty dirty clean dirty clean バックエンド ストレージ cleanなバッファがあった ので、自分でストレージ に書き込まずに済んだ♪ backgground writerも加勢。 Checkpointに関係なくじわじ わとストレージへ永続化 checkpointer background writer
  • 9. © 2024 NTT DATA Group Corporation 9 pg_stat_bgwriterのv17での変更
  • 10. © 2024 NTT DATA Group Corporation 10 pg_stat_bgwriterの17での変更 • background writerの活動をモニタリングするビュー バージョン16:
  • 11. © 2024 NTT DATA Group Corporation 11 pg_stat_bgwriterの17での変更 • background writerの活動をモニタリングするビュー バージョン16 バージョン17
  • 12. © 2024 NTT DATA Group Corporation 12 pg_stat_bgwriterで削除されたカラム① • checkpointer関連の情報は、17で新しく作成されたpg_stat_checkpointerビューへ移動 • かなり昔(~9.2)はcheckpointerとbackground writerは同じプロセスだったので、その名残で pg_stat_bgwriterしかなかった バージョン16 pg_stat_checkpointer へ移動
  • 13. © 2024 NTT DATA Group Corporation 13 pg_stat_bgwriterで削除されたカラム② • バックエンドが自らdirtyなデータをストレージに書き込んだ件数(buffers_backend, buffers_backend_fsync)も削除 → 17ではどこを参照すればよい? バージョン16 p.7再掲
  • 14. © 2024 NTT DATA Group Corporation 14 pg_stat_bgwriterで削除されたカラム② • バックエンドが自らdirtyなデータをストレージに書き込んだ件数(buffers_backend, あああ buffers_backend_fsync)も削除 → 17ではどこを参照すればよい? • pg_stat_ioのbackend_type = client backend, object = relation, context = normal がpg_stat_bgwriter.buffers_backendで見たかった情報に相当 バージョン17 リリースノートより
  • 15. © 2024 NTT DATA Group Corporation 15 pg_stat_bgwriterで削除されたカラム② • バックエンドが自らdirtyなデータをストレージに書き込んだ件数(buffers_backend, あああ buffers_backend_fsync)も削除 → 17ではどこを参照すればよい? • pg_stat_ioのbackend_type = client backend, object = relation, context = normal がpg_stat_bgwriter.buffers_backendで見たかった情報に相当 バージョン17 リリースノートより なぜ’similar’?
  • 16. © 2024 NTT DATA Group Corporation 16 pg_stat_bgwriter.buffers_backendから pg_stat_ioへ
  • 17. © 2024 NTT DATA Group Corporation 17 pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い • buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき ず、チューニングなどする上で必ずしも有益な情報ではなかった
  • 18. © 2024 NTT DATA Group Corporation 18 ストレージ pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い① • buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき ず、チューニングなどする上で必ずしも有益な情報ではなかった • ファイルサイズを拡張するI/O(extend)もbuffers_backendに含まれるが、このI/Oはバックエンドが 実施する必要がある • 例えば、extend起因でbuffers_backendが大きい場合に、background writerのチューニングを 実施しても効果は見込めない 共有バッファ バックエンド ストレージ上のブロックに 空き領域がない場合は、 ファイルを拡張する background writer ファイルサイズ拡張は 私の仕事じゃない..
  • 19. © 2024 NTT DATA Group Corporation 19 pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い① • buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき ず、チューニングなどする上で必ずしも有益な情報ではなかった • ファイルサイズを拡張するI/O(extend)もbuffers_backendに含まれるが、このI/Oはバックエンドが 実施する必要がある • 例えば、extend起因でbuffers_backendが大きい場合に、background writerのチューニングを 実施しても効果は見込めない データを挿入し、extend を発生させる buffers_backendは 12190 writesは5363 そこまで大きくない extendも5406 かなり多い
  • 20. © 2024 NTT DATA Group Corporation 20 pg_stat_bgwriter.buffers_backend*とpg_stat_ioの違い② • buffers_backendはいろいろなもののI/Oが混ざっていて、誰が何のためにI/Oしているのか区別でき ず、チューニングなどする上で必ずしも有益な情報ではなかった • バックエンド以外のプロセスによって発生したI/Oについてもbuffers_backendに含まれていた • 例えば、vacuumのworkerプロセスが発生させるI/Oについてもbuffers_backendにカウントしてい たが、こちらはvacuum_buffer_usage_limitなどvacuum専用の共有バッファアクセス戦略をチュー ニングするパラメータがあるので、区別されるのが望ましい データを削除し、vacuumが 動作するのを待つ buffers_backendは 26971 backendのwritesは 5358とそこまで大きくない vacuumのwritesが10894 と大きい値
  • 21. © 2024 NTT DATA Group Corporation 21 まとめ • pg_stat_bgwriterは、バージョン17から名前どおりbackground writerの情報だけになる予定 • checkpointerの情報はpg_stat_checkpointerに移動 • バックエンドによる直接の書き込みは、pg_stat_ioのbackend_type = ‘client backend‘を参照 。以前より粒度の細かい適切な情報が取得可能
  • 22. © 2024 NTT DATA Group Corporation 22 おまけ • 今回pg_stat_bgwriter、pg_stat_ioをリセットするためにpg_stat_reset_shared()を利用しま した。本関数は16までは引数でリセットする対象を指定する必要がありました: • 17からは、引数を指定しない場合、各種統計情報をすべて※削除することが可能になる予定です: ※具体的には、pg_stat_archiver, pg_stat_bgwriter, pg_stat_checkpointer, pg_stat_io, pg_stat_recovery_prefetch, pg_stat_slru, pg_stat_wal