IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Locks sur un Insert


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut Locks sur un Insert
    Bonjour,

    Je suis sous SQL Server 2000, j'ai besoin dans mon developpement d'executer l'instruction suivante:

    Insert Into ContractPositionDetails(ContractPositionId, SecurityId, Quantity, Price, PriceCurrencyId, PriceEUR, PriceDate, Evaluation,
    EvaluationEUR, AveragePriceEUR)
    Select ContractPositions.ContractPositionId, Securities.SecurityId, BufferSwlInContractPositionDetails.Quantity, BufferSwlInContractPositionDetails.Price,
    'EUR', BufferSwlInContractPositionDetails.Price, BufferSwlInContractPositionDetails.PriceDate,
    BufferSwlInContractPositionDetails.Evaluation, BufferSwlInContractPositionDetails.Evaluation,
    BufferSwlInContractPositionDetails.AveragePrice
    From ((BufferSwlInContractPositionDetails Inner Join Contracts On Contracts.ContractCompanyReference = BufferSwlInContractPositionDetails.ContractCompanyReference)
    Inner Join ContractPositions On ContractPositions.ContractId = Contracts.ContractId And ContractPositions.SituationDate = BufferSwlInContractPositionDetails.SituationDate)
    Inner Join Securities On Securities.IsinCode = BufferSwlInContractPositionDetails.SecurityCode
    Where ContractPositions.lotId = @p_intSittingId

    La plupart du temps, cela s'execute sans probleme mais parfois cela me crée des locks en Mode X ou IX. J'en ai un de type KEY, plein d'autre de type PAG et un de type TAB.
    J'ai crée des index sur les champs de la partie WHERE.
    Connaissez vous des pistes pour resoudre ce probleme car j'ai l'impression que c'est la requete elle- meme qui se bloque!

    Merci d'avance,

    Knightrider

  2. #2
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    t'aurais pas des triggers sur tes tables ?
    ou des contraintes ?
    Errare humanum est, perseverare diabolicum (Sénèque)

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    J'ai une contrainte sur ContractPositionId et SecurityId sur la table ContractPositionDetails. Il y a une autre contraite sur ContractId dans ContractPositions.
    En fait cette requete est contenue dans une procedure stockée execute dans un lot DTS donc la requete est execute à travers une transaction Read Committed.
    J'ai essaye de définir le niveau de Lock sur la table ContractPositionDetails avec With(ROWLOCK) sans résultat, j'ai toujours des PAGLOCK.

  4. #4
    Membre éprouvé
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Août 2006
    Messages
    730
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 730
    Points : 923
    Points
    923
    Par défaut
    essaies avec NOLOCK directement et regarde
    Errare humanum est, perseverare diabolicum (Sénèque)

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    Je viens de trouver que ma requete est bloque sur ContractPositions.LotId = @p_intSittingId. En fait la requete Select bloque à cause de cette instruction.
    Par contre si je l'execute lorsque je suis en dehors de mon lot DTS tout fonctionne. Ce qui est bizarre ma jointure sur le champ SituationDate et ContractId sur la table ContractPositions ne peut renvoyer qu'une seule ligne.
    Je comprend donc pas comment ContractPositions.LotId = @p_intSittingId peut me bloquer ma requete ?

  6. #6
    Membre à l'essai
    Inscrit en
    Mars 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 29
    Points : 20
    Points
    20
    Par défaut
    En fait, le probleme ne venait pas de la ligne de mon precedent message.
    En fait, j'ai juste modifie l'ordre des clauses dans le where. Etrange mais mon probleme semble resolu ...

Discussions similaires

  1. Réponses: 2
    Dernier message: 21/01/2010, 08h50
  2. Probleme de lock sur un trigger after insert
    Par funboard dans le forum Oracle
    Réponses: 5
    Dernier message: 04/03/2009, 12h14
  3. Faire un Lock sur une table pendant l'exec d'un DTS
    Par Pete dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/03/2005, 14h17
  4. Evenement sur UPDATE, INSERT, DELETE
    Par papouAlain dans le forum Langage SQL
    Réponses: 6
    Dernier message: 23/12/2004, 14h58
  5. [LISTENER] sur l'insertion de cd
    Par divxdede dans le forum Multimédia
    Réponses: 2
    Dernier message: 03/07/2004, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo