SlideShare a Scribd company logo
© 2023 NTT DATA Corporation 1
第39回 PostgreSQLアンカンファレンス@オンライン
統計情報のリセットによるautovacuumへの影響について
2023年2月20日
株式会社NTTデータ 藤井 雅雄
© 2023 NTT DATA Corporation 2
自己紹介
藤井 雅雄
Database Technical Lead @ NTTデータ
データベース研究開発
PostgreSQL 技術支援
PostgreSQLコミッタ
レプリケーション
WAL圧縮
バックアップ進捗確認
pg_bigm(全文検索モジュール) コミッタ
fujii_masao
MasaoFujii
© 2023 NTT DATA Corporation 3
本講演について
講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
© 2023 NTT DATA Corporation 4
統計情報のリセットによる
autovacuumへの影響について
© 2023 NTT DATA Corporation 5
統計情報のリセットによるautovacuumへの影響について、ドキュメントに警告が追記
2022年10月に、ドキュメントへの警告の追記がコミット
doc: warn pg_stat_reset() can cause vacuum/analyze problems
https://github.com/postgres/postgres/commit/4d070469c19f85043293789c570dbe8fb41ab1bb
ドキュメントには以下の警告が追記
Warning
Using pg_stat_reset() also resets counters that autovacuum
uses to determine when to trigger a vacuum or an analyze.
Resetting these counters can cause autovacuum to not perform
necessary work, which can cause problems such as table bloat
or out-dated table statistics. A database-wide ANALYZE is
recommended after the statistics have been reset.
https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-STATS-FUNCTIONS
意訳すると、
• 統計情報がリセットされると、autovacuumが必要なVACUUMや
ANALYZEを実行できない(実行が必要と判断できない)ことがある。
• この問題を解消するには、DB全体にANALYZEを実行して統計情報を
アップデートすることが推奨される。
© 2023 NTT DATA Corporation 6
autovacuumによるVACUUMとANALYZEの必要性判断
autovacuumは、以下の条件いずれかを満たすテーブルについてVACUUMが必要と判断
pg_stat_all_tables.n_dead_tup >
autovacuum_vacuum_threshold
+ autovacuum_vacuum_scale_factor * pg_class.reltuples
autovacuum_vacuum_insert_threshold >= 0 &&
pg_stat_all_tables.n_ins_since_vacuum >
autovacuum_vacuum_insert_threshold
+ autovacuum_vacuum_insert_scale_factor * pg_class.reltuples
autovacuumは、以下の条件を満たすテーブルについてANALYZEが必要と判断
pg_stat_all_tables.n_mod_since_analyze >
autovacuum_analyze_threshold
+ autovacuum_analyze_scale_factor * pg_class.reltuples
ゴミレコード数が指定の閾値より多いテーブルには、
(ゴミ回収のため)VACUUMが必要と判断
前回のVACUUM以降に挿入されたレコード件数
が指定の閾値より多いテーブルには、(インデック
スオンリイースキャンを効かせるため)VACUUMが
必要と判断
前回のANALYZE以降に挿入・更新・削除されたレコー
ド件数が指定の閾値より多いテーブルには、(プランナ統
計情報の最新化のため)ANALYZEが必要と判断
© 2023 NTT DATA Corporation 7
0
統計情報がリセットされると、
autovacuumは、以下の条件いずれかを満たすテーブルについてVACUUMが必要と判断
pg_stat_all_tables.n_dead_tup >
autovacuum_vacuum_threshold
+ autovacuum_vacuum_scale_factor * pg_class.reltuples
autovacuum_vacuum_insert_threshold >= 0 &&
pg_stat_all_tables.n_ins_since_vacuum >
autovacuum_vacuum_insert_threshold
+ autovacuum_vacuum_insert_scale_factor * pg_class.reltuples
autovacuumは、以下の条件を満たすテーブルについてANALYZEが必要と判断
pg_stat_all_tables.n_mod_since_analyze >
autovacuum_analyze_threshold
+ autovacuum_analyze_scale_factor * pg_class.reltuples
不等式左辺の統計情報の値が0にリセットされ、
一方で、右辺はパラメータやカタログ情報
(pg_class.reltuples)のためリセットされな
いことから、不等式が成り立たず、
autovacuumはVACUUMやANALYZEを
不要と判断する。
リセット以降に統計情報の値が0からカウント
アップされていき、指定の閾値より多くなったら、
autovacuumはVACUUMやANALYZEを
必要と判断する。
0
0
不等式左辺の統計情報の値
>
>
>
© 2023 NTT DATA Corporation 8
autovacuumがVACUUM実行する例
=# CREATE TABLE test AS SELECT n i, n j FROM generate_series(1, 100000) n;
=# VACUUM ANALYZE test;
=# ALTER TABLE test SET (log_autovacuum_min_duration = 0);
=# SELECT current_setting('autovacuum_vacuum_threshold')::numeric +
current_setting('autovacuum_vacuum_scale_factor')::numeric * reltuples threshold
FROM pg_class WHERE relname = 'test';
threshold
-----------
20050
(1 row)
=# UPDATE test SET j = j + 1 WHERE i <= 20051;
LOG: automatic vacuum of table "postgres.public.test": index scans: 0
pages: 0 removed, 532 remain, 179 scanned (33.65% of total)
tuples: 20051 removed, 99906 remain, 0 are dead but not yet removable
removable cutoff: 750, which was 0 XIDs old when operation ended
....
閾値より多いレコードをUPDATEして、
その分のゴミレコードを生成すると、
autovacuumがVACUUMを実行して、
そのログが出力される
autovacuumがVACUUMを必要と判断する
ゴミレコード数の閾値を計算
レコード数10万件のテーブルを作成して、
autovacuumが走ったらログ出力するように設定
© 2023 NTT DATA Corporation 9
統計情報リセットによりautovacuumがVACUUM実行しない例
UPDATE test SET j = j + 1 WHERE i BETWEEN 1 AND 10000;
SELECT pg_stat_reset();
UPDATE test SET j = j + 1 WHERE i BETWEEN 10001 AND 20000;
SELECT pg_stat_reset();
UPDATE test SET j = j + 1 WHERE i BETWEEN 20001 AND 30000;
SELECT pg_stat_reset();
UPDATE test SET j = j + 1 WHERE i BETWEEN 30001 AND 40000;
SELECT pg_stat_reset();
UPDATE test SET j = j + 1 WHERE i BETWEEN 40001 AND 50000;
.... (autovacuumのログが出力されない)
ゴミレコード数が閾値を超過しないように、
統計情報のリセットを挟みながらUPDATEすると、
閾値より大幅に多いレコードをUPDATEして
その分のゴミレコードが発生しても、
autovacuumはVACUUM実行しない
(そのautovacuumのログは出力されない)
© 2023 NTT DATA Corporation 10
統計情報のリセットの契機
① pg_stat_reset()の実行
② リカバリ (クラッシュリカバリ及びアーカイブリカバリ) の実行
③ レプリケーションのスタンバイの初期起動
 初期起動によりスタンバイ側の統計情報はリセットされる。以降のスタンバイ動作中、スタンバイ上でのクエリ実行
