Bonsoir,
J’ai récupéré une application de base de données mais j’ai remarqué un gros de souci de lock. En fait, J’ai une table SEQUENCE dans lequel j’ai deux colonnes IDProc Char(10) et Séquence BigInt. Une procédure stocké insert une ligne pour la création d'une clef composite. La clef Composite c’est
IDProc+ Séquence
Example
Cette procédure stocké provoque de lock lors de la montée en charge c'est-à-dire lorsque plusieurs utilisateur essaye d’insérer en même temps ca provoque un lock et de plus la table grandit plus il y a des problèmes car
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 IDProc Séquence AAAAA 1 AAAAA 2 BBBBB 1 BBBBB 2 AAAAA 3 BBBBB 3 CCCCC 1
Example de memoire de la procédure
Comme vous pouvez le deviner ca provoque énormément de lock lorsque il y’a beaucoup d’utilisateurs et table grossi énormément donc ça devient de plus en plus long et plus en plus problématique.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 Create proc GenerateNextProcIDProc @IDProc char(10), @Keys varhcar(20) out As Declare @MaxValue char(10) Begin trans Select @MaxValue = max(Séquence) From SEQUENCE with(rowlock,Xlock) Where IDProc=@ IDProc If(@MaxValue is not null ) Begin Set @Keys = @IDProc +cast(@MaxValue +1 as varchar) Insert SEQUENCE values(@IDProc, (@MaxValue +1) End Else Begin . End Select @Keys Commit
Alors je recherche des idées pour réécrire cette procédure.
Si vous pouviez m’aider et me donner des conseils ce serait une aide précieuse.
Merci d’avance de votre aide.
Partager