@@ -263,70 +263,73 @@ autovacuum:
263263
264264autovacuum_queue :
265265 # https://gist.github.com/lesovsky/b0e4033380b0992789118ab35c4c323f
266- query : >-
267- WITH table_opts AS (
268- SELECT
269- c.oid, c.relname, c.relfrozenxid, c.relminmxid, n.nspname, array_to_string(c.reloptions, '') AS relopts
270- FROM pg_class c
271- INNER JOIN pg_namespace n ON c.relnamespace = n.oid
272- WHERE c.relkind IN ('r', 't') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_temp'
273- ),
274- vacuum_settings AS (
266+ query :
267+ -9.5 :
268+ select;
269+ 9.5- :
270+ WITH table_opts AS (
271+ SELECT
272+ c.oid, c.relname, c.relfrozenxid, c.relminmxid, n.nspname, array_to_string(c.reloptions, '') AS relopts
273+ FROM pg_class c
274+ INNER JOIN pg_namespace n ON c.relnamespace = n.oid
275+ WHERE c.relkind IN ('r', 't') AND n.nspname NOT IN ('pg_catalog', 'information_schema') AND n.nspname !~ '^pg_temp'
276+ ),
277+ vacuum_settings AS (
278+ SELECT
279+ oid, relname, nspname, relfrozenxid, relminmxid,
280+ CASE
281+ WHEN relopts LIKE '%autovacuum_vacuum_threshold%'
282+ THEN regexp_replace(relopts, '.*autovacuum_vacuum_threshold=([0-9.]+).*', E'\\1')::integer
283+ ELSE current_setting('autovacuum_vacuum_threshold')::integer
284+ END AS autovacuum_vacuum_threshold,
285+ CASE
286+ WHEN relopts LIKE '%autovacuum_vacuum_scale_factor%'
287+ THEN regexp_replace(relopts, '.*autovacuum_vacuum_scale_factor=([0-9.]+).*', E'\\1')::real
288+ ELSE current_setting('autovacuum_vacuum_scale_factor')::real
289+ END AS autovacuum_vacuum_scale_factor,
290+ CASE
291+ WHEN relopts LIKE '%autovacuum_analyze_threshold%'
292+ THEN regexp_replace(relopts, '.*autovacuum_analyze_threshold=([0-9.]+).*', E'\\1')::integer
293+ ELSE current_setting('autovacuum_analyze_threshold')::integer
294+ END AS autovacuum_analyze_threshold,
295+ CASE
296+ WHEN relopts LIKE '%autovacuum_analyze_scale_factor%'
297+ THEN regexp_replace(relopts, '.*autovacuum_analyze_scale_factor=([0-9.]+).*', E'\\1')::real
298+ ELSE current_setting('autovacuum_analyze_scale_factor')::real
299+ END AS autovacuum_analyze_scale_factor,
300+ CASE
301+ WHEN relopts LIKE '%autovacuum_freeze_max_age%'
302+ THEN least(regexp_replace(relopts, '.*autovacuum_freeze_max_age=([0-9.]+).*', E'\\1')::bigint,current_setting('autovacuum_freeze_max_age')::bigint)
303+ ELSE current_setting('autovacuum_freeze_max_age')::bigint
304+ END AS autovacuum_freeze_max_age,
305+ CASE
306+ WHEN relopts LIKE '%autovacuum_multixact_freeze_max_age%'
307+ THEN least(regexp_replace(relopts, '.*autovacuum_multixact_freeze_max_age=([0-9.]+).*', E'\\1')::bigint,current_setting('autovacuum_multixact_freeze_max_age')::bigint)
308+ ELSE current_setting('autovacuum_multixact_freeze_max_age')::bigint
309+ END AS autovacuum_multixact_freeze_max_age
310+ FROM table_opts
311+ )
275312 SELECT
276- oid, relname, nspname, relfrozenxid, relminmxid,
277- CASE
278- WHEN relopts LIKE '%autovacuum_vacuum_threshold%'
279- THEN regexp_replace(relopts, '.*autovacuum_vacuum_threshold=([0-9.]+).*', E'\\1')::integer
280- ELSE current_setting('autovacuum_vacuum_threshold')::integer
281- END AS autovacuum_vacuum_threshold,
282- CASE
283- WHEN relopts LIKE '%autovacuum_vacuum_scale_factor%'
284- THEN regexp_replace(relopts, '.*autovacuum_vacuum_scale_factor=([0-9.]+).*', E'\\1')::real
285- ELSE current_setting('autovacuum_vacuum_scale_factor')::real
286- END AS autovacuum_vacuum_scale_factor,
287- CASE
288- WHEN relopts LIKE '%autovacuum_analyze_threshold%'
289- THEN regexp_replace(relopts, '.*autovacuum_analyze_threshold=([0-9.]+).*', E'\\1')::integer
290- ELSE current_setting('autovacuum_analyze_threshold')::integer
291- END AS autovacuum_analyze_threshold,
292- CASE
293- WHEN relopts LIKE '%autovacuum_analyze_scale_factor%'
294- THEN regexp_replace(relopts, '.*autovacuum_analyze_scale_factor=([0-9.]+).*', E'\\1')::real
295- ELSE current_setting('autovacuum_analyze_scale_factor')::real
296- END AS autovacuum_analyze_scale_factor,
297- CASE
298- WHEN relopts LIKE '%autovacuum_freeze_max_age%'
299- THEN least(regexp_replace(relopts, '.*autovacuum_freeze_max_age=([0-9.]+).*', E'\\1')::bigint,current_setting('autovacuum_freeze_max_age')::bigint)
300- ELSE current_setting('autovacuum_freeze_max_age')::bigint
301- END AS autovacuum_freeze_max_age,
302- CASE
303- WHEN relopts LIKE '%autovacuum_multixact_freeze_max_age%'
304- THEN least(regexp_replace(relopts, '.*autovacuum_multixact_freeze_max_age=([0-9.]+).*', E'\\1')::bigint,current_setting('autovacuum_multixact_freeze_max_age')::bigint)
305- ELSE current_setting('autovacuum_multixact_freeze_max_age')::bigint
306- END AS autovacuum_multixact_freeze_max_age
307- FROM table_opts
308- )
309- SELECT
310- current_database() as datname,
311- count(CASE
312- WHEN v.autovacuum_vacuum_threshold + (v.autovacuum_vacuum_scale_factor::numeric * c.reltuples) < s.n_dead_tup
313- THEN true
314- END) AS need_vacuum_cnt,
315- count(CASE
316- WHEN v.autovacuum_analyze_threshold + (v.autovacuum_analyze_scale_factor::numeric * c.reltuples) < s.n_mod_since_analyze
317- THEN true
318- END) AS need_analyze_cnt,
319- count(CASE
320- WHEN (age(v.relfrozenxid)::bigint > v.autovacuum_freeze_max_age) OR (mxid_age(v.relminmxid)::bigint > v.autovacuum_multixact_freeze_max_age)
321- THEN true
322- END) AS need_wraparound_cnt
323- FROM pg_stat_user_tables s
324- INNER JOIN pg_class c ON s.relid = c.oid
325- INNER JOIN vacuum_settings v ON c.oid = v.oid
326- WHERE
327- (v.autovacuum_vacuum_threshold + (v.autovacuum_vacuum_scale_factor::numeric * c.reltuples) < s.n_dead_tup)
328- OR (v.autovacuum_analyze_threshold + (v.autovacuum_analyze_scale_factor::numeric * c.reltuples) < s.n_mod_since_analyze)
329- OR (age(v.relfrozenxid)::bigint > v.autovacuum_freeze_max_age) OR (mxid_age(v.relminmxid)::bigint > v.autovacuum_multixact_freeze_max_age)
313+ current_database() as datname,
314+ count(CASE
315+ WHEN v.autovacuum_vacuum_threshold + (v.autovacuum_vacuum_scale_factor::numeric * c.reltuples) < s.n_dead_tup
316+ THEN true
317+ END) AS need_vacuum_cnt,
318+ count(CASE
319+ WHEN v.autovacuum_analyze_threshold + (v.autovacuum_analyze_scale_factor::numeric * c.reltuples) < s.n_mod_since_analyze
320+ THEN true
321+ END) AS need_analyze_cnt,
322+ count(CASE
323+ WHEN (age(v.relfrozenxid)::bigint > v.autovacuum_freeze_max_age) OR (mxid_age(v.relminmxid)::bigint > v.autovacuum_multixact_freeze_max_age)
324+ THEN true
325+ END) AS need_wraparound_cnt
326+ FROM pg_stat_user_tables s
327+ INNER JOIN pg_class c ON s.relid = c.oid
328+ INNER JOIN vacuum_settings v ON c.oid = v.oid
329+ WHERE
330+ (v.autovacuum_vacuum_threshold + (v.autovacuum_vacuum_scale_factor::numeric * c.reltuples) < s.n_dead_tup)
331+ OR (v.autovacuum_analyze_threshold + (v.autovacuum_analyze_scale_factor::numeric * c.reltuples) < s.n_mod_since_analyze)
332+ OR (age(v.relfrozenxid)::bigint > v.autovacuum_freeze_max_age) OR (mxid_age(v.relminmxid)::bigint > v.autovacuum_multixact_freeze_max_age)
330333
331334 metrics :
332335 - datname :
0 commit comments