diff --git a/sql/low_used_indexes_with_replica.sql b/sql/low_used_indexes_with_replica.sql new file mode 100644 index 0000000..f0f8aa0 --- /dev/null +++ b/sql/low_used_indexes_with_replica.sql @@ -0,0 +1,23 @@ + +SELECT + local.schemaname||'.'||local.relname, + local.indexrelname, + local.idx_scan as local_used, + replica.idx_scan as remote_used, + (coalesce(n_tup_ins,0)+coalesce(n_tup_upd,0)-coalesce(n_tup_hot_upd,0)+coalesce(n_tup_del,0)) as write_activity, + pg_stat_user_tables.seq_scan, + pg_stat_user_tables.n_live_tup, + pg_size_pretty(pg_relation_size(indexrelid::regclass)) as size +from pg_stat_user_indexes as local +join replica_fdw.pg_stat_user_indexes as replica USING (relid, indexrelid) +join pg_stat_user_tables USING (relid) +join pg_index USING (indexrelid) +where + pg_index.indisunique is false + and + --heuristic between table size, index usage and write actibity) + (local.idx_scan+replica.idx_scan)::float*pg_relation_size(relid::regclass)<=10*(coalesce(n_tup_ins,0)+coalesce(n_tup_upd,0)-coalesce(n_tup_hot_upd,0)+coalesce(n_tup_del,0))::float + --skip small unused indexes on zero write tables + and not ((coalesce(n_tup_ins,0)+coalesce(n_tup_upd,0)-coalesce(n_tup_hot_upd,0)+coalesce(n_tup_del,0))<100000 and pg_relation_size(indexrelid::regclass)<100*1024*1024) +order by write_activity desc,pg_relation_size(relid::regclass) desc, local.indexrelname +