はじめに
PostgreSQLを勉強するにあたって、構築や運用で必要そうな事を備忘として記事にしました。
本記事は、ANALYZEにより収集し反映されるシステムカタログについて確認しています。
前提
PostgreSQL 13 を使用しています。
テーブル/カラム統計情報について
テーブル/カラム統計情報は、テーブルのデータ状況に関して集計された情報です。プランナが実行計画を作成する際に参照されます。一般的に「統計情報」とのみ呼称された場合は、テーブル/カラム統計情報を指していることが多いです。
- アクセス統計情報
- stats collectorプロセスにより収集
- テーブル / カラム統計情報
- ANALYZEにより収集
テーブル統計情報
テーブル統計情報は、pg_classシステムカタログに格納され、VACUUM、ANALYZEおよび、CREATE INDEXなどの一部DDLコマンドで更新されます。
カラム統計情報
カラム統計情報は、pg_statisticシステムカタログに格納され、ANALYZEコマンドで更新されます。
システムカタログ
システムカタログは、リレーショナルデータベース管理システム(RDMS)が、「テーブル」や「列」の情報などの「スキーマメタデータ」と「内部的な情報」を格納する場所です。システムカタログ自体もPostgreSQLのテーブル形式で管理されています。
※スキーマ・・・データベースの構造
参照:スキーマ
pg_class
pg_classシステムカタログは、「テーブル」をはじめ、「ビュー」や「インデックス」などの情報を扱っています。名称・所有者・テーブル空間といった多くの列を保有します。特にプランナが統計情報を作成する際に参照する項目は、relpages列(テーブルのページ数)とreltuples列(テーブルの行数)となります。
これらの統計情報は、プランナが使用する推測値となり、VACUUMやANALYZEおよび、CREATE INDEX等により更新されます。

図. pg_class
pg_statistic
pg_statisticシステムカタログでは、カラムに関する統計情報を扱っています。あるカラムに登録されている値とその分布といった情報が格納されており、問い合わせ時にプランナがこの情報を参照しています。
pg_statisticには、実データの一部が格納されているため、一般ユーザは参照できません。代わりにユーザが参照しても問題がない、範囲を限定したシステムビューとしてpg_statsが用意されています。
- pg_statistic
- プランナが参照
- 一般ユーザは参照不可
- pg_stats
- 一般ユーザが参照

図. スーパーユーザでのpg_statistic実行

図. 一般ユーザでのpg_statistic実行
関連記事一覧
PostgreSQL : テーブル/カラム統計情報「システムビュー」
参考文献
1. 勝俣 智成, 佐伯 昌樹, 原田 登志 (2018)「[改訂新版]内部構造から学ぶPostgreSQL 設計・運用計画の鉄則」技術評論社
2. 河原 翔 (2014)「LPI-Japan OSS-DB Gold 認定教材 PostgreSQL 高度技術者育成テキスト」エヌ・ティ・ティ・ソフトウェア株式会社
3. OSS-DB道場