PostgreSQL La base de donnees la plus sophistiquee au monde.

Forums PostgreSQL.fr

Le forum officiel de la communauté francophone de PostgreSQL

Vous n'êtes pas identifié(e).

#1 18/04/2019 09:24:41

pitpoule
Membre

Impact du nombre de tables sur les performances globales

Bonjour,

Est ce que le nombre de tables présentes dans une base peut affecter les performances globales ? Quand je parle d'un grand nombre, c'est plusieurs dizaines de milliers.

Merci

Hors ligne

#2 18/04/2019 10:29:27

rjuju
Administrateur

Re : Impact du nombre de tables sur les performances globales

Bonjour,



Cela peut impacter les performances effectivement.  Le premier problème qui risque d'arriver est une consommation de mémoire excessive si vous utilisez un pooler de connexion (ou des connexion persistentes), du fait que chaque connexion finira par avoir un cache de toutes les tables de la base;

Hors ligne

#3 18/04/2019 11:48:01

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

rjuju a écrit :

Bonjour,



Cela peut impacter les performances effectivement.  Le premier problème qui risque d'arriver est une consommation de mémoire excessive si vous utilisez un pooler de connexion (ou des connexion persistentes), du fait que chaque connexion finira par avoir un cache de toutes les tables de la base;

C'est intéressant... parce qu'effectivement, on utilise un pooler de connexion (pgbouncer)

Hors ligne

#4 19/04/2019 17:10:48

genamiga
Membre

Re : Impact du nombre de tables sur les performances globales

Plusieurs dizaines de milliers de tables...c'est énorme.

Je suis curieux de savoir...il y a quoi dans la base ?

Il n'y aurait pas un soucis de modélisation/analyse...

Dernière modification par genamiga (19/04/2019 17:28:32)

Hors ligne

#5 19/04/2019 19:56:32

rjuju
Administrateur

Re : Impact du nombre de tables sur les performances globales

C'est possible, mais pas systématique.  Cela peut être un système multi-tenant ave un découpage par schéma par exemple, et/ou une ou plusieurs tables partitionnées avec beaucoup de partitions.  Le fait est que postgres 12 aura énormément d'optimisations afin de conserver des performances raisonnables avec un très grand nombre de partititions, justement parce que ce besoin est fréquent.

Hors ligne

#6 23/04/2019 09:33:15

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

Oui, c'est à peu près cela, on est dans un contexte multi tenant, on a des centaines de clients, des tables de travails,..... et on ne supprime jamais les données des clients mêmes s'ils ne sont plus chez nous. La modélisation est correcte de mon point de vue mais la question du sharding se pose sérieusement en interne si vous voulez tout savoir smile

Hors ligne

#7 23/04/2019 12:05:32

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

Aujourd'hui, la table pg_class fait presque 800M.

Faut'il envisager des reindexations/vacuum fulls des tables systèmes ?

Hors ligne

#8 23/04/2019 12:08:02

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

En effet, ça devrait être envisageable....

toto=# SELECT * FROM pgstattuple('pg_catalog.pg_class');
table_len | tuple_count | tuple_len | tuple_percent | dead_tuple_count | dead_tuple_len | dead_tuple_percent | free_space | free_percent
-----------+-------------+-----------+---------------+------------------+----------------+--------------------+------------+--------------
799973376 |       91327 |  16253259 |          2.03 |           197115 |       33824913 |               4.23 |  724299904 |        90.54

Hors ligne

#9 23/04/2019 15:15:40

gleu
Administrateur

Re : Impact du nombre de tables sur les performances globales

Vous utilisez beaucoup de tables temporaires ?


Guillaume.

Hors ligne

#10 24/04/2019 08:51:32

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

gleu a écrit :

Vous utilisez beaucoup de tables temporaires ?

Oui... à haute dose.

Hors ligne

#11 24/04/2019 10:13:04

rjuju
Administrateur

Re : Impact du nombre de tables sur les performances globales

Alors oui, un vacuum full des tables systèmes s'impose, et des vacuum très réguliers pour éviter que la situation ne se reproduise.

Hors ligne

#12 24/04/2019 10:35:42

gleu
Administrateur

Re : Impact du nombre de tables sur les performances globales

Pour expliquer, la création de la table temporaire crée une ligne dans pg_class, autant de lignes dans pg_attribute que de colonnes dans la table temporaire, et potentiellement d'autres catalogues systèmes. Et dès la destruction de cette table, ces lignes sont supprimées. Donc si vous utilisez beaucoup les tables temporaires, il y a de forte chance que cela fragmente beaucoup les catalogues systèmes.


Guillaume.

Hors ligne

#13 24/04/2019 12:02:25

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

Quel est l'impact d'un vacuum full sur une table système ? Est ce que ça va bloquer toute l'activité de la base ?

Hors ligne

#14 24/04/2019 12:54:59

rjuju
Administrateur

Re : Impact du nombre de tables sur les performances globales

Tout dépend de la table système et de l'activité.  Pour pg_class et pg_attribute, comme cela empêchera l'accès à ces tables durant le temps du VACUUM FULL, cela empêchera au minimum :


- toute nouvelle connexion
- toute requête accédant à une table n'ayant pas été accédée auparavant au sein de la même sessions (car il n'y a pas d'entrée en cache pour cette table)


Cela dit, même avec plusieurs dizaine de milliers de tables, le VACUUM FULL de pg_class et pg_attribute devrait quand même être très rapide.

Hors ligne

#15 26/04/2019 09:57:58

pitpoule
Membre

Re : Impact du nombre de tables sur les performances globales

Le blocage de nouvelles connexions, c'est quand même assez pénalisant....

Est ce que si je laisse en l'état, je fonce droit vers des ennuis ? Je ne vous cache pas que faire une action comme cela sur des tables systèmes ne m'enchante guère....c'est pas que je n'ai pas confiance en PG, mais s'il y a un problème, c'est toute la base qui risque de se trouver par terre...

Du coup, une nouvelle question m'est venue: est ce qu'il est possible de backuper et surtout restaurer la table pg_class ?

Hors ligne

#16 26/04/2019 15:04:32

rjuju
Administrateur

Re : Impact du nombre de tables sur les performances globales

Oui, enfin on parle quand même d'un délai de l'ordre de quelques dizaines ou centaines de millisecondes.


En cas de problème, tout ne se retrouve pas par terre.  Il suffit d'annuler la requête (et la transaction), et tout reprend comme avant.



On ne peut pas backuper la table pg_class, elle n'est que la représentation des objets créés.  Elle est donc mise à jour avec chaque commande DDL effectuée.

Hors ligne

Pied de page des forums