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 :

performance trigger SQL2005


Sujet :

MS SQL Server

  1. #1
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 54
    Points
    54
    Par défaut performance trigger SQL2005
    Bonjour, je me poses certaines questions sur la capacite des triggers en SQL2005. Jai une appli qui peut envoyer jusqua 200 entrees a la fois dans une table (possedant un trigger). Je me demande si ca risque de planter (je ne sais pas si SQL Server cree une queue afin de traiter ces 200 executions en serie..ou peut-etre un autre mecanisme?). En passant, le code de mon trigger gere aussi les entrees dont le trigger ne se serait pas fait executer (ie. si un trigger ne sexecute pas lors dun insertion..le prochain trigger lancer devrait sen occuper). Ai-je raison de minquieter? je songe comme alternative d'executer un job a toutes les x seconde afin de traiter les nouvelles entrees.

    Merci infiniment

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 901
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 901
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    le but d'un déclencheur est de compléter le traitement de l'information dans le cadre de la modification des lignes généré par un ordre SQL de mise à jour.

    Dans ce sens, le trigger possède plusieurs particularités :
    1° il s'exécute au sein de la transaction qui est généré par l'ordre SQL de mise à jour
    2° il permet de connaître les valeurs avant et après de la modification à l'aide de pseudo table (inserted : nouvelles valeurs, deleted : anciennes valeurs)
    3° dans SQL Server, il est ensembliste, c'est à dire que si vous insérez, supprimez ou modifier 100 lignes d'un seul coup (par un seul ordre SQL) il n'y aura qu'un seul déclenchement de trigger.

    Dans un SGBD relationnel, tous les traitements sont fait de manière ensembliste. Il n'y a donc pas de question à se poser sur la façon (genre "file d'attente") dont le traitement est effectué. Au mieux, tout est fait en parallèle afin d'optimiser au maximum le traitement, dans sa durée. Ainsi on peut considérer (vue de l'esprit) que s'il y a 200 lignes à modifier, alors 200 threads peuvent le faire en parallèle...

    Tout traitement que vous ferez hors du trigger sera plus complexe, nettement plus couteux et susceptible de conduire à l'incohérence de votre base de données. En effet, sans l'aspect transactionnel, un partie de votre traitement peu s'exécuter, mais pas une autre, rendant la base incohérente.

    Lisez les articles que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/sqlaz/techniques/#L3
    http://sqlpro.developpez.com/cours/s...ransactsql/#L5

    A +

  3. #3
    Membre du Club
    Inscrit en
    Juin 2006
    Messages
    133
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 133
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup SQLPro, et pour la doc,

    Dans le cas ou mes 200 entrees ne sont pas d'un seul coup (ex: 200 ordres SQL differents dans une meme seconde), alors SQL Server generera 200 threads en parallele, si je te suis bien. C'est plus a ce niveau que je m'inquiete (combien faut-il de threads paralleles avant de s'inquieter d'un manque de ressources ou autres problemes potentiels...assumant un trigger de complexite moyenne?)

    J'assume que, dans un tel cas, les appels de trigger subsequent seront ignores...ce qui ne devrait pas m'affecter (considerant la capacite de gerance de mon code mentionne dans mon premier post)...tant et aussi longtemps qu'ils redeviennent fonctionnels lors de la liberation des ressources (svp me corriger si je n'ai pas raison ).

Discussions similaires

  1. [11g] Question de performance trigger/ PL
    Par kheironn dans le forum PL/SQL
    Réponses: 3
    Dernier message: 19/06/2014, 15h57
  2. [SQL2005][débutant]Trigger ou procédure stockée
    Par DebutantDotNet dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 03/10/2006, 11h15
  3. [sql2005]trigger qui s'éxecte sur toutes les lignes
    Par malikoo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 31/07/2006, 12h33
  4. [SQL2005] TRIGGER permettant de tracer les modifications
    Par zkittyz dans le forum Développement
    Réponses: 3
    Dernier message: 21/07/2006, 13h51
  5. trigger et performance.
    Par aline dans le forum Oracle
    Réponses: 12
    Dernier message: 22/02/2005, 09h45

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