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;