J'essaie d'obtenir des statistiques sur les index. Je recherche des valeurs totales dans un index et sa taille.
Je ne peux trouver que la taille de tous les index sur la table. La table pg_class colonne relpages et reltuples affiche les valeurs de la table et non à un niveau d'index spécifique.
De plus, la fonction pg_indexes_size prend le nom de la table comme argument et renvoie la taille totale de l'index pour cette table.
existe-t-il un moyen d'obtenir la taille et le numéro de ligne au niveau de l'index? J'utilise PostgreSQL 9.3.
Merci d'avance pour votre aide
pg_table_size('index_name')
pour l'index individuel - mais il ne vous montrera que la taille sur le disque, pas la quantité de données
count(1)
pour obtenir le montage actuel exact des lignes
sum(pg_column_size(column_name)) from table_name
pour les estimations du montant des données de la colonne
vous pouvez vous essayer comme:
t=# \di+ tbl*
List of relations
Schema | Name | Type | Owner | Table | Size | Description
--------+----------------------+-------+----------+----------------+--------+-------------
public | tbl_pkey | index | postgres | tbl | 156 MB |
public | tbl_unpic | index | postgres | tbl | 46 MB |
public | tbl_x1 | index | postgres | tbl | 57 MB |
(3 rows)
t=# \dt+ tbl
List of relations
Schema | Name | Type | Owner | Size | Description
--------+----------------+-------+----------+-------+-------------
public | tbl | table | postgres | 78 MB |
(1 row)
t=# select pg_size_pretty(pg_total_relation_size('tbl'));
pg_size_pretty
----------------
337 MB
(1 row)
t=# select 78+57+46+156;
?column?
----------
337
(1 row)
et pour vérifier comment psql obtient la taille d'index individuelle, exécutez-la avec psql -E
..
et encore une fois - les fonctions ci-dessus fonctionnent avec la taille qu'il faut du disque - cela peut/(peut-être) être extrêmement différent de la quantité réelle de données. passer l'aspirateur aide ici
mise à jour Je ne sais pas où vous obtenez directement le nombre de "lignes" dans l'index, donc je ne peux offrir qu'une manière indirecte. Par exemple, laissez-moi avoir un index partiel, donc "nombre de lignes" est différent de la table. Je peux vérifier les estimations avec EXPLAIN (bien sûr, vous devez répéter la clause where pour cela) vérifier le rows=66800
Dans Index Only Scan using
Me donne une idée du nombre de lignes dans cet index (en fait c'est rows=64910
Que vous pouvez obtenir par explain analyze
Ou simplement en exécutant count(1)
). Je ne trouve pas d'informations pertinentes dans pg_stats - il y a peut-être une formule ... ne sais pas.