PostgreSQLの稼働状況の調査

提供: Astarisk Works Wiki

目次

パフォチューの前に

定期的にvacuumを実行する

パフォーマンスチューニングも重要ですが、日頃の運用でパフォーマンスを落とさないように心がける必要があります。
VACUUMとANALIZEを定期的にやりましょう。 PostgreSQLのメンテナンス

インデックスを再構築する

バッチによる大量データの投入、更新を行った後にはインデックスを再構築することもパフォーマンスの維持のために必要です。

reindex table テーブル名

状況を調べる

パフォーマンスチューニングに取りかかる前に現状を把握する必要があります。

統計情報を調べる

統計情報を調べるにはそのためのビューが用意されている。 それらを参照して調べることができる。

  • データベースのサイズを調べる
select pg_database_size('データベース名');

頻繁にアクセスするテーブルのサイズの合計を8192byteで割ると必要な共有バッファの数を得ることができる。

  • コミット数、ロールバック数を得る

データベース単位でコミット数、ロールバック数を得ることができます。

select * from pg_stat_database;


各テーブルのアクセス状況を調べる

select * from pg_stat_user_tables;
relid テーブルのOID
schemaname スキーマ名
relname テーブル名
seq_scan シーケンシャルスキャン数
seq_tup_read シーケンシャルスキャンで取り出された実際の行数
idx_scan (そのテーブルに属するすべてのインデックスに対して)開始されたインデックススキャン数
idx_tup_fetch インデックススキャンで取り出された実際の行数
n_tup_ins 挿入された行数
n_tup_upd 更新された行数
n_tup_del 削除された行数

インデックスの利用状況を調べる

select * from pg_stat_user_indexes;
relid テーブルのOID
indexrelid インデックスのOID
schemaname スキーマの名前
relname テーブルの名前
indexrelname インデックスの名前
idx_scan 開始されたインデックススキャン数
idx_tup_read インデックススキャンによって読み取られたインデックス項目数
idx_tup_fetch インデックスを使用した単純なインデックススキャンで取り出された実際のテーブル行の数

SQLの実行状況を調べる

postgres.conf で stats_command_string を on に設定して次のSQLを実行すると 実行中のSQLを調べることができる。

SELECT
    procpid,
    start,
    now() - start AS lap,
    current_query
FROM
    (SELECT
        backendid,
        pg_stat_get_backend_pid(S.backendid) AS procpid,
        pg_stat_get_backend_activity_start(S.backendid) AS start,
        pg_stat_get_backend_activity(S.backendid) AS current_query
    FROM
        (SELECT pg_stat_get_backend_idset() AS backendid) AS S
    ) AS S
WHERE
    current_query <> 
ORDER BY
    lap DESC;
個人用ツール