により統計情報の一部(スキャン件数など)は更新されるが、autovacuumが使うpg_stat_all_tablesの
n_dead_tupやn_ins_since_vacuum、n_mod_since_analyzeは0のまま(統計情報がプライマリ側
からレプリケーションされることもない)
 レプリケーションによる高可用構成において、フェイルオーバなどでスタンバイがプライマリに昇格すると、
autovacuumが使うカラムが0のままとなり、VACUUMやANALYZEの必要性判断を正しく行えない可能性が
ある
© 2023 NTT DATA Corporation 11
統計情報のリセットによるautovacuumへの影響が疑われる場合
PostgreSQLドキュメントでは、DB全体へのANALYZE実行が推奨されている。
A database-wide ANALYZE is recommended after the statistics have been reset.
https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-STATS-FUNCTIONS
➡ ANALYZE実行により統計情報のpg_stat_all_tables.n_dead_tupが更新されて、
autovacuumは適切にVACUUMの必要性を判断できるようになる
pg_stat_all_tables.n_dead_tup >
autovacuum_vacuum_threshold
+ autovacuum_vacuum_scale_factor * pg_class.reltuples
➡ ANALYZE実行では統計情報のpg_stat_all_tables.n_ins_since_vacuumは更新されないため、
レコード挿入件数に応じたVACUUMが統計情報リセットにより不足していると想定される場合は、
個別にVACUUMを実行する必要がある
autovacuum_vacuum_insert_threshold >= 0 &&
pg_stat_all_tables.n_ins_since_vacuum >
autovacuum_vacuum_insert_threshold
+ autovacuum_vacuum_insert_scale_factor * pg_class.reltuples
© 2023 NTT DATA Corporation 12
統計情報のリセットによるautovacuumへの影響が疑われる場合
PostgreSQLドキュメントでは、DB全体へのANALYZE実行が推奨されている。
A database-wide ANALYZE is recommended after the statistics have been reset.
https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-STATS-FUNCTIONS
➡ ANALYZE実行では統計情報のpg_stat_all_tables.n_mod_since_analyzeは更新されないが、
そもそもANALYZEが実行されるため、ANALYZE不足の可能性は解消される
pg_stat_all_tables.n_mod_since_analyze >
autovacuum_analyze_threshold
+ autovacuum_analyze_scale_factor * pg_class.reltuples
© 2023 NTT DATA Corporation 13
個人的には、
必要に応じて自分たちでVACUUMとANALYZEを
定期実行する仕組みを検討する。
autovacuumに任せきりにしない。
統計情報のリセット後に、
DB全体にANALYZEを実行する
統計情報のリセット後に、
該当のテーブルに対してのみ
ANALYZEを実行する
pg_statsinfoなどでゴミレコードの状況を監視して、その監視結果に応じてVACUUMやANALYZEを実行する
統計情報が
頻繁にリセットされる?
統計情報のリセット後に
DB全体にANALYZEを
実行できる"余裕"がある?
VACUUMやANALYZEの
実行が少しでも遅れることが
許されないテーブルがある?
統計情報が頻繁にリセットされる状況でなければ、リカバリやフェイルオーバの後にVACUUMとANALYZEが
閾値の2倍分だけ実行が遅れる程度の影響なので、そこまで問題視する必要はないかもしれない??
フローチャート的に対応を検討すると、
Yes
Yes
Yes
No
No
No
© 2023 NTT DATA Corporation 14
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

