Version de PostgreSQL:

old_snapshot_threshold

Configure la durée minimale d'utilisation d'une image sans risque d'erreur snapshot too old survenant lors de l'utilisation de l'image. Ce paramètre est configurable qu'au démarrage du serveur.

Au-delà de la limite, les anciennes données peuvent être immédiatement nettoyées. Ceci peut aider à empêcher la fragmentation dans le cas de snapshots qui restent utiliser sur une longue période. Pour empêcher des résultats incorrects suite au nettoyage des données qui auraient été visibles par l'image, une erreur est générée quand l'image est plus ancienne que cette limite et que l'image est utilisée pour lire un bloc qui a été modifié depuis la construction du snapshot.

Une valeur de -1 désactive cette fonctionnalité et est la valeur par défaut. Les valeurs utiles en production vont probablement d'un petit nombre d'heures à quelques jours. La configuration peut être indiquée en nombre de minutes et les petits nombres (tels que 0 ou 1min) sont seulement autorisés parce qu'ils pourraient être utiles pour des tests. Bien qu'une configuration aussi haute que 60d est autorisée, notez que dans de nombreux cas, une fragmentation extrême ou une réutilisation des identifiants de transaction pourrait survenir très rapidement.

Quand cette fonctionnalité est activée, l'espace libérée à la fin de la relation ne peut pas être rendu au système d'exploitation car cela supprimerait les informations nécessaires pour détecter la condition snapshot too old. Tout l'espace alloué pour une relation reste associé avec cette relation pour une réutilisation par cette relation sauf si elle est explicitement libérée (par exemple, avec VACUUM FULL).

Ce paramètre ne tente pas de garantir qu'une erreur sera générée sous quelques circonstances. En fait, si les résultats corrects peuvent être générés à partir (par exemple) d'un curseur qui a matérialisé un ensemble de résultat, aucune erreur ne sera renvoyée même si les lignes impactées dans la table de référence ont été nettoyées. Certaines tables ne peuvent pas être nettoyées tôt proprement, et donc ne seront pas affectées par ce paramètre, comme les catalogues systèmes. Pour ces tables, ce paramètre ne réduira pas la fragmentation et ne pourra être la raison d'une erreur snapshot too old lors de son parcours.

Recommandations [EN]

… or the length of the longest transaction you expect to run + 1 hour.

Commentaires