Transaction (ID de Processus) a été bloquée sur | ressources de mémoire tampon communication avec un autre processus et a été choisie comme victime du blocage
J'ai un programme java qui met à jour une table dans MS SQL. Ce tableau est également accessible par les utilisateurs du web à travers un site web créé dans ColdFusion
Récemment, j'ai été faire cette erreur lorsque la ligne:
sql_stmt.executeUpdate("update random_selection "
+ "set forecasted = 1 where "
+ " randnum = " + ora_rs.getString("RANDNUM")
+ " and quarter = " + quarter
+ " and ozip3 = " + ora_rs.getString("OZIP3"));
Le FC requête qui est erroring est :
<cfquery name="submit_forecast" datasource="ttmsdropper" username="#request.db_username#" password="#request.db_password#">
INSERT INTO forecast_entry
VALUES (<cfqueryparam value="#currentRecord[8]#">)
</cfquery>
Ce qui est à l'origine de cette erreur et comment puis-je résoudre ce problème?
Vous devez vous connecter pour publier un commentaire.
Un blocage se produit lorsque 2 processus essayez de frapper les mêmes données en même temps - à la fois avec une revendication d'égalité sur les données. C'est le plus commun quand il y a beaucoup de mise à jour/insertion d'activité (comme vous le décrivez). Le système de bd "choisit" une des transactions à être le "vainqueur".
Dans certains cas, les blocages pourraient être améliorés ou atténués par l'indexation, mais seulement lorsque sélectionne sont impliqués pour une bonne indexation de la stratégie pourrait améliorer sélectionnez la performance et de prendre le verrouillage de ligne plus efficace. Toutefois, dans le cas où le blocage est à venir à partir d'une insertion aux prises avec une mise à jour, l'indexation ne va PAS aider. En effet agressif de l'indexation pourrait dégrader la situation depuis l'index doivent être mis à jour avec les données des inserts ou des mises à jour.
Comment résoudre cela dépend fortement de votre système et de ce que vous essayez de faire. Vous devez soit réduire l'insertion/mise à jour de verrouillage ou de fournir plus rapides ou plus des ressources en quelque sorte. Le regroupement des inserts ensemble et le dosage entre eux, plus de proc ou la RAM (parfois - pas toujours), le regroupement, le fractionnement des tables et des données, le réglage de précision du parallélisme - tous ces éléments peuvent être des options viables. Et il n'y a aucune règle dure et rapide.
Si il n'y a jamais de mise à jour de la table ( insère uniquement ), alors vous pouvez essayer de changer sélectionne pour - sans serrure ou d'emballage sélectionnez dans cftransation readuncommited.
Que Mark a dit que c'est un DB d'erreur pas de ColdFusion et les serrures sont occuing. Si il y a de compliqué sélectionne et met à jour look ajouter des index pour l'ajout de la clause de colonnes.