OVH Cloud OVH Cloud

deadlock - comment obtenir des infos ?

4 réponses
Avatar
Cactus Corp.
Bonjour ,

Toutes les 2-3 heures un deadlock survient sur le serveur sql,
sur lequel est hébergée une application web.

Il s'agit d'un hébergement mutualisé.

Le message d'erreur reçu est :
"SQL Server TimeOut" ou, plus rarement :
"The transaction was deadlocked on lock resources with another
process and has been chosen as the deadlock victim"
mais je suppose que ces deux messages soient intimement liés.

Finalement, cette erreur ne survient jamais sur des sélections mais
toujours sur un update. En gros, une page est appelée, elle déclenche
sept 'SELECT' et un
'UPDATE news SET views = views + 1 WHERE id = xx'. C'est
sur cet appel que j'ai l'erreur. Je ne comprends pas vraiment où je
peux poser un deadlock... surtout s'il n'a lieu qu'environ toutes les
deux heures (la page fait environ 300 hits/heure).

Je souhaiterais donc trouver la source du problème dans le code
de l'application, s'il s'agit bel et bien de mon application.

question 1: j'en doute fortement mais à tout hasard, un deadlock
peut il être causé par un incident provenant d' une autre connexion
(un autre hébergé) ou une autre base de données ? par exemple,
peut il y avoir un deadlock au niveau de la libération des connexions
disponibles ou autres ressources partagées entre les différents
clients , autres que les données ?

question 2 : dans le cas où c'est mon application qui provoquerait
le deadlock, serait-il possible de connaître les requêtes en cours
lorsque le deadlock survient ? S'il ya des développeurs dans l'audience
je pensais à quelque chose du genre:

try
{
DBUtils.Executequery(sql);
}
catch
{
app.Log(DBUtils.GetCurrentSQLQueries());
}


Si vous avez des idées ...


antoine

4 réponses

Avatar
Fred BROUARD
Cactus Corp. a écrit:
Bonjour ,

Toutes les 2-3 heures un deadlock survient sur le serveur sql,
sur lequel est hébergée une application web.

Il s'agit d'un hébergement mutualisé.

Le message d'erreur reçu est :
"SQL Server TimeOut" ou, plus rarement :
"The transaction was deadlocked on lock resources with another
process and has been chosen as the deadlock victim"
mais je suppose que ces deux messages soient intimement liés.



non. Le deadlock est détecté et par défaut son temps d'attente est de 2
secondes, ce qui est loin des time out habituel au minimum sur 30.


Finalement, cette erreur ne survient jamais sur des sélections mais
toujours sur un update. En gros, une page est appelée, elle déclenche
sept 'SELECT' et un
'UPDATE news SET views = views + 1 WHERE id = xx'. C'est
sur cet appel que j'ai l'erreur. Je ne comprends pas vraiment où je
peux poser un deadlock... surtout s'il n'a lieu qu'environ toutes les
deux heures (la page fait environ 300 hits/heure).



Y a t'il pilotage d'une transaction ?
quele est le niveau d'isoaltion ?



Je souhaiterais donc trouver la source du problème dans le code
de l'application, s'il s'agit bel et bien de mon application.

question 1: j'en doute fortement mais à tout hasard, un deadlock
peut il être causé par un incident provenant d' une autre connexion
(un autre hébergé) ou une autre base de données ? par exemple,
peut il y avoir un deadlock au niveau de la libération des connexions
disponibles ou autres ressources partagées entre les différents
clients , autres que les données ?



non : les bases de données sont en principes isolées entre elles sauf à utiliser
des transactions interbases.


question 2 : dans le cas où c'est mon application qui provoquerait
le deadlock, serait-il possible de connaître les requêtes en cours
lorsque le deadlock survient ? S'il ya des développeurs dans l'audience
je pensais à quelque chose du genre:



ce n'est pas au niveau du code applicatif que l'on peut voir un deadlocck.
Il faut analyser le journal d'événement SQL qui vous indiquera les process et
les requêtes en jeu dans l'interblocage.


try
{
DBUtils.Executequery(sql);
}
catch
{
app.Log(DBUtils.GetCurrentSQLQueries());
}


Si vous avez des idées ...




Ron Talmage a fait un excellent travail sur le sujet. Essayer de trouver sur le
net les articles de Ron Talmage (en anglais).

A +


antoine





--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************
Avatar
Michel PRIORI
En tenant compte des remarques de Fred,
tu peux utiliser l'analyseur de profil (profiler) pour tracer ton pb.
Surtout si cela survient toutes les 3 heures.

bon courage

"Fred BROUARD" wrote:



Cactus Corp. a écrit:
> Bonjour ,
>
> Toutes les 2-3 heures un deadlock survient sur le serveur sql,
> sur lequel est hébergée une application web.
>
> Il s'agit d'un hébergement mutualisé.
>
> Le message d'erreur reçu est :
> "SQL Server TimeOut" ou, plus rarement :
> "The transaction was deadlocked on lock resources with another
> process and has been chosen as the deadlock victim"
> mais je suppose que ces deux messages soient intimement liés.

non. Le deadlock est détecté et par défaut son temps d'attente est de 2
secondes, ce qui est loin des time out habituel au minimum sur 30.

