Tuesday, 16 July 2019

Currently running queries on Postgresql DB

shown, sorted from the longest running, with

select now()-query_start, * from pg_stat_activity where state<>'idle' order by 1 desc;

 canceled with: select pg_cancel_backend([PID]); 

 select pg_cancel_backend([PID]); 

or, if idle in transaction, with: 

 select pg_terminate_backend([PID]);

Friday, 18 January 2019

Determining if Autovacuum Is Currently Running and For How Long

SELECT datname, usename, pid, waiting, current_timestamp - xact_start
AS xact_runtime, query
FROM pg_stat_activity WHERE upper(query) like '%VACUUM%' ORDER BY
xact_start; 

Determining Which Tables Are Currently Eligible for Autovacuum

WITH vbt AS (SELECT setting AS autovacuum_vacuum_threshold FROM
pg_settings WHERE name = 'autovacuum_vacuum_threshold')
    , vsf AS (SELECT setting AS autovacuum_vacuum_scale_factor FROM
pg_settings WHERE name = 'autovacuum_vacuum_scale_factor')
    , fma AS (SELECT setting AS autovacuum_freeze_max_age FROM
pg_settings WHERE name = 'autovacuum_freeze_max_age')
    , sto AS (select opt_oid, split_part(setting, '=', 1) as param,
split_part(setting, '=', 2) as value from (select oid opt_oid,
unnest(reloptions) setting from pg_class) opt)
SELECT
    '"'||ns.nspname||'"."'||c.relname||'"' as relation
    , pg_size_pretty(pg_table_size(c.oid)) as table_size
    , age(relfrozenxid) as xid_age
    , coalesce(cfma.value::float, autovacuum_freeze_max_age::float)
autovacuum_freeze_max_age
    , (coalesce(cvbt.value::float, autovacuum_vacuum_threshold::float)
+ coalesce(cvsf.value::float,autovacuum_vacuum_scale_factor::float) *
c.reltuples) as autovacuum_vacuum_tuples
    , n_dead_tup as dead_tuples
FROM pg_class c join pg_namespace ns on ns.oid = c.relnamespace
join pg_stat_all_tables stat on stat.relid = c.oid
join vbt on (1=1) join vsf on (1=1) join fma on (1=1)
left join sto cvbt on cvbt.param = 'autovacuum_vacuum_threshold' and
c.oid = cvbt.opt_oid
left join sto cvsf on cvsf.param = 'autovacuum_vacuum_scale_factor' and
c.oid = cvsf.opt_oid
left join sto cfma on cfma.param = 'autovacuum_freeze_max_age' and
c.oid = cfma.opt_oid
WHERE c.relkind = 'r' and nspname <> 'pg_catalog'
and (
    age(relfrozenxid) >= coalesce(cfma.value::float,
autovacuum_freeze_max_age::float)
    or
    coalesce(cvbt.value::float, autovacuum_vacuum_threshold::float) +
coalesce(cvsf.value::float,autovacuum_vacuum_scale_factor::float) *
c.reltuples <= n_dead_tup
   -- or 1 = 1
)
ORDER BY age(relfrozenxid) DESC LIMIT 50;

Thursday, 29 November 2018

How to check largest tables including indexes in PostgreSQL

select
  pg_size_pretty(relation_size) as relation_size,
  pg_size_pretty(total_relation_size) as total_relation_size,
  pg_size_pretty(sum(total_relation_size) over (order by total_relation_size desc)) as cumulative_size,
  schemaname,
  relname
from (
  select
    pg_total_relation_size(quote_ident(schemaname)||'.'||quote_ident(relname)) as total_relation_size,
    pg_relation_size(quote_ident(schemaname)||'.'||quote_ident(relname)) as relation_size,
    schemaname,
    relname
  from pg_stat_user_tables
  order by 2 desc
) as _;

Currently running queries on Postgresql DB

shown, sorted from the longest running, with select now()-query_start, * from pg_stat_activity where state<> 'idle' order...