'postgresql vaccum'에 해당되는 글 2건

 

1. DB LEVEL XID 확인 

SELECT  concat(datname,':', substr((age(datfrozenxid)/1000000000.0)::text,0,5), 'billion') AS msg 
FROM    pg_database 
where   datname = current_database() 
and     age(datfrozenxid) >= 1000000000 (20억 초과시 에러) 
ORDER BY  
        age(datfrozenxid) desc ; 


2. TABLE LEVEL XID 확인  

select  
        concat(current_database(), '.', c.relname, ':', substr((greatest( age(c.relfrozenxid) 

        , age(t.relfrozenxid) )/ 1000000000.0) ::text, 0, 5), 'billion' ) as msg , 
        greatest(age(c.relfrozenxid), age(t.relfrozenxid)) as get_stat_disk_usge 
from    pg_class c 
left join pg_class t  
        on ( c.reltoastrelid = t.oid ) 
where   c.relkind in ('r','m') 
and     c.oid::regclass::text not like 'pg_%' 
and     c.oid::regclass::text not like 'public%' 
and     c.oid::regclass::text not like 'information_schema_%' 
and     greatest(age(c.relfrozenxid), age(t.relfrozenxid))  >= 1000000000 (20억 초과시 에러)

 

블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,

PostgreSQL Autovacuum기준으로 vacuum 대상 테이블 목록 스크립트


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) * 
pg_table_size(c.oid)) 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) * 
pg_table_size(c.oid) <= n_dead_tup
   -- or 1 = 1
)
ORDER BY age(relfrozenxid) DESC LIMIT 50;
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,