システムビューpg_stat_statementsは、実行されたすべてのSQL文の統計情報を参照できます。これを利用して、レスポンスの遅いSQL文を特定します。
以下のSQL文を実行することで平均実行時間の長い順番にSQL文を確認することができます。
SELECT userid, dbid, query, calls, total_time, (total_time / calls) as average_time FROM pg_stat_statements ORDER BY average_time DESC;
定期的にこの情報を監視することで、現在と過去の平均実行時間の差が求められ、時間の経過とともに遅延傾向にあるSQL文を特定することができます。
また、システムビューpgx_query_responseを利用することで、上記のSQL文と同じ結果を取得できます。
psqlでの実行例
postgres=# SELECT * FROM pgx_query_response; userid | dbid | query | calls | total_time | average_time --------+-------+-------------------------+-------+------------+-------------- 10 | 12699 | SELECT * FROM TBL1 | 2 | 2.958181 | 1.4790905 10 | 12699 | SELECT * FROM TBL2 | 3 | 0.315318 | 0.105106
参考
トランザクションやSQL文のタイムアウトの発生を監視することで、レスポンスの低下のモニタリングも可能です。