6
Most read
7
Most read
10
Most read
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
2021年8月24日 第26回PostgreSQLアンカンファレンス@オンライン
株式会社NTTデータ
清野 裕貴
2
© 2021 NTT DATA Corporation
本講演について
講演資料は、NTTデータのSlideShareアカウント上で公開予定です。
https://www.slideshare.net/nttdata-tech
3
© 2021 NTT DATA Corporation
自己紹介
清野 裕貴
@NTTデータ
現在(2020.07~)
PostgreSQL研究開発、社内普及展開
これまで(~2020.06)
公共系プロジェクトのPM/AP要件定義・設計の業務に従事
※使用していたRDBMSはOracle Database 11g,12c
@YukiSeino
4
© 2021 NTT DATA Corporation
本日の説明内容
本日は、PostgreSQL統計情報の内部構造を説明します!
(一般的な統計情報関連のキーワードを理解している前提で進めます。[統計情報コレクタ、実行計画等])
私自身が統計情報を理解していく上で躓いたポイントを中心に説明しますので、
既にPostgreSQL内部構造・統計情報への理解がプロフェッショナルな方には、
物足りない内容となってしまうこと、ご容赦ください!!
5
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
PostgreSQLの統計情報について何となく理解できたが、理解が断片的で不安。。。
統計情報 統計情報コレクタ
稼働統計情報
プランナ
実行計画
動的統計情報ビュー
収集済み統計情報ビュー
PostgreSQLで扱う統計情報を一枚絵にしてみました。
⇒感想:自分なりに各キーワードの位置づけが整理できました
アナライズ
pg_stat_*** pg_class
pg_statistic
6
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
各サーバプロセス
stats collector
(統計情報コレクタ)
SQL操作
postgres
(バックエンドプロセス)
・ 収集済み統計情報ビュー
・ 動的統計情報ビュー
=# SELECT * FROM pg_stat_***
VACUUM
その他
① 統計情報コレクタにレポート
(ローカルメモリを更新)
②ー2 統計情報コレクタがローカルメモリ
の内容をファイルへ更新
②ー3
更新された統計
情報を取得
/data/pg_stat_tmp
②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求)
=# ANALYZE ;
autovacuum worker
ANALYZE
VACUUM
システムカタログ
(pg_class,
pg_statistic…)
postgres
(バックエンドプロセス)
①ー2
手動ANALYZEによる
統計情報更新
①ー1
自動ANALYZEによる
統計情報更新
クライアント
パーサ
アナライザ
リライタ
プランナ
=# SELECT * FROM hoge WHERE … ;
postgres
(バックエンドプロセス)
②
統計
情報
利用
エグゼキュータ
実行計画で使用される統計情報
ユーザーに提供する統計情報
共有メモリ
③ー1
共有メモリの
情報を更新
③ー2
共有メモリから
情報を取得
(一部のビュー)
稼働統計情報
[ファイル]
(global.stat,
db_{OID}.stat)
稼働統計情報
[ローカルメモリ]
7
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
実行計画で使用される統計情報(システムカタログ)
① ANALYZE等によりシステムカタログを更新
② SQL実行時にプランナがシステムカタログ
から統計情報を取得
=# ANALYZE ;
autovacuum worker
ANALYZE
VACUUM
システムカタログ
(pg_class,
pg_statistic…)
postgres
(バックエンドプロセス)
①ー2
手動ANALYZEによる
統計情報更新
①ー1
自動ANALYZEによる
統計情報更新
クライアント
パーサ
アナライザ
リライタ
プランナ
= SELECT * FROM hoge WHERE … ;
postgres
(バックエンドプロセス)
②
統計
情報
利用
エグゼキュータ
8
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
実行計画で使用される統計情報(システムカタログ)
プランナはANALYZEにより更新された「統計情報:システムカタログ」を使用して、実行計画を作成する。
① ANALYZE等によりシステムカタログを更新
② SQL実行時にプランナがシステムカタログ
から統計情報を取得
=# ANALYZE ;
autovacuum worker
ANALYZE
VACUUM
システムカタログ
(pg_class,
pg_statistic…)
postgres
(バックエンドプロセス)
①ー2
手動ANALYZEによる
統計情報更新
①ー1
自動ANALYZEによる
統計情報更新
クライアント
パーサ
アナライザ
リライタ
プランナ
=# SELECT * FROM hoge WHERE … ;
postgres
(バックエンドプロセス)
②
統計
情報
利用
エグゼキュータ
システムカタログの更新契機はANALYZEだけでなく、VACUUM
や一部DDLコマンドでも更新されます。
プランナはシステムカタログだ
けでなく、対象テーブルのサ
イズ等も取得します
9
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
ユーザーに提供する統計情報(稼働統計情報)
① 各データベース操作により統計情報コレクタの
ローカルメモリ内容を更新
②③ 統計情報ビュー(関数)による統計情報参照
各サーバプロセス
stats collector
(統計情報コレクタ)
SQL操作
postgres
(バックエンドプロセス)
・ 収集済み統計情報ビュー
・ 動的統計情報ビュー
=# SELECT * FROM pg_stat_***
VACUUM
その他
① 統計情報コレクタにレポート
(ローカルメモリを更新)
②ー2 統計情報コレクタがローカルメモリ
の内容をファイルへ更新
②ー3
更新された統計
情報を取得
/data/pg_stat_tmp
②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求)
稼働統計情報
[ファイル]
(global.stat,
db_{OID}.stat)
稼働統計情報
[ローカルメモリ]
10
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
ユーザーに提供する統計情報(稼働統計情報)
PostgreSQL利用者は統計情報コレクタにより更新された「統計情報:稼働統計情報」を確認する
① 各データベース操作により統計情報コレクタの
ローカルメモリ内容を更新
②③ 統計情報ビュー(関数)による統計情報参照
一部のビュー(pg_stat_activity)は稼働統計情報(ファイル)ではなく、共有メモリを参照する。
(統計情報コレクタを介せず、バックエンドプロセスが直接、共有メモリ内容を更新・取得する。)
稼働統計情報(テーブルの更新・挿入・削除の情報)は
autovacuum(VACUUM, ANALYZE)実行のトリガ情報としても使用される。
※間接的に実行計画で使用される統計情報(システムカタログ)に関係してくる。
各サーバプロセス
stats collector
(統計情報コレクタ)
SQL操作
postgres
(バックエンドプロセス)
・ 収集済み統計情報ビュー
・ 動的統計情報ビュー
=# SELECT * FROM pg_stat_***
VACUUM
その他
① 統計情報コレクタにレポート
(ローカルメモリを更新)
②ー2 統計情報コレクタがローカルメモリ
の内容をファイルへ更新
②ー3
更新された統計
情報を取得
/data/pg_stat_tmp
②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求)
共有メモリ
③ー1
共有メモリの
情報を更新
③ー2
共有メモリから
情報を取得
(一部のビュー)
稼働統計情報
[ファイル]
(global.stat,
db_{OID}.stat)
稼働統計情報
[ローカルメモリ]
11
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
各サーバプロセス
stats collector
(統計情報コレクタ)
SQL操作
postgres
(バックエンドプロセス)
・ 収集済み統計情報ビュー
・ 動的統計情報ビュー
=# SELECT * FROM pg_stat_***
稼働統計情報
[ファイル]
(global.stat,
db_{OID}.stat)
VACUUM
その他
① 統計情報コレクタにレポート
(ローカルメモリを更新)
②ー2 統計情報コレクタがローカルメモリ
の内容をファイルへ更新
②ー3
更新された統計
情報を取得
/data/pg_stat_tmp
②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求)
稼働統計情報
[ローカルメモリ]
=# ANALYZE ;
autovacuum worker
ANALYZE
VACUUM
システムカタログ
(pg_class,
pg_statistic…)
postgres
(バックエンドプロセス)
①ー2
手動ANALYZEによる
統計情報更新
①ー1
自動ANALYZEによる
統計情報更新
クライアント
パーサ
アナライザ
リライタ
プランナ
=# SELECT * FROM hoge WHERE … ;
postgres
(バックエンドプロセス)
②
統計
情報
利用
エグゼキュータ
実行計画で使用される統計情報
ユーザーに提供する統計情報
共有メモリ
③ー1
共有メモリの
情報を更新
③ー2
共有メモリから
情報を取得
(一部のビュー)
12
© 2021 NTT DATA Corporation
PostgreSQLの統計情報について
各サーバプロセス
stats collector
(統計情報コレクタ)
SQL操作
postgres
(バックエンドプロセス)
・ 収集済み統計情報ビュー
・ 動的統計情報ビュー
=# SELECT * FROM pg_stat_***
VACUUM
その他
① 統計情報コレクタにレポート
(ローカルメモリを更新)
②ー2 統計情報コレクタがローカルメモリ
の内容をファイルへ更新
②ー3
更新された統計
情報を取得
/data/pg_stat_tmp
②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求)
=# ANALYZE ;
autovacuum worker
ANALYZE
VACUUM
システムカタログ
(pg_class,
pg_statistic…)
postgres
(バックエンドプロセス)
①ー2
手動ANALYZEによる
統計情報更新
①ー1
自動ANALYZEによる
統計情報更新
クライアント
パーサ
アナライザ
リライタ
プランナ
=# SELECT * FROM hoge WHERE … ;
postgres
(バックエンドプロセス)
②
統計
情報
利用
エグゼキュータ
実行計画で使用される統計情報
ユーザーに提供する統計情報
共有メモリ
③ー1
共有メモリの
情報を更新
③ー2
共有メモリから
情報を取得
(一部のビュー)
稼働統計情報
[ファイル]
(global.stat,
db_{OID}.stat)
稼働統計情報
[ローカルメモリ]
大事なポイント
PostgreSQLで扱う統計情報は、以下に2つに分類される。
A. 実行計画で使用される統計情報(システムカタログ)
B. ユーザーに提供する統計情報(統計情報コレクタによる稼働統計情報)
13
© 2021 NTT DATA Corporation
さいごに
• PostgreSQLの統計情報の内部構造について、私主観の疑問の解消過程を紹介しました。
• 同じような疑問を持っていた方の一助になれば幸いです。
• 共有メモリベースの統計情報コレクタについて、コミュニティでディスカッションが行われているので、
キャッチアップが進んだら、次回以降のアンカンファレンスで紹介できればと思います。
© 2021 NTT DATA Corporation 14
YouTubeチャンネル “NTT DATA Tech”
技術取り組み、活用情報を中心にお届けします
https://www.youtube.com/NTTDATATech
© 2021 NTT DATA Corporation
その他、記載されている会社名、商品名、又はサービス名は、
各社の登録商標又は商標です。