What's hot

Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
Masahiko Sawada
 

What's hot (20)

PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
 
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL16新機能紹介 - libpq接続ロード・バランシング(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
 
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
pg_dbms_statsの紹介
pg_dbms_statsの紹介pg_dbms_statsの紹介
pg_dbms_statsの紹介
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(PostgreSQL Conference Japa...
 
Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会Inside vacuum - 第一回PostgreSQLプレ勉強会
Inside vacuum - 第一回PostgreSQLプレ勉強会
 
アーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーションアーキテクチャから理解するPostgreSQLのレプリケーション
アーキテクチャから理解するPostgreSQLのレプリケーション
 
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
 
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
PostgreSQL13でのpg_basebackupの改善について(第13回PostgreSQLアンカンファレンス@オンライン)
 
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
レプリケーション遅延の監視について(第40回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
スケールアウトするPostgreSQLを目指して!その第一歩!(NTTデータ テクノロジーカンファレンス 2020 発表資料)
 
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!祝!PostgreSQLレプリケーション10周年!徹底紹介!!
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
 
まずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニングまずやっとくPostgreSQLチューニング
まずやっとくPostgreSQLチューニング
 
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
速習!論理レプリケーション ~基礎から最新動向まで~(PostgreSQL Conference Japan 2022 発表資料)
 
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題PostgreSQL: XID周回問題に潜む別の問題
PostgreSQL: XID周回問題に潜む別の問題
 
PostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラPostgreSQLの運用・監視にまつわるエトセトラ
PostgreSQLの運用・監視にまつわるエトセトラ
 
PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報PostgreSQL 15 開発最新情報
PostgreSQL 15 開発最新情報
 

Similar to 統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)

Similar to 統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料) (20)

オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
オンライン物理バックアップの排他モードと非排他モードについて(第15回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
Postgres Playground で pgbench を走らせよう!(第35回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
[Cloud OnAir] BigQuery の一般公開データセットを 利用した実践的データ分析 2019年3月28日 放送
 
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
押さえておきたい、PostgreSQL 13 の新機能!! (PostgreSQL Conference Japan 2020講演資料)
 
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
PostgreSQLのバグとの付き合い方 ~バグの調査からコミュニティへの報告、修正パッチ投稿まで~(Open Source Conference 202...
 
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
PGOを用いたPostgreSQL on Kubernetes入門(Open Source Conference 2023 Online/Hokkaido...
 
10大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon201510大ニュースで振り返るPGCon2015
10大ニュースで振り返るPGCon2015
 
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
GraalVMでのFlight Recorderを使ったパフォーマンス解析(JJUG CCC 2023 Spring)
 
Oracle Cloud Infrastructure:2023年4月度サービス・アップデート
Oracle Cloud Infrastructure:2023年4月度サービス・アップデートOracle Cloud Infrastructure:2023年4月度サービス・アップデート
Oracle Cloud Infrastructure:2023年4月度サービス・アップデート
 
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
PostgreSQLをKubernetes上で活用するためのOperator紹介!(Cloud Native Database Meetup #3 発表資料)
 
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
[Cloud OnAir] 最新アップデート Google Cloud データ関連ソリューション 2020年5月14日 放送
 
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
[Cloud OnAir] Google Networking Deep Dive ! その技術と設計の紹介 2018年8月9日 放送
 
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
CloudNativePGを動かしてみた! ~PostgreSQL on Kubernetes~(第34回PostgreSQLアンカンファレンス@オンライ...
 
pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)pg_bigmを用いた全文検索のしくみ(前編)
pg_bigmを用いた全文検索のしくみ(前編)
 
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)Cloud impact on IT industry (in Japanese)
Cloud impact on IT industry (in Japanese)
 
Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201Myfirst cloudfoundry intro_20161201
Myfirst cloudfoundry intro_20161201
 
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
MesonでPostgreSQLをビルドしてみよう!(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

More from NTT DATA Technology & Innovation

More from NTT DATA Technology & Innovation (20)

YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
YugabyteDB適用に向けた取り組みと隠れた魅力 (DSS Asia 2024 発表資料)
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
OSSデータベースの開発コミュニティに参加しよう! (DEIM2024 発表資料)
 
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
COPY FROMで異常データをスキップできるようになった話(第45回 PostgreSQLアンカンファレンス@オンライン 発表資料)
 
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
Cloud Skills Challenge 2023 winter 〜Azureを頑張る理由と頑張り方
 
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
Unlocking Transformation: Implementing GitOps Practices in Conservative Organ...
 
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
Databricksチューニングあれこれ(JEDAI 2023 X‘mas/忘年会 Meetup! LT登壇資料)
 
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
詳説探究!Cloud Native Databaseの現在地点(CloudNative Days Tokyo 2023 発表資料)
 
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
 
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
速習! PostgreSQL専用HAソフトウェア: Patroni(PostgreSQL Conference Japan 2023 発表資料)
 
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
pgvectorを使ってChatGPTとPostgreSQLを連携してみよう!(PostgreSQL Conference Japan 2023 発表資料)
 
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
マネージドPostgreSQLの実現に向けたPostgreSQL機能向上(PostgreSQL Conference Japan 2023 発表資料)
 
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
最新機能までを総ざらい!PostgreSQLの注目機能を振り返る(第32回 中国地方DB勉強会 in 岡山 発表資料)
 
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
骨抜きアジャイルの骨を生み出す 〜私(スクラムマスター)のXP学習記録〜(XP祭り2023 発表資料)
 
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
機械学習モデルを REST API としてサービングするシステム開発における上流プロセスの絞り込みと効果検証(PM学会2023年度秋季研究発表大会 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
 
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
PostgreSQL on Kubernetes: Realizing High Availability with PGO (Postgres Ibiz...
 
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
オンプレミス回帰の動きに備えよ ~クラウドの手法をオンプレミスでも実現するには~(CloudNative Days Fukuoka 2023 発表資料)
 
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
Prometheus Operator 入門(Kubernetes Novice Tokyo #26 発表資料)
 
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
ChatGPTのデータソースにPostgreSQLを使う(第42回PostgreSQLアンカンファレンス@オンライン 発表資料)
 

Recently uploaded

2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
ssuserbefd24
 

Recently uploaded (10)

論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
論文紹介: Exploiting semantic segmentation to boost reinforcement learning in vid...
 
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
Amazon Cognitoで実装するパスキー (Security-JAWS【第33回】 勉強会)
 
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
MPAなWebフレームワーク、Astroの紹介 (その2) 2024/05/24の勉強会で発表されたものです。
 
【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow【AI論文解説】Consistency ModelとRectified Flow
【AI論文解説】Consistency ModelとRectified Flow
 
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
5/22 第23回 Customer系エンジニア座談会のスライド 公開用 西口瑛一
 
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
2024年度_サイバーエージェント_新卒研修「データベースの歴史」.pptx
 
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
2024年5月25日Serverless Meetup大阪 アプリケーションをどこで動かすべきなのか.pptx
 
20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf20240523_IoTLT_vol111_kitazaki_v1___.pdf
20240523_IoTLT_vol111_kitazaki_v1___.pdf
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
論文紹介: Offline Q-Learning on diverse Multi-Task data both scales and generalizes
 

統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1. © 2023 NTT DATA Corporation 1 第39回 PostgreSQLアンカンファレンス@オンライン 統計情報のリセットによるautovacuumへの影響について 2023年2月20日 株式会社NTTデータ 藤井 雅雄
  • 2. © 2023 NTT DATA Corporation 2 自己紹介 藤井 雅雄 Database Technical Lead @ NTTデータ データベース研究開発 PostgreSQL 技術支援 PostgreSQLコミッタ レプリケーション WAL圧縮 バックアップ進捗確認 pg_bigm(全文検索モジュール) コミッタ fujii_masao MasaoFujii
  • 3. © 2023 NTT DATA Corporation 3 本講演について 講演資料は、後日、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech
  • 4. © 2023 NTT DATA Corporation 4 統計情報のリセットによる autovacuumへの影響について
  • 5. © 2023 NTT DATA Corporation 5 統計情報のリセットによるautovacuumへの影響について、ドキュメントに警告が追記 2022年10月に、ドキュメントへの警告の追記がコミット doc: warn pg_stat_reset() can cause vacuum/analyze problems https://github.com/postgres/postgres/commit/4d070469c19f85043293789c570dbe8fb41ab1bb ドキュメントには以下の警告が追記 Warning Using pg_stat_reset() also resets counters that autovacuum uses to determine when to trigger a vacuum or an analyze. Resetting these counters can cause autovacuum to not perform necessary work, which can cause problems such as table bloat or out-dated table statistics. A database-wide ANALYZE is recommended after the statistics have been reset. https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-STATS-FUNCTIONS 意訳すると、 • 統計情報がリセットされると、autovacuumが必要なVACUUMや ANALYZEを実行できない(実行が必要と判断できない)ことがある。 • この問題を解消するには、DB全体にANALYZEを実行して統計情報を アップデートすることが推奨される。
  • 6. © 2023 NTT DATA Corporation 6 autovacuumによるVACUUMとANALYZEの必要性判断 autovacuumは、以下の条件いずれかを満たすテーブルについてVACUUMが必要と判断 pg_stat_all_tables.n_dead_tup > autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * pg_class.reltuples autovacuum_vacuum_insert_threshold >= 0 && pg_stat_all_tables.n_ins_since_vacuum > autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor * pg_class.reltuples autovacuumは、以下の条件を満たすテーブルについてANALYZEが必要と判断 pg_stat_all_tables.n_mod_since_analyze > autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * pg_class.reltuples ゴミレコード数が指定の閾値より多いテーブルには、 (ゴミ回収のため)VACUUMが必要と判断 前回のVACUUM以降に挿入されたレコード件数 が指定の閾値より多いテーブルには、(インデック スオンリイースキャンを効かせるため)VACUUMが 必要と判断 前回のANALYZE以降に挿入・更新・削除されたレコー ド件数が指定の閾値より多いテーブルには、(プランナ統 計情報の最新化のため)ANALYZEが必要と判断
  • 7. © 2023 NTT DATA Corporation 7 0 統計情報がリセットされると、 autovacuumは、以下の条件いずれかを満たすテーブルについてVACUUMが必要と判断 pg_stat_all_tables.n_dead_tup > autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * pg_class.reltuples autovacuum_vacuum_insert_threshold >= 0 && pg_stat_all_tables.n_ins_since_vacuum > autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor * pg_class.reltuples autovacuumは、以下の条件を満たすテーブルについてANALYZEが必要と判断 pg_stat_all_tables.n_mod_since_analyze > autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * pg_class.reltuples 不等式左辺の統計情報の値が0にリセットされ、 一方で、右辺はパラメータやカタログ情報 (pg_class.reltuples)のためリセットされな いことから、不等式が成り立たず、 autovacuumはVACUUMやANALYZEを 不要と判断する。 リセット以降に統計情報の値が0からカウント アップされていき、指定の閾値より多くなったら、 autovacuumはVACUUMやANALYZEを 必要と判断する。 0 0 不等式左辺の統計情報の値 > > >
  • 8. © 2023 NTT DATA Corporation 8 autovacuumがVACUUM実行する例 =# CREATE TABLE test AS SELECT n i, n j FROM generate_series(1, 100000) n; =# VACUUM ANALYZE test; =# ALTER TABLE test SET (log_autovacuum_min_duration = 0); =# SELECT current_setting('autovacuum_vacuum_threshold')::numeric + current_setting('autovacuum_vacuum_scale_factor')::numeric * reltuples threshold FROM pg_class WHERE relname = 'test'; threshold ----------- 20050 (1 row) =# UPDATE test SET j = j + 1 WHERE i <= 20051; LOG: automatic vacuum of table "postgres.public.test": index scans: 0 pages: 0 removed, 532 remain, 179 scanned (33.65% of total) tuples: 20051 removed, 99906 remain, 0 are dead but not yet removable removable cutoff: 750, which was 0 XIDs old when operation ended .... 閾値より多いレコードをUPDATEして、 その分のゴミレコードを生成すると、 autovacuumがVACUUMを実行して、 そのログが出力される autovacuumがVACUUMを必要と判断する ゴミレコード数の閾値を計算 レコード数10万件のテーブルを作成して、 autovacuumが走ったらログ出力するように設定
  • 9. © 2023 NTT DATA Corporation 9 統計情報リセットによりautovacuumがVACUUM実行しない例 UPDATE test SET j = j + 1 WHERE i BETWEEN 1 AND 10000; SELECT pg_stat_reset(); UPDATE test SET j = j + 1 WHERE i BETWEEN 10001 AND 20000; SELECT pg_stat_reset(); UPDATE test SET j = j + 1 WHERE i BETWEEN 20001 AND 30000; SELECT pg_stat_reset(); UPDATE test SET j = j + 1 WHERE i BETWEEN 30001 AND 40000; SELECT pg_stat_reset(); UPDATE test SET j = j + 1 WHERE i BETWEEN 40001 AND 50000; .... (autovacuumのログが出力されない) ゴミレコード数が閾値を超過しないように、 統計情報のリセットを挟みながらUPDATEすると、 閾値より大幅に多いレコードをUPDATEして その分のゴミレコードが発生しても、 autovacuumはVACUUM実行しない (そのautovacuumのログは出力されない)
  • 10. © 2023 NTT DATA Corporation 10 統計情報のリセットの契機 ① pg_stat_reset()の実行 ② リカバリ (クラッシュリカバリ及びアーカイブリカバリ) の実行 ③ レプリケーションのスタンバイの初期起動  初期起動によりスタンバイ側の統計情報はリセットされる。以降のスタンバイ動作中、スタンバイ上でのクエリ実行 により統計情報の一部(スキャン件数など)は更新されるが、autovacuumが使うpg_stat_all_tablesの n_dead_tupやn_ins_since_vacuum、n_mod_since_analyzeは0のまま(統計情報がプライマリ側 からレプリケーションされることもない)  レプリケーションによる高可用構成において、フェイルオーバなどでスタンバイがプライマリに昇格すると、 autovacuumが使うカラムが0のままとなり、VACUUMやANALYZEの必要性判断を正しく行えない可能性が ある
  • 11. © 2023 NTT DATA Corporation 11 統計情報のリセットによるautovacuumへの影響が疑われる場合 PostgreSQLドキュメントでは、DB全体へのANALYZE実行が推奨されている。 A database-wide ANALYZE is recommended after the statistics have been reset. https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-STATS-FUNCTIONS ➡ ANALYZE実行により統計情報のpg_stat_all_tables.n_dead_tupが更新されて、 autovacuumは適切にVACUUMの必要性を判断できるようになる pg_stat_all_tables.n_dead_tup > autovacuum_vacuum_threshold + autovacuum_vacuum_scale_factor * pg_class.reltuples ➡ ANALYZE実行では統計情報のpg_stat_all_tables.n_ins_since_vacuumは更新されないため、 レコード挿入件数に応じたVACUUMが統計情報リセットにより不足していると想定される場合は、 個別にVACUUMを実行する必要がある autovacuum_vacuum_insert_threshold >= 0 && pg_stat_all_tables.n_ins_since_vacuum > autovacuum_vacuum_insert_threshold + autovacuum_vacuum_insert_scale_factor * pg_class.reltuples
  • 12. © 2023 NTT DATA Corporation 12 統計情報のリセットによるautovacuumへの影響が疑われる場合 PostgreSQLドキュメントでは、DB全体へのANALYZE実行が推奨されている。 A database-wide ANALYZE is recommended after the statistics have been reset. https://www.postgresql.org/docs/devel/monitoring-stats.html#MONITORING-STATS-FUNCTIONS ➡ ANALYZE実行では統計情報のpg_stat_all_tables.n_mod_since_analyzeは更新されないが、 そもそもANALYZEが実行されるため、ANALYZE不足の可能性は解消される pg_stat_all_tables.n_mod_since_analyze > autovacuum_analyze_threshold + autovacuum_analyze_scale_factor * pg_class.reltuples
  • 13. © 2023 NTT DATA Corporation 13 個人的には、 必要に応じて自分たちでVACUUMとANALYZEを 定期実行する仕組みを検討する。 autovacuumに任せきりにしない。 統計情報のリセット後に、 DB全体にANALYZEを実行する 統計情報のリセット後に、 該当のテーブルに対してのみ ANALYZEを実行する pg_statsinfoなどでゴミレコードの状況を監視して、その監視結果に応じてVACUUMやANALYZEを実行する 統計情報が 頻繁にリセットされる? 統計情報のリセット後に DB全体にANALYZEを 実行できる"余裕"がある? VACUUMやANALYZEの 実行が少しでも遅れることが 許されないテーブルがある? 統計情報が頻繁にリセットされる状況でなければ、リカバリやフェイルオーバの後にVACUUMとANALYZEが 閾値の2倍分だけ実行が遅れる程度の影響なので、そこまで問題視する必要はないかもしれない?? フローチャート的に対応を検討すると、 Yes Yes Yes No No No
  • 14. © 2023 NTT DATA Corporation 14 その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。