Skip to content

Commit 7341a4e

Browse files
authored
Merge branch 'master' into e1_fix
2 parents 53b2029 + 131856b commit 7341a4e

File tree

1 file changed

+29
-21
lines changed

1 file changed

+29
-21
lines changed

sql/b4_btree_pgstattuple.sql

Lines changed: 29 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -3,31 +3,39 @@
33
--https://github.com/dataegret/pg-utils/tree/master/sql
44
--pgstattuple extension required
55
--WARNING: without index name/mask query will read all available indexes which could cause I/O spikes
6-
with indexes as (
7-
select * from pg_stat_user_indexes
8-
)
9-
select schemaname,
10-
table_name,
11-
pg_size_pretty(table_size) as table_size,
12-
index_name,
13-
pg_size_pretty(index_size) as index_size,
14-
idx_scan as index_scans,
15-
round((free_space*100/index_size)::numeric, 1) as waste_percent,
16-
pg_size_pretty(free_space) as waste
17-
from (
18-
select schemaname, p.relname as table_name, indexrelname as index_name,
19-
(select (case when avg_leaf_density = 'NaN' then 0
20-
else greatest(ceil(index_size * (1 - avg_leaf_density / (coalesce((SELECT (regexp_matches(reloptions::text, E'.*fillfactor=(\\d+).*'))[1]),'90')::real)))::bigint, 0) end)
21-
from pgstatindex(schemaname || '.' || p.indexrelid::regclass::text)
6+
with data as (
7+
select
8+
schemaname as schema_name,
9+
p.relname as table_name,
10+
(select spcname from pg_tablespace where oid = c_table.reltablespace) as table_tblspace,
11+
(select spcname from pg_tablespace where oid = c.reltablespace) as index_tblspace,
12+
indexrelname as index_name,
13+
(
14+
select (case when avg_leaf_density = 'NaN' then 0
15+
else greatest(ceil(index_size * (1 - avg_leaf_density / (coalesce((SELECT (regexp_matches(c.reloptions::text, E'.*fillfactor=(\\d+).*'))[1]),'90')::real)))::bigint, 0) end)
16+
from pgstatindex(
17+
case when p.indexrelid::regclass::text ~ '\.' then p.indexrelid::regclass::text else schemaname || '.' || p.indexrelid::regclass::text end
18+
)
2219
) as free_space,
2320
pg_relation_size(p.indexrelid) as index_size,
2421
pg_relation_size(p.relid) as table_size,
2522
idx_scan
26-
from indexes p
27-
join pg_class c on p.indexrelid = c.oid
28-
where pg_get_indexdef(p.indexrelid) like '%USING btree%' and
23+
from pg_stat_user_indexes p
24+
join pg_class c on p.indexrelid = c.oid
25+
join pg_class c_table on p.relid = c_table.oid
26+
where
27+
pg_get_indexdef(p.indexrelid) like '%USING btree%'
2928
--put your index name/mask here
30-
indexrelname ~ ''
31-
) t
29+
and indexrelname ~ ''
30+
)
31+
select
32+
coalesce(nullif(schema_name, 'public') || '.', '') || table_name || coalesce(' [' || table_tblspace || ']', '') as "Table",
33+
coalesce(nullif(schema_name, 'public') || '.', '') || index_name || coalesce(' [' || index_tblspace || ']', '') as "Index",
34+
pg_size_pretty(table_size) as "Table size",
35+
pg_size_pretty(index_size) as "Index size",
36+
idx_scan as "Index Scans",
37+
round((free_space*100/index_size)::numeric, 1) as "Wasted, %",
38+
pg_size_pretty(free_space) as "Wasted"
39+
from data
3240
order by free_space desc;
3341

0 commit comments

Comments
 (0)