none
Lancement de plusieurs traitements en meme temps RRS feed

  • Question

  • Bonjour , j'ai un traitement SQL tres lourd , j'ai pensé alors diviser la table principale en petites tables et lancer plusieurs petits traitements en meme temps  ceci permettra de reduire le temps global 

    j'ai donc ecrit une procedure qui genere les chaines SQL qu'il faut type   STRSQL n = 'EXEC Traitement  n  ' 

    dans un curseur qui lance l'execution  EXECUTE  (@STRSQL)  

    Sauf que les traitements SQL ne se lancent pas en meme temps le curseur attend que SQTRSQ1 s'execute pour passer a SQTRSQL2 .....

    Ce qui n'est pas le but voulu  , y a t il un moyen de generer automatiquement ces requetes et de les lancer des qu'elles sont pretes sous forme de connexions SQL differentes ....???

     

    Merci 

    hichem chebil

    lundi 26 décembre 2011 21:06

Réponses

  • Bonjour

    Pour faire de l'asynchrone, pas de miracle sous SQL Server il faut des connexions distinctes...

    • Soit vous avez plusieurs Jobs sous l'Agent SQL. C'est un traitement lourd ca vaut la peine de le traiter comme celà.
    • Sinon c'est le Service Broker qui pourra être utilisé.

    Je vous recommande plustôt la première méthode qui est de loin la plus simple.

    Apres celà va casser la logique de votre code comme je le comprends... Créer une table (temporaire ?) dans laquelle placer les données du curseur, rajouter une colonne de type status pour indique si un traitement est en cours et le cas échéant quel process l'execute.

    Et vous avez qu'à piocher dans cette tache la première ligne non traité et enc boucle dans plusieurs tâches en parallele.

    Sinon comme Patrice le préconise, il serait intéressant de s'attaquer à la source du problème si celà est possible.

    Bonne journée


    Christian Robert - MVP SQL Server - Microsoft Certified Master - SQL Server 2008
    Blog : http://www.sqlnco.ch / http://blogs.codes-sources.com/christian/
    Groupe des Utilisateurs Francophone de SQL Server : http://www.guss.fr
    mardi 27 décembre 2011 10:35

Toutes les réponses

  • Bonjour,

    Je suggérerais plutôt de poster sur le problème original plutôt que sur la façon dont vous envisagez actuellement de le résoudre. Voir éventuellement http://msdn.microsoft.com/fr-fr/library/ms190787.aspx (tables partitionnées).

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    lundi 26 décembre 2011 21:45
  • Bonjour

    Pour faire de l'asynchrone, pas de miracle sous SQL Server il faut des connexions distinctes...

    • Soit vous avez plusieurs Jobs sous l'Agent SQL. C'est un traitement lourd ca vaut la peine de le traiter comme celà.
    • Sinon c'est le Service Broker qui pourra être utilisé.

    Je vous recommande plustôt la première méthode qui est de loin la plus simple.

    Apres celà va casser la logique de votre code comme je le comprends... Créer une table (temporaire ?) dans laquelle placer les données du curseur, rajouter une colonne de type status pour indique si un traitement est en cours et le cas échéant quel process l'execute.

    Et vous avez qu'à piocher dans cette tache la première ligne non traité et enc boucle dans plusieurs tâches en parallele.

    Sinon comme Patrice le préconise, il serait intéressant de s'attaquer à la source du problème si celà est possible.

    Bonne journée


    Christian Robert - MVP SQL Server - Microsoft Certified Master - SQL Server 2008
    Blog : http://www.sqlnco.ch / http://blogs.codes-sources.com/christian/
    Groupe des Utilisateurs Francophone de SQL Server : http://www.guss.fr
    mardi 27 décembre 2011 10:35
  • Bonjour,Les transactions SQL sont faites aussi pour gérer ces genres de mécanismes.

    Je te conseille de voir  la gestion de tes transactions si tu les as utilisées mais aussi la concurrences.

    CDL


    So B
    jeudi 5 janvier 2012 08:16
  • Comment peux tu etre plus explicite !stp
    vendredi 6 janvier 2012 22:25