Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server
MS SQL-Server Forum Microsoft SQL-Server. Avant de poster -> FAQ SQL-Server, Tutoriels SQL-Server
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 23/03/2011, 10h51   #1
Membre régulier
 
Avatar de stephane.julien
 
Inscription : septembre 2007
Messages : 339
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : septembre 2007
Messages : 339
Points : 92
Points : 92
Par défaut Transaction READ COMMITED bloque UPDATE sur même table

Bonjour,

J'ai plusieurs transactions ouvertes en niveau READ COMMITED. J'aimerais faire un update de tuples différents sur la même table, et la première transaction bloque la deuxième.

Je pensais que le niveau de blocage était au niveau ROW et pas au niveau TABLE, mais ça ne semble pas être le cas.

Y a-t-il moyen de mettre le verrou au niveau ROW ? Est-ce une configuration de table, de base de donnée, de moteur ou de transaction ?

Merci d'avance de votre aide !
stephane.julien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 11h27   #2
Membre régulier
 
Avatar de stephane.julien
 
Inscription : septembre 2007
Messages : 339
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : septembre 2007
Messages : 339
Points : 92
Points : 92
Le blocage au niveau TABLE (ou PAGE) est uniquement pour la commande UPDATE. La commande INSERT ne bloque que les rows qu'elle insère.
stephane.julien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/03/2011, 12h04   #3
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
Citation:
Envoyé par stephane.julien Voir le message
Bonjour,

J'ai plusieurs transactions ouvertes en niveau READ COMMITED. J'aimerais faire un update de tuples différents sur la même table, et la première transaction bloque la deuxième.
ce qui est logique et normal dans certains cas.
Citation:
Je pensais que le niveau de blocage était au niveau ROW et pas au niveau TABLE, mais ça ne semble pas être le cas.
table ? Non, rarement. Page le plus souvent.
Citation:

Y a-t-il moyen de mettre le verrou au niveau ROW ? Est-ce une configuration de table, de base de donnée, de moteur ou de transaction ?
Oui, mais c'est toujours risqué. M'est avis que vos transactions sont mal écrites....
Postez les SVP.
Néanmoins vous pouvez imposez le type de verrous par objet avec ALTER INDEX (même sur une table)
Ou alors par requête avec un hint du genre ROW LOCK.
Citation:

Merci d'avance de votre aide !
A +
__________________
Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/06/2011, 13h52   #4
Membre régulier
 
Avatar de stephane.julien
 
Inscription : septembre 2007
Messages : 339
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : septembre 2007
Messages : 339
Points : 92
Points : 92
Le hint du genre ROW LOCK n'étant pas sûr, j'ai testé la variante ALTER INDEX ALLOW PAGELOCK=false, et ça fonctionne.

La manière dont j'ai écrit mes transactions ne peut être changée. Par contre, il m'arrive encore sporadiquement d'avoir des interblocages qui sont dus à la suite d'exécutions de requêtes. Je ne peux rien faire contre ceux-ci. Je les catch donc dans l'application et relance la transaction. Après 5 essais je lance une erreur d'application.

Merci pour l'aide !
stephane.julien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h32.


 
 
 
 
Partenaires

Hébergement Web