ablog

不器用で落着きのない技術者のメモ

PostgreSQL の pg_stat_statements で総実行時間の長いクエリランキングを取得する

PostgreSQL の pg_stat_statements で総実行時間(1回の実行時間 * 実行回数)の長いクエリランキングを取得するクエリ。累積値のため、スループットなどを見ようとすると定期的に取得して差分を計算する必要がある。

クエリ

select b.usename, 
trunc(a.total_time) total_time, 
a.calls, 
a.query
from pg_stat_statements a join pg_user b
on a.userid = b.usesysid
where b.usename = 'awsuser'
order by total_time desc
limit 5;

結果例

 usename | total_time | calls |                               query
---------+------------+-------+--------------------------------------------------------------------
 awsuser |        319 | 31729 | DISCARD ALL
 awsuser |        279 | 36406 | SET application_name TO 'psql'
 awsuser |        120 | 26417 | SELECT current_setting($1)
 awsuser |         90 |  5518 | SET application_name TO 'Python sample'
 awsuser |         41 |    11 | select b.usename, trunc(a.total_time) total_time, a.calls, a.query+
         |            |       | from pg_stat_statements a join pg_user b                          +
         |            |       | on a.userid = b.usesysid                                          +
         |            |       | where b.usename = $1                                              +
         |            |       | order by total_time desc                                          +
         |            |       | limit $2
(5 行)

参考

SQL Digest 統計を表示するには、pg_stat_statements ライブラリをロードする必要があります。このライブラリは、PostgreSQL 10 と 互換性のある Aurora PostgreSQL DB クラスター用にデフォルトでロードされます。ただし、PostgreSQL 9.6 と互換性のある Aurora PostgreSQL DB クラスターでは、このライブラリを手動で有効にする必要があります。手動で有効にするには、DB インスタンスに関連付けられた DB パラメータグループの shared_preload_libraries に pg_stat_statements を追加します。次に DB インスタンスを再起動します。

Performance Insights ダッシュボードでのモニタリング - Amazon Aurora