Différence entre le facteur de remplissage de table et le facteur de remplissage d'index

16

Dans Postgres, on peut définir fillfactor pour un index ainsi qu'une table. Quelle est la différence? Comment décider des valeurs pour l'un ou l'autre. Quels sont les cas d'utilisation?

J'essaie de regrouper une relation spatiale sur un indice spatial. Il a quelques millions d'enregistrements. Les enregistrements sont mis à jour tout le temps, mais très peu de nouveaux sont créés quotidiennement.

Le cas d'utilisation est celui des requêtes de plage spatiale. Quelle sera une bonne valeur pour le facteur de remplissage de table et / ou le facteur de remplissage d'index?

S Shah
la source

Réponses:

12

À partir de la page de manuel CREATE TABLE (emphase ajoutée):

Le facteur de remplissage d' une table est un pourcentage compris entre 10 et 100. 100 (emballage complet) est la valeur par défaut. Lorsqu'un fillfactor plus petit est spécifié, les opérations INSERT ne regroupent les pages du tableau qu'au pourcentage indiqué; l'espace restant sur chaque page est réservé pour la mise à jour des lignes sur cette page. Cela donne à UPDATE une chance de placer la copie mise à jour d'une ligne sur la même page que l'original, ce qui est plus efficace que de la placer sur une autre page. Pour un tableau dont les entrées ne sont jamais mises à jour, un emballage complet est le meilleur choix, mais dans les tableaux fortement mis à jour, des facteurs de remplissage plus petits sont appropriés.

À partir de la page de manuel CREATE INDEX (emphase ajoutée):

Le facteur de remplissage d'un index est un pourcentage qui détermine à quel point la méthode d'index va essayer de compresser les pages d'index. Pour les arbres B, les pages feuilles sont remplies à ce pourcentage lors de la construction initiale de l'index, et également lors de l'extension de l'index à droite (plus grandes valeurs clés). Si les pages deviennent par la suite complètement pleines, elles seront divisées, entraînant une dégradation progressive de l'efficacité de l'index.Les arbres B utilisent un facteur de remplissage par défaut de 90, mais toute valeur comprise entre 10 et 100 peut être sélectionnée. Si la table est statique, alors fillfactor 100 est préférable pour minimiser la taille physique de l'index, mais pour les tables fortement mises à jour, un fillfactor plus petit est préférable pour minimiser le besoin de fractionnements de page. Les autres méthodes d'indexation utilisent fillfactor de manière différente mais à peu près analogue; le facteur de remplissage par défaut varie selon les méthodes.

stim
la source
1
Il est d'usage de mentionner la source d'un devis. Même si c'est facile à comprendre.
Erwin Brandstetter
ouais, bien sûr) oublie parfois ...
Désolé de vous harceler encore. Veuillez créer un lien vers la version actuelle du manuel (sauf si vous devez en adresser une en particulier). J'ai édité. Plus à ce sujet ici .
Erwin Brandstetter
Les liens sont à l'envers.
Dave Johansen
2
Re: "Si la table est statique, alors fillfactor 100 est préférable pour minimiser la taille physique de l'index, mais pour les tables fortement mises à jour, un fillfactor plus petit est préférable pour minimiser le besoin de fractionnements de page." Essayer de comprendre le contexte des «tableaux fortement mis à jour» - cela signifie-t-il un tableau avec des valeurs de ligne qui sont fortement mises à jour, ou peut-être cela pourrait-il également inclure des tableaux avec des lignes qui sont fréquemment insérées et / ou supprimées? Je voulais savoir si ma table, avec peu de modifications des valeurs de ligne mais des insertions et des suppressions étendues, pouvait bénéficier d'un facteur de remplissage inférieur sur son index principal (clé).
Reinsbrain