>
> Finalement, cette erreur ne survient jamais sur des sélections mais
> toujours sur un update. En gros, une page est appelée, elle déclenche
> sept 'SELECT' et un
> 'UPDATE news SET views = views + 1 WHERE id = xx'. C'est
> sur cet appel que j'ai l'erreur. Je ne comprends pas vraiment où je
> peux poser un deadlock... surtout s'il n'a lieu qu'environ toutes les
> deux heures (la page fait environ 300 hits/heure).

Y a t'il pilotage d'une transaction ?
quele est le niveau d'isoaltion ?


>
> Je souhaiterais donc trouver la source du problème dans le code
> de l'application, s'il s'agit bel et bien de mon application.
>
> question 1: j'en doute fortement mais à tout hasard, un deadlock
> peut il être causé par un incident provenant d' une autre connexion
> (un autre hébergé) ou une autre base de données ? par exemple,
> peut il y avoir un deadlock au niveau de la libération des connexions
> disponibles ou autres ressources partagées entre les différents
> clients , autres que les données ?

non : les bases de données sont en principes isolées entre elles sauf à utiliser
des transactions interbases.

>
> question 2 : dans le cas où c'est mon application qui provoquerait
> le deadlock, serait-il possible de connaître les requêtes en cours
> lorsque le deadlock survient ? S'il ya des développeurs dans l'audience
> je pensais à quelque chose du genre:

ce n'est pas au niveau du code applicatif que l'on peut voir un deadlocck.
Il faut analyser le journal d'événement SQL qui vous indiquera les process et
les requêtes en jeu dans l'interblocage.

>
> try
> {
> DBUtils.Executequery(sql);
> }
> catch
> {
> app.Log(DBUtils.GetCurrentSQLQueries());
> }
>
>
> Si vous avez des idées ...
>

Ron Talmage a fait un excellent travail sur le sujet. Essayer de trouver sur le
net les articles de Ron Talmage (en anglais).

A +

>
> antoine
>
>

--
Frédéric BROUARD, MVP SQL Server. Expert SQL / spécialiste Delphi, web
Livre SQL - col. Référence : http://sqlpro.developpez.com/bookSQL.html
Le site du SQL, pour débutants et pros : http://sqlpro.developpez.com
************************ www.datasapiens.com *************************




Avatar
Med Bouchenafa
L'article suivant devrait t'aider a isoler le probleme
http://support.microsoft.com/?idƒ2524

Bien cordialement
Med Bouchenafa


"Cactus Corp." wrote in message
news:

Bonjour ,

Toutes les 2-3 heures un deadlock survient sur le serveur sql,
sur lequel est hébergée une application web.

Il s'agit d'un hébergement mutualisé.

Le message d'erreur reçu est :
"SQL Server TimeOut" ou, plus rarement :
"The transaction was deadlocked on lock resources with another
process and has been chosen as the deadlock victim"
mais je suppose que ces deux messages soient intimement liés.

Finalement, cette erreur ne survient jamais sur des sélections mais
toujours sur un update. En gros, une page est appelée, elle déclenche
sept 'SELECT' et un
'UPDATE news SET views = views + 1 WHERE id = xx'. C'est
sur cet appel que j'ai l'erreur. Je ne comprends pas vraiment où je
peux poser un deadlock... surtout s'il n'a lieu qu'environ toutes les
deux heures (la page fait environ 300 hits/heure).

Je souhaiterais donc trouver la source du problème dans le code
de l'application, s'il s'agit bel et bien de mon application.

question 1: j'en doute fortement mais à tout hasard, un deadlock
peut il être causé par un incident provenant d' une autre connexion
(un autre hébergé) ou une autre base de données ? par exemple,
peut il y avoir un deadlock au niveau de la libération des connexions
disponibles ou autres ressources partagées entre les différents
clients , autres que les données ?

question 2 : dans le cas où c'est mon application qui provoquerait
le deadlock, serait-il possible de connaître les requêtes en cours
lorsque le deadlock survient ? S'il ya des développeurs dans l'audience
je pensais à quelque chose du genre:

try
{
DBUtils.Executequery(sql);
}
catch
{
app.Log(DBUtils.GetCurrentSQLQueries());
}


Si vous avez des idées ...


antoine




Avatar
Cactus Corp.
Merci pour vos réponses! Je vais tenter de suivre chaque direction.

(Fred)
non. Le deadlock est détecté et par défaut son temps d'attente est de 2
secondes, ce qui est loin des time out habituel au minimum sur 30.


Ah! Je croyais que ce timeout était le même que celui relatif à la connexion
elle-même. C'est bon à savoir !

Y a t'il pilotage d'une transaction ?
quele est le niveau d'isoaltion ?


Non, pas de mon propre chef en tous cas. Faudrait-il une transaction
simplement pour cette opération ?

(Michel)
tu peux utiliser l'analyseur de profil (profiler) pour tracer ton pb.
Surtout si cela survient toutes les 3 heures.


Je vais y jeter un oeil. Je ne sais pas encore l'utiliser mais s'il peut être
utile, je me lance!

(Med)
L'article suivant devrait t'aider a isoler le probleme
http://support.microsoft.com/?idƒ2524


Je risque d'avoir deux ou trois contraintes.. dans la mesure où je n'ai
pu reproduire ce problème sur mon réseau local, je n'ai pas accès aux
paramètres de démarrage du serveur pour accéder au journal d'erreurs
détaillées.

Je vais creuser.. merci encore !!

antoine, cc