You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: grafana/postgres/v12/3-query-performance-analysis.json
+22-21Lines changed: 22 additions & 21 deletions
Original file line number
Diff line number
Diff line change
@@ -107,7 +107,7 @@
107
107
{
108
108
"matcher": {
109
109
"id": "byName",
110
-
"options": "Total Runtime (ms)"
110
+
"options": "Total Runtime"
111
111
},
112
112
"properties": [
113
113
{
@@ -123,7 +123,7 @@
123
123
{
124
124
"matcher": {
125
125
"id": "byName",
126
-
"options": "Avg Runtime (ms)"
126
+
"options": "Avg Runtime"
127
127
},
128
128
"properties": [
129
129
{
@@ -139,7 +139,7 @@
139
139
{
140
140
"matcher": {
141
141
"id": "byName",
142
-
"options": "Plan Time (ms)"
142
+
"options": "Plan Time"
143
143
},
144
144
"properties": [
145
145
{
@@ -155,7 +155,7 @@
155
155
{
156
156
"matcher": {
157
157
"id": "byName",
158
-
"options": "Avg Plan Time (ms)"
158
+
"options": "Avg Plan Time"
159
159
},
160
160
"properties": [
161
161
{
@@ -164,7 +164,7 @@
164
164
},
165
165
{
166
166
"id": "decimals",
167
-
"value": 2
167
+
"value": 1
168
168
}
169
169
]
170
170
},
@@ -231,7 +231,7 @@
231
231
{
232
232
"matcher": {
233
233
"id": "byName",
234
-
"options": "Shared Hit (MB)"
234
+
"options": "Shared Hit"
235
235
},
236
236
"properties": [
237
237
{
@@ -247,7 +247,7 @@
247
247
{
248
248
"matcher": {
249
249
"id": "byName",
250
-
"options": "Shared Read (MB)"
250
+
"options": "Shared Read"
251
251
},
252
252
"properties": [
253
253
{
@@ -263,7 +263,7 @@
263
263
{
264
264
"matcher": {
265
265
"id": "byName",
266
-
"options": "Shared Written (MB)"
266
+
"options": "Shared Written"
267
267
},
268
268
"properties": [
269
269
{
@@ -279,7 +279,7 @@
279
279
{
280
280
"matcher": {
281
281
"id": "byName",
282
-
"options": "Temp Read (MB)"
282
+
"options": "Temp Read"
283
283
},
284
284
"properties": [
285
285
{
@@ -295,7 +295,7 @@
295
295
{
296
296
"matcher": {
297
297
"id": "byName",
298
-
"options": "Temp Written (MB)"
298
+
"options": "Temp Written"
299
299
},
300
300
"properties": [
301
301
{
@@ -311,7 +311,7 @@
311
311
{
312
312
"matcher": {
313
313
"id": "byName",
314
-
"options": "IO Time (ms)"
314
+
"options": "IO Time"
315
315
},
316
316
"properties": [
317
317
{
@@ -383,7 +383,7 @@
383
383
},
384
384
"format": "table",
385
385
"rawQuery": true,
386
-
"rawSql": "-- Enhanced comprehensive query analysis (Fast mode)\nWITH query_stats AS (\n select\n tag_data->>'queryid' as queryid,\n max((data->>'total_time')::numeric) - min((data->>'total_time')::numeric) as total_runtime,\n (max((data->>'total_time')::numeric) - min((data->>'total_time')::numeric)) / nullif(max((data->>'calls')::int8) - min((data->>'calls')::int8), 0) as avg_runtime,\n max((data->>'total_plan_time')::numeric) - min((data->>'total_plan_time')::numeric) as plan_time,\n (max((data->>'total_plan_time')::numeric) - min((data->>'total_plan_time')::numeric)) / nullif(max((data->>'calls')::int8) - min((data->>'calls')::int8), 0) as avg_plan_time,\n max((data->>'calls')::int8) - min((data->>'calls')::int8) as calls,\n max((data->>'rows')::int8) - min((data->>'rows')::int8) as rows,\n (max((data->>'rows')::int8) - min((data->>'rows')::int8))::numeric / nullif(max((data->>'calls')::int8) - min((data->>'calls')::int8), 0) as avg_rows,\n (max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8)) * 8192 / 1024.0 / 1024.0 as shared_hit_mb,\n (max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as shared_read_mb,\n (max((data->>'shared_blks_written')::int8) - min((data->>'shared_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 as shared_written_mb,\n (max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as temp_read_mb,\n (max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 as temp_written_mb,\n (max((data->>'blk_read_time')::numeric) - min((data->>'blk_read_time')::numeric)) + \n (max((data->>'blk_write_time')::numeric) - min((data->>'blk_write_time')::numeric)) as io_time,\n case when length(tag_data->>'query') > 150 then (tag_data->>'query')::varchar(150) || '...' else tag_data->>'query' end as query\n from stat_statements\n where dbname = '$dbname'\n and $__timeFilter(time)\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid', tag_data->>'query'\n having max((data->>'calls')::int8) - min((data->>'calls')::int8) > 0\n),\nwith_percentages AS (\n select \n *,\n 100 * total_runtime / nullif((select sum(total_runtime) from query_stats), 0) as pct_db_total\n from query_stats\n)\nselect\n queryid,\n total_runtime::int8 as \"Total Runtime (ms)\",\n avg_runtime::numeric(10,2) as \"Avg Runtime (ms)\",\n plan_time::int8 as \"Plan Time (ms)\",\n avg_plan_time::numeric(10,2) as \"Avg Plan Time (ms)\",\n calls as \"Calls\",\n rows as \"Rows\",\n avg_rows::numeric(10,1) as \"Avg Rows\",\n shared_hit_mb::numeric(10,1) as \"Shared Hit (MB)\",\n shared_read_mb::numeric(10,1) as \"Shared Read (MB)\",\n shared_written_mb::numeric(10,1) as \"Shared Written (MB)\",\n temp_read_mb::numeric(10,1) as \"Temp Read (MB)\",\n temp_written_mb::numeric(10,1) as \"Temp Written (MB)\",\n io_time::numeric(10,1) as \"IO Time (ms)\",\n pct_db_total::numeric(5,1) as \"% DB Total\",\n (select data->>'users' from stat_statements where $__timeFilter(time) and dbname = '$dbname' and tag_data->>'queryid' = with_percentages.queryid order by time desc limit 1) as \"Users\",\n query as \"Query\"\nfrom with_percentages\norder by total_runtime desc nulls last\nlimit $top",
386
+
"rawSql": "-- Enhanced comprehensive query analysis (Fast mode)\nWITH query_stats AS (\n select\n tag_data->>'queryid' as queryid,\n max((data->>'total_time')::numeric) - min((data->>'total_time')::numeric) as total_runtime,\n (max((data->>'total_time')::numeric) - min((data->>'total_time')::numeric)) / nullif(max((data->>'calls')::int8) - min((data->>'calls')::int8), 0) as avg_runtime,\n max((data->>'total_plan_time')::numeric) - min((data->>'total_plan_time')::numeric) as plan_time,\n (max((data->>'total_plan_time')::numeric) - min((data->>'total_plan_time')::numeric)) / nullif(max((data->>'calls')::int8) - min((data->>'calls')::int8), 0) as avg_plan_time,\n max((data->>'calls')::int8) - min((data->>'calls')::int8) as calls,\n max((data->>'rows')::int8) - min((data->>'rows')::int8) as rows,\n (max((data->>'rows')::int8) - min((data->>'rows')::int8))::numeric / nullif(max((data->>'calls')::int8) - min((data->>'calls')::int8), 0) as avg_rows,\n (max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8)) * 8192 / 1024.0 / 1024.0 as shared_hit_mb,\n (max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as shared_read_mb,\n (max((data->>'shared_blks_written')::int8) - min((data->>'shared_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 as shared_written_mb,\n (max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as temp_read_mb,\n (max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 as temp_written_mb,\n (max((data->>'blk_read_time')::numeric) - min((data->>'blk_read_time')::numeric)) + \n (max((data->>'blk_write_time')::numeric) - min((data->>'blk_write_time')::numeric)) as io_time,\n case when length(tag_data->>'query') > 150 then (tag_data->>'query')::varchar(150) || '...' else tag_data->>'query' end as query\n from stat_statements\n where dbname = '$dbname'\n and $__timeFilter(time)\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid', tag_data->>'query'\n having max((data->>'calls')::int8) - min((data->>'calls')::int8) > 0\n),\nwith_percentages AS (\n select \n *,\n 100 * total_runtime / nullif((select sum(total_runtime) from query_stats), 0) as pct_db_total\n from query_stats\n)\nselect\n queryid,\n total_runtime::int8 as \"Total Runtime\",\n avg_runtime::numeric(10,2) as \"Avg Runtime\",\n plan_time::int8 as \"Plan Time\",\n avg_plan_time::numeric(10,2) as \"Avg Plan Time\",\n calls as \"Calls\",\n rows as \"Rows\",\n avg_rows::numeric(10,1) as \"Avg Rows\",\n shared_hit_mb::numeric(10,1) as \"Shared Hit\",\n shared_read_mb::numeric(10,1) as \"Shared Read\",\n shared_written_mb::numeric(10,1) as \"Shared Written\",\n temp_read_mb::numeric(10,1) as \"Temp Read\",\n temp_written_mb::numeric(10,1) as \"Temp Written\",\n io_time::numeric(10,1) as \"IO Time\",\n pct_db_total::numeric(5,1) as \"% DB Total\",\n (select data->>'users' from stat_statements where $__timeFilter(time) and dbname = '$dbname' and tag_data->>'queryid' = with_percentages.queryid order by time desc limit 1) as \"Users\",\n query as \"Query\"\nfrom with_percentages\norder by total_runtime desc nulls last\nlimit $top",
387
387
"refId": "A"
388
388
}
389
389
],
@@ -800,11 +800,11 @@
800
800
},
801
801
"format": "time_series",
802
802
"rawQuery": true,
803
-
"rawSql": "-- Top queries by shared blocks hit over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8)) * 8192 / 1024.0 / 1024.0 as shared_hit_mb,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8) > 0\n order by (max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
803
+
"rawSql": "-- Top queries by shared blocks hit over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8)) * 8192 / 1024.0 / 1024.0 as shared_blks_hit,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8) > 0\n order by (max((data->>'shared_blks_hit')::int8) - min((data->>'shared_blks_hit')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
804
804
"refId": "A"
805
805
}
806
806
],
807
-
"title": "Top $top statements by shared_blks_hit (in MB)",
807
+
"title": "Top $top statements by shared_blks_hit",
808
808
"type": "timeseries"
809
809
},
810
810
{
@@ -902,11 +902,11 @@
902
902
},
903
903
"format": "time_series",
904
904
"rawQuery": true,
905
-
"rawSql": "-- Top queries by shared blocks read over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as shared_read_mb,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8) > 0\n order by (max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
905
+
"rawSql": "-- Top queries by shared blocks read over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as shared_blks_read,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8) > 0\n order by (max((data->>'shared_blks_read')::int8) - min((data->>'shared_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
906
906
"refId": "A"
907
907
}
908
908
],
909
-
"title": "Top $top statements by shared_blks_read (in MB)",
909
+
"title": "Top $top statements by shared_blks_read",
910
910
"type": "timeseries"
911
911
},
912
912
{
@@ -1000,13 +1000,14 @@
1000
1000
"type": "grafana-postgresql-datasource",
1001
1001
"uid": "pgwatch-metrics"
1002
1002
},
1003
+
"editorMode": "code",
1003
1004
"format": "time_series",
1004
1005
"rawQuery": true,
1005
-
"rawSql": "-- Top queries by temp blocks read over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as temp_read_mb,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8) > 0\n order by (max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
1006
+
"rawSql": "-- Top queries by temp blocks read over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 as temp_blks_read,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8) > 0\n order by (max((data->>'temp_blks_read')::int8) - min((data->>'temp_blks_read')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
1006
1007
"refId": "A"
1007
1008
}
1008
1009
],
1009
-
"title": "Top $top statements by temp bytes read (in MB)",
1010
+
"title": "Top $top statements by temp bytes read",
1010
1011
"type": "timeseries"
1011
1012
},
1012
1013
{
@@ -1104,11 +1105,11 @@
1104
1105
},
1105
1106
"format": "time_series",
1106
1107
"rawQuery": true,
1107
-
"rawSql": "-- Top queries by temp blocks written over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 as temp_written_mb,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8) > 0\n order by (max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
1108
+
"rawSql": "-- Top queries by temp blocks written over time\nSELECT\n $__timeGroup(time, $agg_interval),\n (max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 as temp_blks_written,\n tag_data->>'queryid' as queryid\nFROM\n stat_statements\nWHERE\n $__timeFilter(time)\n AND dbname = '$dbname'\n AND tag_data->>'query' ~* '$query_filter_regex'\n AND tag_data->>'queryid' IN (\n select tag_data->>'queryid'\n from stat_statements\n where $__timeFilter(time) and dbname = '$dbname'\n and tag_data->>'query' ~* '$query_filter_regex'\n group by tag_data->>'queryid'\n having max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8) > 0\n order by (max((data->>'temp_blks_written')::int8) - min((data->>'temp_blks_written')::int8)) * 8192 / 1024.0 / 1024.0 desc\n limit $top\n )\nGROUP BY 1, 3\nORDER BY 1",
1108
1109
"refId": "A"
1109
1110
}
1110
1111
],
1111
-
"title": "Top $top statements by temp bytes written (in MB)",
1112
+
"title": "Top $top statements by temp bytes written",
0 commit comments