More Related Content

PPTX
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PPTX
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
PDF
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
Vacuum徹底解説
PDF
PostgreSQL 15 開発最新情報
PDF
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)
PostgreSQLのfull_page_writesについて(第24回PostgreSQLアンカンファレンス@オンライン 発表資料)
統計情報のリセットによるautovacuumへの影響について(第39回PostgreSQLアンカンファレンス@オンライン 発表資料)
祝!PostgreSQLレプリケーション10周年!徹底紹介!!
PostgreSQLモニタリングの基本とNTTデータが追加したモニタリング新機能(Open Source Conference 2021 Online F...
pg_walinspectについて調べてみた!(第37回PostgreSQLアンカンファレンス@オンライン 発表資料)
Vacuum徹底解説
PostgreSQL 15 開発最新情報
PostgreSQLレプリケーション10周年!徹底紹介!(PostgreSQL Conference Japan 2019講演資料)

What's hot (20)

PPTX
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
PPTX
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
PDF
NTT DATA と PostgreSQL が挑んだ総力戦
PPTX
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
PPTX
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PPTX
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PDF
PostgreSQL 15の新機能を徹底解説
PDF
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PDF
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PDF
PostgreSQLでスケールアウト
PDF
まずやっとくPostgreSQLチューニング
PPTX
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLレプリケーション徹底紹介
PPTX
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
PDF
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQL DBのバックアップを一元化しよう
PDF
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
iostat await svctm の 見かた、考え方
PDF
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
PostgreSQL14の pg_stat_statements 改善(第23回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのリカバリ超入門(もしくはWAL、CHECKPOINT、オンラインバックアップの仕組み)
オンライン物理バックアップの排他モードと非排他モードについて ~PostgreSQLバージョン15対応版~(第34回PostgreSQLアンカンファレンス...
NTT DATA と PostgreSQL が挑んだ総力戦
PostgreSQL 14 モニタリング新機能紹介(PostgreSQL カンファレンス #24、2021/06/08)
押さえておきたい、PostgreSQL 13 の新機能!!(Open Source Conference 2021 Online/Hokkaido 発表資料)
PostgreSQL 12は ここがスゴイ! ~性能改善やpluggable storage engineなどの新機能を徹底解説~ (NTTデータ テクノ...
PostgreSQL 15の新機能を徹底解説
今、改めて考えるPostgreSQLプラットフォーム - マルチクラウドとポータビリティ -(PostgreSQL Conference Japan 20...
PostgreSQL13でのレプリケーション関連の改善について(第14回PostgreSQLアンカンファレンス@オンライン)
PostgreSQLでスケールアウト
まずやっとくPostgreSQLチューニング
PostgreSQLのgitレポジトリから見える2021年の開発状況(第30回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLレプリケーション徹底紹介
PostgreSQL開発コミュニティに参加しよう! ~2022年版~(Open Source Conference 2022 Online/Kyoto 発...
Memoizeの仕組み(第41回PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQL DBのバックアップを一元化しよう
PostgreSQL 13でのpg_stat_statementsの改善について(第12回PostgreSQLアンカンファレンス@オンライン 発表資料)
iostat await svctm の 見かた、考え方
PostgreSQLアーキテクチャ入門(INSIGHT OUT 2011)
Ad

Similar to PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料) (20)

PDF
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
データを事業に活かすために必要なデータ基盤とは
PDF
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
データ活用を俊敏に進めるためのDataOps実践方法とその高度化のためのナレッジグラフ活用の取り組み(NTTデータ テクノロジーカンファレンス 2020 ...
PDF
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
PDF
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
PPTX
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
PDF
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
PDF
正確な意思決定を阻む 問題・障害との向き合い方
PDF
20200522 Blockchain GIG#7 株式会社NTTデータ山下様資料
PPTX
大量時空間データの処理 ~ 現状の課題と今後OSSが解決すべきこと。(Open Source Conference 2021 Online/Osaka講演資料)
PDF
[de:code 2019 振り返り Night!] Data Platform
PPTX
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PDF
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PDF
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
PDF
「指標」を支えるエンジニアリング: DataOpsNight #1
PPTX
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
PPTX
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
PostgreSQLのgitレポジトリから見える2020年の開発状況(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
データを事業に活かすために必要なデータ基盤とは
pg_standbyの今後について(第19回PostgreSQLアンカンファレンス@オンライン 発表資料)
データ活用を俊敏に進めるためのDataOps実践方法とその高度化のためのナレッジグラフ活用の取り組み(NTTデータ テクノロジーカンファレンス 2020 ...
ChatGPTのデータソースにPostgreSQLを使う[詳細版](オープンデベロッパーズカンファレンス2023 発表資料)
DeNA のデータ活用を支える BigQuery データの民主化とガバナンス強化の軌跡 | Google Cloud INSIDE Games & App...
VSCodeで作るPostgreSQL開発環境(第25回 PostgreSQLアンカンファレンス@オンライン 発表資料)
PostgreSQLのgitレポジトリから見える2022年の開発状況(第38回PostgreSQLアンカンファレンス@オンライン 発表資料)
NTTデータが考えるデータ基盤の次の一手 ~AI活用のために知っておくべき新潮流とは?~(NTTデータ テクノロジーカンファレンス 2020 発表資料)
Hadoop/Spark を使うなら Bigtop を使い熟そう! ~並列分散処理基盤のいま、から Bigtop の最近の取り組みまで一挙ご紹介~(Ope...
正確な意思決定を阻む 問題・障害との向き合い方
20200522 Blockchain GIG#7 株式会社NTTデータ山下様資料
大量時空間データの処理 ~ 現状の課題と今後OSSが解決すべきこと。(Open Source Conference 2021 Online/Osaka講演資料)
[de:code 2019 振り返り Night!] Data Platform
PostgreSQL開発コミュニティに参加しよう!(PostgreSQL Conference Japan 2021 発表資料)
PostgreSQL初心者がパッチを提案してからコミットされるまで(第20回PostgreSQLアンカンファレンス@オンライン 発表資料)
PCCC21:株式会社日立製作所 「研究開発力向上のための研究DXソリューション」
「指標」を支えるエンジニアリング: DataOpsNight #1
フックを使ったPostgreSQLの拡張機能を作ってみよう!(第33回PostgreSQLアンカンファレンス@オンライン 発表資料)
Attunityのソリューションと異種データベース・クラウド移行事例のご紹介
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
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PDF
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
PDF
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
PDF
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...
開発中の新機能 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アンカンファレンス@オンライン 発表資料)
DAIS2024参加報告 ~Spark中心にしらべてみた~ (JEDAI DAIS Recap 講演資料)
PostgreSQLのHTAP適応について考える (PostgreSQL Conference Japan 2024 講演資料)
静かに変わってきたクラスファイルを詳細に調べて楽しむ(JJUG CCC 2024 Fall講演資料)
Gartnerも注目するグリーンソフトウェアの実現に向けて (Green Software Foundation Global Summit 2024 T...

PostgreSQLの統計情報について(第26回PostgreSQLアンカンファレンス@オンライン 発表資料)

  • 1. © 2021 NTT DATA Corporation PostgreSQLの統計情報について 2021年8月24日 第26回PostgreSQLアンカンファレンス@オンライン 株式会社NTTデータ 清野 裕貴
  • 2. 2 © 2021 NTT DATA Corporation 本講演について 講演資料は、NTTデータのSlideShareアカウント上で公開予定です。 https://www.slideshare.net/nttdata-tech
  • 3. 3 © 2021 NTT DATA Corporation 自己紹介 清野 裕貴 @NTTデータ 現在(2020.07~) PostgreSQL研究開発、社内普及展開 これまで(~2020.06) 公共系プロジェクトのPM/AP要件定義・設計の業務に従事 ※使用していたRDBMSはOracle Database 11g,12c @YukiSeino
  • 4. 4 © 2021 NTT DATA Corporation 本日の説明内容 本日は、PostgreSQL統計情報の内部構造を説明します! (一般的な統計情報関連のキーワードを理解している前提で進めます。[統計情報コレクタ、実行計画等]) 私自身が統計情報を理解していく上で躓いたポイントを中心に説明しますので、 既にPostgreSQL内部構造・統計情報への理解がプロフェッショナルな方には、 物足りない内容となってしまうこと、ご容赦ください!!
  • 5. 5 © 2021 NTT DATA Corporation PostgreSQLの統計情報について PostgreSQLの統計情報について何となく理解できたが、理解が断片的で不安。。。 統計情報 統計情報コレクタ 稼働統計情報 プランナ 実行計画 動的統計情報ビュー 収集済み統計情報ビュー PostgreSQLで扱う統計情報を一枚絵にしてみました。 ⇒感想:自分なりに各キーワードの位置づけが整理できました アナライズ pg_stat_*** pg_class pg_statistic
  • 6. 6 © 2021 NTT DATA Corporation PostgreSQLの統計情報について 各サーバプロセス stats collector (統計情報コレクタ) SQL操作 postgres (バックエンドプロセス) ・ 収集済み統計情報ビュー ・ 動的統計情報ビュー =# SELECT * FROM pg_stat_*** VACUUM その他 ① 統計情報コレクタにレポート (ローカルメモリを更新) ②ー2 統計情報コレクタがローカルメモリ の内容をファイルへ更新 ②ー3 更新された統計 情報を取得 /data/pg_stat_tmp ②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求) =# ANALYZE ; autovacuum worker ANALYZE VACUUM システムカタログ (pg_class, pg_statistic…) postgres (バックエンドプロセス) ①ー2 手動ANALYZEによる 統計情報更新 ①ー1 自動ANALYZEによる 統計情報更新 クライアント パーサ アナライザ リライタ プランナ =# SELECT * FROM hoge WHERE … ; postgres (バックエンドプロセス) ② 統計 情報 利用 エグゼキュータ 実行計画で使用される統計情報 ユーザーに提供する統計情報 共有メモリ ③ー1 共有メモリの 情報を更新 ③ー2 共有メモリから 情報を取得 (一部のビュー) 稼働統計情報 [ファイル] (global.stat, db_{OID}.stat) 稼働統計情報 [ローカルメモリ]
  • 7. 7 © 2021 NTT DATA Corporation PostgreSQLの統計情報について 実行計画で使用される統計情報(システムカタログ) ① ANALYZE等によりシステムカタログを更新 ② SQL実行時にプランナがシステムカタログ から統計情報を取得 =# ANALYZE ; autovacuum worker ANALYZE VACUUM システムカタログ (pg_class, pg_statistic…) postgres (バックエンドプロセス) ①ー2 手動ANALYZEによる 統計情報更新 ①ー1 自動ANALYZEによる 統計情報更新 クライアント パーサ アナライザ リライタ プランナ = SELECT * FROM hoge WHERE … ; postgres (バックエンドプロセス) ② 統計 情報 利用 エグゼキュータ
  • 8. 8 © 2021 NTT DATA Corporation PostgreSQLの統計情報について 実行計画で使用される統計情報(システムカタログ) プランナはANALYZEにより更新された「統計情報:システムカタログ」を使用して、実行計画を作成する。 ① ANALYZE等によりシステムカタログを更新 ② SQL実行時にプランナがシステムカタログ から統計情報を取得 =# ANALYZE ; autovacuum worker ANALYZE VACUUM システムカタログ (pg_class, pg_statistic…) postgres (バックエンドプロセス) ①ー2 手動ANALYZEによる 統計情報更新 ①ー1 自動ANALYZEによる 統計情報更新 クライアント パーサ アナライザ リライタ プランナ =# SELECT * FROM hoge WHERE … ; postgres (バックエンドプロセス) ② 統計 情報 利用 エグゼキュータ システムカタログの更新契機はANALYZEだけでなく、VACUUM や一部DDLコマンドでも更新されます。 プランナはシステムカタログだ けでなく、対象テーブルのサ イズ等も取得します
  • 9. 9 © 2021 NTT DATA Corporation PostgreSQLの統計情報について ユーザーに提供する統計情報(稼働統計情報) ① 各データベース操作により統計情報コレクタの ローカルメモリ内容を更新 ②③ 統計情報ビュー(関数)による統計情報参照 各サーバプロセス stats collector (統計情報コレクタ) SQL操作 postgres (バックエンドプロセス) ・ 収集済み統計情報ビュー ・ 動的統計情報ビュー =# SELECT * FROM pg_stat_*** VACUUM その他 ① 統計情報コレクタにレポート (ローカルメモリを更新) ②ー2 統計情報コレクタがローカルメモリ の内容をファイルへ更新 ②ー3 更新された統計 情報を取得 /data/pg_stat_tmp ②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求) 稼働統計情報 [ファイル] (global.stat, db_{OID}.stat) 稼働統計情報 [ローカルメモリ]
  • 10. 10 © 2021 NTT DATA Corporation PostgreSQLの統計情報について ユーザーに提供する統計情報(稼働統計情報) PostgreSQL利用者は統計情報コレクタにより更新された「統計情報:稼働統計情報」を確認する ① 各データベース操作により統計情報コレクタの ローカルメモリ内容を更新 ②③ 統計情報ビュー(関数)による統計情報参照 一部のビュー(pg_stat_activity)は稼働統計情報(ファイル)ではなく、共有メモリを参照する。 (統計情報コレクタを介せず、バックエンドプロセスが直接、共有メモリ内容を更新・取得する。) 稼働統計情報(テーブルの更新・挿入・削除の情報)は autovacuum(VACUUM, ANALYZE)実行のトリガ情報としても使用される。 ※間接的に実行計画で使用される統計情報(システムカタログ)に関係してくる。 各サーバプロセス stats collector (統計情報コレクタ) SQL操作 postgres (バックエンドプロセス) ・ 収集済み統計情報ビュー ・ 動的統計情報ビュー =# SELECT * FROM pg_stat_*** VACUUM その他 ① 統計情報コレクタにレポート (ローカルメモリを更新) ②ー2 統計情報コレクタがローカルメモリ の内容をファイルへ更新 ②ー3 更新された統計 情報を取得 /data/pg_stat_tmp ②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求) 共有メモリ ③ー1 共有メモリの 情報を更新 ③ー2 共有メモリから 情報を取得 (一部のビュー) 稼働統計情報 [ファイル] (global.stat, db_{OID}.stat) 稼働統計情報 [ローカルメモリ]
  • 11. 11 © 2021 NTT DATA Corporation PostgreSQLの統計情報について 各サーバプロセス stats collector (統計情報コレクタ) SQL操作 postgres (バックエンドプロセス) ・ 収集済み統計情報ビュー ・ 動的統計情報ビュー =# SELECT * FROM pg_stat_*** 稼働統計情報 [ファイル] (global.stat, db_{OID}.stat) VACUUM その他 ① 統計情報コレクタにレポート (ローカルメモリを更新) ②ー2 統計情報コレクタがローカルメモリ の内容をファイルへ更新 ②ー3 更新された統計 情報を取得 /data/pg_stat_tmp ②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求) 稼働統計情報 [ローカルメモリ] =# ANALYZE ; autovacuum worker ANALYZE VACUUM システムカタログ (pg_class, pg_statistic…) postgres (バックエンドプロセス) ①ー2 手動ANALYZEによる 統計情報更新 ①ー1 自動ANALYZEによる 統計情報更新 クライアント パーサ アナライザ リライタ プランナ =# SELECT * FROM hoge WHERE … ; postgres (バックエンドプロセス) ② 統計 情報 利用 エグゼキュータ 実行計画で使用される統計情報 ユーザーに提供する統計情報 共有メモリ ③ー1 共有メモリの 情報を更新 ③ー2 共有メモリから 情報を取得 (一部のビュー)
  • 12. 12 © 2021 NTT DATA Corporation PostgreSQLの統計情報について 各サーバプロセス stats collector (統計情報コレクタ) SQL操作 postgres (バックエンドプロセス) ・ 収集済み統計情報ビュー ・ 動的統計情報ビュー =# SELECT * FROM pg_stat_*** VACUUM その他 ① 統計情報コレクタにレポート (ローカルメモリを更新) ②ー2 統計情報コレクタがローカルメモリ の内容をファイルへ更新 ②ー3 更新された統計 情報を取得 /data/pg_stat_tmp ②ー1 統計情報コレクタに参照要求(ファイル書き込みを要求) =# ANALYZE ; autovacuum worker ANALYZE VACUUM システムカタログ (pg_class, pg_statistic…) postgres (バックエンドプロセス) ①ー2 手動ANALYZEによる 統計情報更新 ①ー1 自動ANALYZEによる 統計情報更新 クライアント パーサ アナライザ リライタ プランナ =# SELECT * FROM hoge WHERE … ; postgres (バックエンドプロセス) ② 統計 情報 利用 エグゼキュータ 実行計画で使用される統計情報 ユーザーに提供する統計情報 共有メモリ ③ー1 共有メモリの 情報を更新 ③ー2 共有メモリから 情報を取得 (一部のビュー) 稼働統計情報 [ファイル] (global.stat, db_{OID}.stat) 稼働統計情報 [ローカルメモリ] 大事なポイント PostgreSQLで扱う統計情報は、以下に2つに分類される。 A. 実行計画で使用される統計情報(システムカタログ) B. ユーザーに提供する統計情報(統計情報コレクタによる稼働統計情報)
  • 13. 13 © 2021 NTT DATA Corporation さいごに • PostgreSQLの統計情報の内部構造について、私主観の疑問の解消過程を紹介しました。 • 同じような疑問を持っていた方の一助になれば幸いです。 • 共有メモリベースの統計情報コレクタについて、コミュニティでディスカッションが行われているので、 キャッチアップが進んだら、次回以降のアンカンファレンスで紹介できればと思います。
  • 14. © 2021 NTT DATA Corporation 14 YouTubeチャンネル “NTT DATA Tech” 技術取り組み、活用情報を中心にお届けします https://www.youtube.com/NTTDATATech
  • 15. © 2021 NTT DATA Corporation その他、記載されている会社名、商品名、又はサービス名は、 各社の登録商標又は商標です。

Editor's Notes

  • #15: 情報発信については、NTT DATA Tech という YouTubeチャンネルを開設しました。 10月に開催したNTTデータ テクノロジーカンファレンスの模様や 技術トピックの解説映像などを、順次公開していきます。 こちらもあわせてご覧ください。