Skip to content
This repository was archived by the owner on Jul 6, 2021. It is now read-only.

Commit bd2787f

Browse files
author
Oleg
committed
Merge branch 'issue_179' into 'master'
refs #179 K003 for each metric show ratio See merge request postgres-ai-team/postgres-checkup!195
2 parents 80c6f54 + fce6241 commit bd2787f

File tree

2 files changed

+115
-30
lines changed

2 files changed

+115
-30
lines changed

pghrep/templates/K003.tpl

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -8,24 +8,27 @@ End: {{ (index (index (index .results .hosts.master) "data") "end_timestamptz")
88
Period seconds: {{ (index (index (index .results .hosts.master) "data") "period_seconds") }}
99
Period age: {{ (index (index (index .results .hosts.master) "data") "period_age") }}
1010

11+
Error (calls): {{ NumFormat (index (index (index .results .hosts.master) "data") "absolute_error_calls") 2 }} ({{ NumFormat (index (index (index .results .hosts.master) "data") "relative_error_calls") 2 }}%)
12+
Error (total time): {{ NumFormat (index (index (index .results .hosts.master) "data") "absolute_error_total_time") 2 }} ({{ NumFormat (index (index (index .results .hosts.master) "data") "relative_error_total_time") 2 }}%)
13+
1114
\# | Calls | ▼ Total time | Rows | shared_blks_hit | shared_blks_read | shared_blks_dirtied | shared_blks_written | blk_read_time | blk_write_time | kcache_reads | kcache_writes | kcache_user_time_ms | kcache_system_time | Query
1215
----|-------|------------|------|-----------------|------------------|---------------------|---------------------|---------------|----------------|--------------|---------------|---------------------|--------------------|-------
1316
{{ range $i, $key := (index (index (index (index .results .hosts.master) "data") "queries") "_keys") }}
1417
{{- $value := (index (index (index (index $.results $.hosts.master) "data") "queries") $key) -}}
1518
{{- $key}} |
16-
{{- NumFormat $value.diff_calls 2 }}<br/>{{ NumFormat $value.per_sec_calls 2 }}/sec<br/>{{ NumFormat $value.per_call_calls 2 }}/call |
17-
{{- MsFormat $value.diff_total_time }}<br/>{{ MsFormat $value.per_sec_total_time }}/sec<br/>{{ MsFormat $value.per_call_total_time }}/call |
18-
{{- NumFormat $value.diff_rows 2 }}<br/>{{ NumFormat $value.per_sec_rows 2 }}/sec<br/>{{ NumFormat $value.per_call_rows 2 }}/call |
19-
{{- NumFormat $value.diff_shared_blks_hit 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_hit 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_hit 2 }}&nbsp;blks/call |
20-
{{- NumFormat $value.diff_shared_blks_read 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_read 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_read 2 }}&nbsp;blks/call |
21-
{{- NumFormat $value.diff_shared_blks_dirtied 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_dirtied 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_dirtied 2 }}&nbsp;blks/call |
22-
{{- NumFormat $value.diff_shared_blks_written 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_written 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_written 2 }}&nbsp;blks/call |
23-
{{- MsFormat $value.diff_blk_read_time }}<br/>{{ MsFormat $value.per_sec_blk_read_time }}/sec<br/>{{ MsFormat $value.per_call_blk_read_time }}/call |
24-
{{- MsFormat $value.diff_blk_write_time }}<br/>{{ MsFormat $value.per_sec_blk_write_time }}/sec<br/>{{ MsFormat $value.per_call_blk_write_time }}/call |
25-
{{- NumFormat $value.diff_kcache_reads 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_reads 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_reads 2 }}&nbsp;bytes/call |
26-
{{- NumFormat $value.diff_kcache_writes 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_writes 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_writes 2 }}&nbsp;bytes/call |
27-
{{- MsFormat $value.diff_kcache_user_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_user_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_user_time_ms }}/call |
28-
{{- MsFormat $value.diff_kcache_system_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_system_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_system_time_ms }}/call |
19+
{{- NumFormat $value.diff_calls 2 }}<br/>{{ NumFormat $value.per_sec_calls 2 }}/sec<br/>{{ NumFormat $value.per_call_calls 2 }}/call<br/>{{ NumFormat $value.ratio_calls 2 }}% |
20+
{{- MsFormat $value.diff_total_time }}<br/>{{ MsFormat $value.per_sec_total_time }}/sec<br/>{{ MsFormat $value.per_call_total_time }}/call<br/>{{ NumFormat $value.ratio_total_time 2 }}% |
21+
{{- NumFormat $value.diff_rows 2 }}<br/>{{ NumFormat $value.per_sec_rows 2 }}/sec<br/>{{ NumFormat $value.per_call_rows 2 }}/call<br/>{{ NumFormat $value.ratio_rows 2 }}% |
22+
{{- NumFormat $value.diff_shared_blks_hit 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_hit 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_hit 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_hit 2 }}% |
23+
{{- NumFormat $value.diff_shared_blks_read 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_read 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_read 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_read 2 }}% |
24+
{{- NumFormat $value.diff_shared_blks_dirtied 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_dirtied 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_dirtied 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_dirtied 2 }}% |
25+
{{- NumFormat $value.diff_shared_blks_written 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_written 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_written 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_written 2 }}% |
26+
{{- MsFormat $value.diff_blk_read_time }}<br/>{{ MsFormat $value.per_sec_blk_read_time }}/sec<br/>{{ MsFormat $value.per_call_blk_read_time }}/call<br/>{{ NumFormat $value.ratio_blk_read_time 2 }}% |
27+
{{- MsFormat $value.diff_blk_write_time }}<br/>{{ MsFormat $value.per_sec_blk_write_time }}/sec<br/>{{ MsFormat $value.per_call_blk_write_time }}/call<br/>{{ MsFormat $value.per_call_blk_write_time }}/call<br/>{{ NumFormat $value.ratio_blk_write_time 2 }}% |
28+
{{- NumFormat $value.diff_kcache_reads 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_reads 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_reads 2 }}&nbsp;bytes/call<br/>{{ NumFormat $value.ratio_kcache_reads 2 }}% |
29+
{{- NumFormat $value.diff_kcache_writes 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_writes 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_writes 2 }}&nbsp;bytes/call<br/>{{ NumFormat $value.ratio_kcache_writes 2 }}% |
30+
{{- MsFormat $value.diff_kcache_user_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_user_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_user_time_ms }}/call<br/>{{ NumFormat $value.ratio_kcache_user_time_ms 2 }}% |
31+
{{- MsFormat $value.diff_kcache_system_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_system_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_system_time_ms }}/call<br/>{{ NumFormat $value.ratio_kcache_system_time_ms 2 }}% |
2932
{{- Nobr (LimitStr $value.query 2000 ) }}
3033
{{ end }}{{/* range */}}
3134
{{ else }}{{/* if .host.master*/}}
@@ -47,19 +50,19 @@ Period age: {{ (index (index (index $.results $host) "data") "period_age") }}
4750
{{ range $i, $key := (index (index (index (index $.results $host) "data") "queries") "_keys") }}
4851
{{- $value := (index (index (index (index $.results $host) "data") "queries") $key) -}}
4952
{{- $key}} |
50-
{{- NumFormat $value.diff_calls 2 }}<br/>{{ NumFormat $value.per_sec_calls 2 }}/sec<br/>{{ NumFormat $value.per_call_calls 2 }}/call |
51-
{{- MsFormat $value.diff_total_time }}<br/>{{ MsFormat $value.per_sec_total_time }}/sec<br/>{{ MsFormat $value.per_call_total_time }}/call |
52-
{{- NumFormat $value.diff_rows 2 }}<br/>{{ NumFormat $value.per_sec_rows 2 }}/sec<br/>{{ NumFormat $value.per_call_rows 2 }}/call |
53-
{{- NumFormat $value.diff_shared_blks_hit 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_hit 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_hit 2 }}&nbsp;blks/call |
54-
{{- NumFormat $value.diff_shared_blks_read 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_read 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_read 2 }}&nbsp;blks/call |
55-
{{- NumFormat $value.diff_shared_blks_dirtied 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_dirtied 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_dirtied 2 }}&nbsp;blks/call |
56-
{{- NumFormat $value.diff_shared_blks_written 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_written 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_written 2 }}&nbsp;blks/call |
57-
{{- MsFormat $value.diff_blk_read_time }}<br/>{{ MsFormat $value.per_sec_blk_read_time }}/sec<br/>{{ MsFormat $value.per_call_blk_read_time }}/call |
58-
{{- MsFormat $value.diff_blk_write_time }}<br/>{{ MsFormat $value.per_sec_blk_write_time }}/sec<br/>{{ MsFormat $value.per_call_blk_write_time }}/call |
59-
{{- NumFormat $value.diff_kcache_reads 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_reads 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_reads 2 }}&nbsp;bytes/call |
60-
{{- NumFormat $value.diff_kcache_writes 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_writes 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_writes 2 }}&nbsp;bytes/call |
61-
{{- MsFormat $value.diff_kcache_user_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_user_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_user_time_ms }}/call |
62-
{{- MsFormat $value.diff_kcache_system_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_system_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_system_time_ms }}/call |
53+
{{- NumFormat $value.diff_calls 2 }}<br/>{{ NumFormat $value.per_sec_calls 2 }}/sec<br/>{{ NumFormat $value.per_call_calls 2 }}/call<br/>{{ NumFormat $value.ratio_calls 2 }}% |
54+
{{- MsFormat $value.diff_total_time }}<br/>{{ MsFormat $value.per_sec_total_time }}/sec<br/>{{ MsFormat $value.per_call_total_time }}/call<br/>{{ NumFormat $value.ratio_total_time 2 }}% |
55+
{{- NumFormat $value.diff_rows 2 }}<br/>{{ NumFormat $value.per_sec_rows 2 }}/sec<br/>{{ NumFormat $value.per_call_rows 2 }}/call<br/>{{ NumFormat $value.ratio_rows 2 }}% |
56+
{{- NumFormat $value.diff_shared_blks_hit 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_hit 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_hit 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_hit 2 }}% |
57+
{{- NumFormat $value.diff_shared_blks_read 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_read 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_read 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_read 2 }}% |
58+
{{- NumFormat $value.diff_shared_blks_dirtied 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_dirtied 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_dirtied 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_dirtied 2 }}% |
59+
{{- NumFormat $value.diff_shared_blks_written 2 }}&nbsp;blks<br/>{{ NumFormat $value.per_sec_shared_blks_written 2 }}&nbsp;blks/sec<br/>{{ NumFormat $value.per_call_shared_blks_written 2 }}&nbsp;blks/call<br/>{{ NumFormat $value.ratio_shared_blks_written 2 }}% |
60+
{{- MsFormat $value.diff_blk_read_time }}<br/>{{ MsFormat $value.per_sec_blk_read_time }}/sec<br/>{{ MsFormat $value.per_call_blk_read_time }}/call<br/>{{ NumFormat $value.ratio_blk_read_time 2 }}% |
61+
{{- MsFormat $value.diff_blk_write_time }}<br/>{{ MsFormat $value.per_sec_blk_write_time }}/sec<br/>{{ MsFormat $value.per_call_blk_write_time }}/call<br/>{{ MsFormat $value.per_call_blk_write_time }}/call<br/>{{ NumFormat $value.ratio_blk_write_time 2 }}% |
62+
{{- NumFormat $value.diff_kcache_reads 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_reads 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_reads 2 }}&nbsp;bytes/call<br/>{{ NumFormat $value.ratio_kcache_reads 2 }}% |
63+
{{- NumFormat $value.diff_kcache_writes 2 }}&nbsp;bytes<br/>{{ NumFormat $value.per_sec_kcache_writes 2 }}&nbsp;bytes/sec<br/>{{ NumFormat $value.per_call_kcache_writes 2 }}&nbsp;bytes/call<br/>{{ NumFormat $value.ratio_kcache_writes 2 }}% |
64+
{{- MsFormat $value.diff_kcache_user_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_user_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_user_time_ms }}/call<br/>{{ NumFormat $value.ratio_kcache_user_time_ms 2 }}% |
65+
{{- MsFormat $value.diff_kcache_system_time_ms }}<br/>{{ MsFormat $value.per_sec_kcache_system_time_ms }}/sec<br/>{{ MsFormat $value.per_call_kcache_system_time_ms }}/call<br/>{{ NumFormat $value.ratio_kcache_system_time_ms 2 }}% |
6366
{{- Nobr (LimitStr $value.query 2000 ) }}
6467
{{ end }}{{/* range */}}
6568
{{- else -}}{{/* if host data */}}

resources/checks/K003_top_total_time.sh

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,9 @@ fi
182182

183183
# generate sub_sql
184184
sub_sql=" "
185+
sub_sql_sum_s1=" "
186+
sub_sql_sum_s2=" "
187+
sub_sql_sum_delta=" "
185188
for key in \
186189
calls \
187190
total_time \
@@ -201,18 +204,24 @@ for key in \
201204
kcache_reads \
202205
kcache_writes \
203206
kcache_user_time_ms \
204-
kcache_system_time_ms \
205-
queryid \
206-
userid \
207-
dbid ;
207+
kcache_system_time_ms ;
208208
do
209209
sub_sql="${sub_sql}
210210
(s2.obj->>'${key}')::numeric - (s1.obj->>'${key}')::numeric as diff_${key},
211211
( (s2.obj->>'${key}')::numeric - (s1.obj->>'${key}')::numeric ) / nullif(( select seconds from delta ), 0) as per_sec_${key},
212212
( (s2.obj->>'${key}')::numeric - (s1.obj->>'${key}')::numeric ) / nullif(( (s2.obj->>'calls')::numeric - (s1.obj->>'calls')::numeric ), 0) as per_call_${key},
213+
case when (select sum_delta_${key} from sum_delta) = 0 then 0
214+
else round(100 * (( (s2.obj->>'${key}')::numeric - (s1.obj->>'${key}')::numeric ))::numeric / (select sum_delta_${key} from sum_delta)) end as ratio_${key},
213215
"
216+
sub_sql_sum_s1="${sub_sql_sum_s1}
217+
sum((s1.obj->>'${key}')::numeric) as sum_${key},"
218+
sub_sql_sum_s2="${sub_sql_sum_s2}
219+
sum((s2.obj->>'${key}')::numeric) as sum_${key},"
220+
sub_sql_sum_delta="${sub_sql_sum_delta}
221+
sum((s2.obj->>'${key}')::numeric - (s1.obj->>'${key}')::numeric) as sum_delta_${key},"
214222
done
215223

224+
216225
sql="
217226
with snap1(j) as (
218227
select \$snap1\$
@@ -232,6 +241,75 @@ sql="
232241
), s2(md5, obj) as (
233242
select _.*
234243
from snap2, lateral json_each(j->'queries') as _
244+
), si as ( -- let's create si as intersection of s1 and s2 (si contains all query groups which both s1 and s2 have)
245+
select s1.md5
246+
from s1
247+
intersect
248+
select s2.md5
249+
from s2
250+
), sum_si_s1 as ( -- calculate sum(calls) and sum(total_time) for si-s1
251+
select
252+
sum((s1.obj->>'calls')::numeric) as sum_calls,
253+
sum((s1.obj->>'total_time')::numeric) as sum_total_time,
254+
1 as key
255+
from s1
256+
where s1.md5 in (select md5 from si)
257+
), sum_si_s2 as ( -- calculate sum(calls) and sum(total_time) for si-s2
258+
select
259+
sum((s2.obj->>'calls')::numeric) as sum_calls,
260+
sum((s2.obj->>'total_time')::numeric) as sum_total_time,
261+
1 as key
262+
from s2
263+
where s2.md5 in (select md5 from si)
264+
), sum_s1 as (
265+
select
266+
${sub_sql_sum_s1}
267+
1 as key
268+
from s1
269+
), sum_s2 as (
270+
select
271+
${sub_sql_sum_s2}
272+
1 as key
273+
from s2
274+
), diff1 as ( -- the difference between sum for si and sum for s1
275+
select
276+
abs(sum_s1.sum_calls - sum_si_s1.sum_calls) as sum_calls,
277+
abs(sum_s1.sum_total_time - sum_si_s1.sum_total_time) as sum_total_time,
278+
key
279+
from sum_s1
280+
join sum_si_s1 using (key)
281+
), diff2 as ( -- the difference between sum for si and sum for s2
282+
select
283+
abs(sum_s2.sum_calls - sum_si_s2.sum_calls) as sum_calls,
284+
abs(sum_s2.sum_total_time - sum_si_s2.sum_total_time) as sum_total_time,
285+
key
286+
from sum_s2
287+
join sum_si_s2 using (key)
288+
), diff_calc_rel_err as (
289+
select
290+
abs(sum_si_s2.sum_calls - sum_si_s1.sum_calls) as sum_calls,
291+
abs(sum_si_s2.sum_total_time - sum_si_s1.sum_total_time) as sum_total_time,
292+
key
293+
from sum_si_s2
294+
join sum_si_s1 using (key)
295+
), calc_error as ( -- absolute error with respect to calls metric is calculated as: (diff1(calls) + diff2(calls)) / 2
296+
select
297+
(diff1.sum_calls + diff2.sum_calls)::numeric / 2 as absolute_error_calls,
298+
(diff1.sum_total_time + diff2.sum_total_time)::numeric / 2 as absolute_error_total_time,
299+
case when (select sum_calls from diff_calc_rel_err) = 0 then 0 else
300+
(((diff1.sum_calls + diff2.sum_calls) / 2) * 100) / (select sum_calls from diff_calc_rel_err)
301+
end as relative_error_calls,
302+
case when (select sum_total_time from diff_calc_rel_err) = 0 then 0 else
303+
(((diff1.sum_total_time + diff2.sum_total_time) / 2) * 100) / (select sum_total_time from diff_calc_rel_err)
304+
end as relative_error_total_time
305+
from diff1
306+
join diff2 using (key)
307+
), sum_delta as (
308+
select
309+
${sub_sql_sum_delta}
310+
'' as _
311+
from s1
312+
join s2 using(md5)
235313
), queries_pre as (
236314
select
237315
${sub_sql}
@@ -251,6 +329,10 @@ sql="
251329
'end_timestamptz'::text, (select j->'snapshot_timestamptz' from snap2),
252330
'period_seconds'::text, ( select (snap2.j->>'snapshot_timestamptz_s')::numeric - (snap1.j->>'snapshot_timestamptz_s')::numeric from snap1, snap2 ),
253331
'period_age'::text, ( select (snap2.j->>'snapshot_timestamptz')::timestamptz - (snap1.j->>'snapshot_timestamptz')::timestamptz from snap1, snap2 ),
332+
'absolute_error_calls'::text, (select absolute_error_calls from calc_error),
333+
'absolute_error_total_time'::text, (select absolute_error_total_time from calc_error),
334+
'relative_error_calls'::text, (select relative_error_calls from calc_error),
335+
'relative_error_total_time'::text, (select relative_error_total_time from calc_error),
254336
'queries', json_object_agg(queries.rownum, queries.*)
255337
)
256338
from queries

0 commit comments

Comments
 (0)