|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Bonjour
Je fais mes premiere tentative d'usage d'un trigger ett il me semble avooir reussi a creer un DeadLock Toute les tables de la DB intervenant dans le trigger son inaccessible depuis SSMS (Querry s'execute sans fin) Pas de problème pour les autres tables - Est il possible de debuguer un triger ? - Peut on savoir s'il s'est exectuté ou s'il a généré un probleme Voici la Syntaxe de mon Trigger Code :
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() David BARBARINExpert SQL Server Inscription : août 2005 Messages : 3 723 ![]() |
Bonjour,
Oui vous pouvez utiliser le profiler pour votre déboggage avec les événements qui concernent l'éxecution de votre code + deadlock. Locks : Deadlock Locks : Deadlock chain TSQL: StmtCompleted SP : Completed ... ++ |
|
00
|
|
|
#3 |
![]() ![]() ![]() Frédéric BROUARDExpert SGBDR & SQL Inscription : mai 2002 Messages : 10 953 ![]() |
Postez le code de vos proc :
Clark.dbo.sp_DoTotal Clark.dbo.sp_ClarkMail 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 * * * * * |
|
00
|
|
|
#4 | |||
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Citation:
Je n'ai pas acces au server ce matin je les posterai cet apres-midi Hier j'ai fini par stopper le service MS Sql pour le relancer (il prenait 100% du CPU) J'ai donc supprimé le trigger et ajouté l'appel des deux procedures stockées depuis l'application et ca ne pose pour le moment pas de souci ? Ce que je soupconne c'est que l'application genere en boucle une suite d'insert unitaire pour chaque record a inserer dans la table Code :
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|||
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() |
Un déclenchement en boucle infini de vos TRIGGERS semble plus probable...
A voir avec le code de vos SP... |
|
|
00
|
|
|
#6 | ||||||
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Bonjour
Merci de votre aide Voici le code des SP Mais j'ai aussi contaté que le trigger je j'avais mis en place a une petite nuance de code qui peut etre de taille... Ca peut expliquer la boucle ? J'avais écris : (sans les point virgule à la fin des deux EXEC) Code :
Code :
Code :
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
||||||
|
|
00
|
|
|
#7 | ||
|
Membre Expert
![]() |
Avez vous d'autres TRIGGERS ? Sur BakMove par exemple?
Vos sous requètes avec les IN m'ont l'air un peu lourdes! ![]() Code :
|
||
|
|
00
|
|
|
#8 |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Aucun autre trigger !
Un peu lourdes : Qu'est ce que ca a de lourd ? C'est pas tres sorcier et cette table ne contient et ne contiendra que qq centaines de records !!
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
00
|
|
|
#9 | |||||||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Bonjour,
L'appel à msdb.dbo.sysmail_start_sp est inutile. Je ne sais pas quel est l'effet de l'appel à plusieurs reprises ... La requête pour l'envoi de mail : Code :
Tu as de la chance d'être sous SQL Server 2008, autrement, scan de table Ça fonctionne assez bien donc, mais si tu écris : Code :
WHERE DATE BETWEEN CAST(GETDATE() AS date) AND CAST(DATEADD(day, 1, GETDATE()) AS date) Cela dit je ne crois pas que ce soit l'origine de ton problème de deadlocks. Cela explique par contre le CPU, puisque la résolution de deadlocks coûte assez cher en CPU. Au passage, vire les crochets, ils ne servent à rien à part alourdir le texte de la requête. Ils servent aux gens qui ne respectent pas les règles de nommage SQL (en mettant des espaces ou des caractères de ponctuation dans les noms des objets ou des colonnes). Tu peux changer l'UPDATE en : Code :
Code :
Pour sp_DoTotal, le BEGIN au milieu de la procédure est inapproprié, malheureusement SQL Server le compile quand même ... Code :
Citation:
On ne dit pas record ou enregistrement, on dit row ou ligne Fais-toi une trace au Profiler en choisissant uniquement l'événement Deadlock Graph : - Sous SSMS, Outils > SQL Profiler - Connectes-toi à l'instance à surveiller - Coches la case "Sauvegarder dans un fichier" - Bascules dans l'onglet "Evénements" - Décoches toutes les cases les plus à gauche - Coches "Afficher tous les événements" - Coches uniquement, sous la catégorie "Locks" l'événement "Deadlock Graph" - Cliques "Exécuter" Dès qu'un deadlock va se produire, une ligne va s'afficher dans la trace. Si tu cliques sur celle-ci, un graphe va apparaître dans la partie inférieure du Profiler, te donnant des indications sur l'origine du deadlock. Tu peux poster le graphe sur le forum @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|||||||||
|
00
|
|
|
#10 | |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Citation:
Je viens d'essayer de l'enlever et l'envoi de mail ne marche plus ! Il n'est pas impossible que ce soit lié au fait que je travaille avex Xpress et que dans ce cas le service mail doit etre démaré explicitement ! Car c'est depuis que j'ai ajouté cette instruction que mes envois fonctionnenent avec Xpress Sinon il me dit "mail queued" sans plus
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
|
00
|
|
|
#11 |
|
Membre Expert
![]() Inscription : octobre 2007 Messages : 3 937 ![]() |
Bonsoir Elsuket
J'ai lu ton article concernant le SARGable, Si je comprends en gros ce que tu explique tu veux dire Que dans ce cas ci Code :
WHERE CAST(DATE AS date) = CAST(GETDATE() AS date) Alors qu'ici Code :
WHERE DATE BETWEEN CAST(GETDATE() AS date) AND CAST(DATEADD(day, 1, GETDATE()) AS date) Mais je ne suis pas certain que le gain soit vraiment signifiant ?
__________________
« Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain) |
|
|
00
|
|
|
#12 | ||||
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
Citation:
Le cast se fait une fois pour la définition de l'intervalle et les valeurs de la colonne date sont évaluées a chaque ligne par rapport a l'intervalle défini, ce qui en théorie allège le process. Désolé de chipoter. Citation:
Le gain n'est donc pas énorme, mais ma table très est petite (quelques milliers de lignes). Que te donne la requête suivante : Code :
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
||||
|
00
|
|
|
#13 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
Bonjour
Peut-être que celui-ci, également écrit par Elsuket, concernant les deadlocks pourra aussi t’intéresser |
|
|
00
|
|
|
#14 |
![]() ![]() ![]() Nicolas SouquetAdministrateur de base de données Inscription : janvier 2005 Messages : 4 667 ![]() |
'M'en rappelais pas de celui-là ... je prends zéro
Merci aieeeuuuuu ! @++
__________________
En bases de données relationnelles SQL, il n'y a ni tableaux, ni enregistrements, ni champs: il y a des tables, des lignes et des colonnes. Blog | Profil| Consulter ou télécharger les fichiers d'aide de SQL Server, des versions 2000 à 2012 |
|
00
|
|
|
#15 |
|
Membre Expert
![]() ![]() Inscription : janvier 2010 Messages : 1 084 ![]() |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com