deadlock_timeout
(integer
)
Durée totale d'attente d'un verrou avant de tester une condition de
verrou mort (deadlock). Le test de
verrou mort est très coûteux, le serveur ne l'effectue donc pas à
chaque fois qu'il attend un verrou. Les développeurs supposent (de
façon optimiste ?) que les verrous morts sont rares dans les
applications en production et attendent simplement un verrou pendant
un certain temps avant de lancer une recherche de blocage. Augmenter
cette valeur réduit le temps perdu en recherches inutiles de verrous
morts mais retarde la détection de vraies erreurs de verrous morts. Si
cette valeur est indiquée sans unité, elle est comprise comme un
nombre de millisecondes. La valeur par défaut est une seconde
(1s
), ce qui est probablement la plus petite valeur
pratique. Sur un serveur en pleine charge, elle peut être augmentée.
Idéalement, ce paramétrage doit dépasser le temps typique d'une
transaction de façon à augmenter la probabilité qu'un verrou soit
relâché avant que le processus en attente ne décide de lancer une
recherche de verrous morts. Seuls les superutilisateurs et les utilisateurs
disposant des droits SET
adéquats peuvent
modifier cette configuration.
Quand log_lock_waits est configuré, ce paramètre
détermine aussi la durée d'attente avant qu'un message ne soit
enregistré dans les journaux concernant cette attente. Pour comprendre
ces délais de verrouillage, il peut être utile de configurer
deadlock_timeout
à une valeur extraordinairement
basse.
max_locks_per_transaction
(integer
)
La table des verrous partagés trace les verrous sur
max_locks_per_transaction
*
(max_connections +
max_prepared_transactions) objets (c'est-à-dire
des tables) ; de ce fait, au maximum ce nombre d'objets distincts
peuvent être verrouillés simultanément. Ce paramètre contrôle le nombre moyen
de verrous d'objets alloués pour chaque transaction ; des
transactions individuelles peuvent verrouiller plus d'objets tant
que l'ensemble des verrous de toutes les transactions tient dans la table
des verrous. Il ne s'agit pas
du nombre de lignes qui peuvent être verrouillées ; cette valeur
n'a pas de limite. La valeur par défaut,
64, s'est toujours avérée suffisante par le passé, mais il est
possible de l'augmenter si des clients accèdent à de nombreuses
tables différentes au sein d'une unique transaction, par exemple une requête
sur une table parent ayant de nombreux enfants.
Ce paramètre ne peut être initialisé qu'au lancement du serveur.
Lors de l'exécution d'un serveur en attente, vous devez configurer ce paramètre à la même valeur ou à une valeur plus importante que sur le serveur primaire. Sinon, des requêtes pourraient ne pas être autorisées sur le serveur en attente.
max_pred_locks_per_transaction
(integer
)
La table de verrous de prédicat partagée garde une trace des
verrous sur
max_pred_locks_per_transaction
* (max_connections + max_prepared_transactions) objets (autrement dit
tables). Du coup, pas plus que ce nombre d'objets distincts
peut être verrouillé à un instant. Ce paramètre contrôle le
nombre moyen de verrous d'objet alloués pour chaque
transaction ; les transactions individuelles peuvent
verrouillées plus d'objets à condition que les verrous de toutes
les transactions tiennent dans la table des verrous. Ce n'est
pas le nombre de lignes qui peuvent être
verrouillées, cette valeur étant illimitée. La valeur par défaut,
64, a été généralement suffisante dans les tests mais vous
pouvez avoir besoin d'augmenter cette valeur si vous avez des
clients qui touchent beaucoup de tables différentes dans une
seule transaction sérialisable. Ce paramètre n'est configurable
qu'au lancement du serveur.
max_pred_locks_per_relation
(integer
)
Cela contrôle le nombre de pages ou de lignes d'une unique relation
peut verrouiller au niveau du prédicat avant que le verrou soit promis
pour couvrir l'intégralité de la relation. Des valeurs supérieures ou
égales à zéro signifient une limite absolue, alors que des valeur
négatives signifient max_pred_locks_per_transaction par la valeur absolue de
ce paramètre. La valeur par défaut est -2, ce qui permet de conserver
le comportement des anciennes version de
PostgreSQL.
Ce paramètre peut uniquement être modifié dans le fichier
postgresql.conf
ou indiqué sur la ligne de
commande.
max_pred_locks_per_page
(integer
)
Ceci contrôle combien de lignes sur une seule page peuvent être
verrouillées avec prédicat avant que le verrou ne soit promu pour
couvrir la page complète. La valeur par défaut est 2. Ce paramètre
peut seulement être configuré dans le fichier
postgresql.conf
ou sur la ligne de commande du
serveur.