postgresqlコマンド(統計情報等)

ここでは、主なシステムカタログ情報取得、および、アクセスチューニングの一部について記載する。

主なシステムカタログ情報取得(カラム詳細はPostgreSQLドキュメント参照)

--データベース単位の統計情報
SELECT * FROM pg_stat_database;
--データベース単位の統計情報(ブロックヒット率算出例)
SELECT CAST(blks_hit AS FLOAT) / (blks_hit + blks_read) AS hit_ratio FROM pg_stat_database WHERE datname = 'mydatabase';

--テーブル単位のアクセス統計情報
SELECT * FROM pg_stat_all_tables WHERE relname = 'mytable';
SELECT * FROM pg_statio_all_tables WHERE relname = 'mytable';

--インデックス単位のアクセス統計情報
SELECT * FROM pg_stat_all_indexes WHERE relname = 'mytable';

--テーブル/カラム統計情報
SELECT * FROM pg_stats WHERE tablename = 'mytable';


【凡例】
・mydatabase:対象のデータベース名
・mytable:対象のテーブル名


実行計画内容の確認

SQL実行時の実行計画の内容を確認するには実際のSQLの直前に「EXPLAIN ANALYZE」を付与して実行します。

psql -h 127.0.0.1 -p 5432 -U dbuser -d mydatabase -c "EXPLAIN ANALYZE SELECT * FROM myschema.mytable WHERE column5 = '1';"

QUERY PLAN
---------------------------------------------------------------------------------------------------
Seq Scan on mytable (cost=0.00..22.50 rows=1 width=39) (actual time=0.460..0.460 rows=0 loops=1)
Filter: (column5 = '1'::text)
Rows Removed by Filter: 1000
Planning time: 2.210 ms
Execution time: 0.777 ms