Select For UPDATE NOWAIT
est effectué sur une table de 20 procédés en parallèle
L'erreur ci-dessous est renvoyée par les 4 processus sur 20 (16 processus aboutissent)
SQL_UPDATE_ERROR- : SQL update error ORA-02049: timeout: distributed transaction
waiting for lock ORA-02063
Existe-t-il des paramètres d'Oracle, qui définissent le nombre de connexions à une table à l'aide d'une liaison de base de données?
L'ordre des étapes est sélectionné
Ce n'est pas nécessairement le nombre de transactions, mais le délai d'attente. Le paramètre distrubuted_lock_timeout
est défini sur 60 secondes par défaut. Le but de ce paramètre est d'éviter d'avoir distribué des transactions dans un état d'attente de longue date, tandis que quelque chose d'autre effectue des travaux sur cette rangée; La transaction attendra 60 secondes, puis Oracle le tue.
Vous pouvez modifier ce paramètre (nécessite un redémarrage d'instance) sur ce que vous voulez (en secondes).
Eu une solution. Augmentez la valeur des initiateurs et de reconstruire les indices aidés. Tableau accessible via db_link a Initirans = 1, entraînant trop d'ITL attend ~ 200 et la ligne verrouille attend ~ 100000.
Maintenant, la valeur initiatroise est multipliée à 20, entraînant une serrure sans ligne d'attente pour les transactions distribuées/simultanées.