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

Bases de données Delphi Discussion :

Pooling sur une table SQL


Sujet :

Bases de données Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut Pooling sur une table SQL
    Hi,

    Je dispose d'une série de 5 exécutables qui font du pooling sur une table. Chaque exécutable interroge à interval régulier d'une seconde cette table afin de vérifier si un enregistrement qui le concerne a été ajouté. Si c'est le cas l'exécutable lance un traitement approprié. La table est donc ouverte, interrogée puis refermée 5 fois par seconde au total ce qui a comme conséquence de mettre mon serveur SQL à genoux. Il faut dire que le serveur doit déservire complémentairement 60 utilisateurs. Le taux d'utilisation des processeurs sur mon serveur SQL avoisine les 90% quand mes exécutables tournent. Il retombe à 20% quand les exécutables sont arrêtés. Ceci donne une idée de l'ampleur du problème.

    Ma question est la suivante : y a t-il un moyen qui me permette d'être averti qu'un enregistrement a été ajouté à la table afin que mes exécutables ouvrent celle-ci uniquement si un enregistrement a été ajouté. Autrement dit, comment Delphi peut-il être averti d'un évènement INSERT dans une table SQL ?

    Merci pour vos avis éclairés.

    JJE


    Environnement :

    Delphi 6 (pour les exécutables)
    SQL Server 7
    Window 2000 Server
    Compaq Proliant 3000 bi-processeur Pentium III 600 MHz

  2. #2
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Bonjour,

    perso, je ne vois pas de solution. 5 requêtes par seconde 24/24, ça charge !

    Quel genre de traitement font tes 5 exécutables ?

    Si c'est des mises à jour de ta base SQL, tu as peut-être une solution avec les trigger et les procédures stockées...

    Si tu as les sources de tes exécutables, tu pourrais faire un client TCP/UDP que tu installes sur le PC de SQL, et qui setait invoqué par un trigger.,Ce client TCP/UDPi enverrait des trames sur un port que tu définis et qui serait "écouté" par tes 5 exécutables. Dès qu'une trame serait envoyée, tes 5 exécutables lanceraient leur requête.
    Une variante serait même que la trame contienne le résultat de la requête.

    Voilà, c'est peut-être le début d'une piste.

  3. #3
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut
    Bonjour Le Lézard,

    un client TCP/UDP que tu installes sur le PC de SQL, et qui setait invoqué par un trigger
    Ta solution m'intéresse ! Peux-tu développer la manière dont le trigger pourrait invoquer le client ?
    Que mes exécutables communiquent par un port TCP ne poserait effectivement pas de problème mais par quel mécanisme le trigger pourrait-il notifier un évènement au client (l'évènement étant l'ajout d'un enregistrement) ?

    Merci.

    JJE

  4. #4
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Yo JJE !

    Bon, je t'ai dit que c'était le début d'une piste.

    Maintenant, il faut chercher un peu, ce que j'ai fait :
    Un trigger est une de procédure stockée qui est déclenchée sur un événement particulier dans une table.
    Je te laisse donc chercher dans la doc de MS-SQL comment on les déclare.

    Effectivement, après une recherche assez poussée, je n'ai pas trouver de commande T-SQL du type "Shell_Exec()". Ca aurait été pratique pour exécuter un programme WIN332. Par contre, j'ai découvert les procédures stockées étendues.

    Ces SP particulières (xp_xxx) sont déclarées dans la bd Master, et sont des DLL de type ODS (Open Data Service) spécifiques à MS-SQL Server.

    Il suffit donc d'écrire une DLL ODS qui contient une fonction qui envoie une trame TCP/UDP, et ajouter une procédure stokée étendue avec la commande T-SQL "sp_addextendedproc".
    Tu crées donc une XP xp_invoctrame, et tu appelles cette xp depuis le trigger

    J'ai trouvé un bon article (en anglais ) qui explique comment écrire une DLL ODS avec Delphi. Je t'invite donc à regarder ça de plus près...
    Et voici les sources uptodate.

    Et surtout, tiens-nous au courant de la suite, ce genre de développement aurait sa place dans la rubrique Tutoriels !

  5. #5
    Membre régulier
    Inscrit en
    Avril 2002
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 187
    Points : 90
    Points
    90
    Par défaut
    Mon nouvel ami le Lézard,

    Tu m'as donné LA solution ! Le code que tu m'as indiqué fonctionne, je l'ai testé. Demain je vérifie si la dll contenant les procédures étendues peut inclure un socket IP. Si ça marche, j'adapte le tout à mon application.

    Si le tout fonctionne comme je l'espère, il ne me restera plus qu'une chose à faire... me prosterner devant ton génie : **

    Bien entendu je te tiens au courant de la suite de mes développements.

    Cordialement.

    Jean-Jacques.

  6. #6
    Membre régulier
    Homme Profil pro
    Chef de projet
    Inscrit en
    Juin 2004
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Chef de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2004
    Messages : 101
    Points : 122
    Points
    122
    Par défaut
    Citation Envoyé par Mon nouvel ami
    Bien entendu je te tiens au courant de la suite de mes développements.
    Je compte sur toi...

Discussions similaires

  1. Contrainte "unique" sur une table sql!
    Par nixmind dans le forum Administration
    Réponses: 9
    Dernier message: 30/05/2012, 08h39
  2. JCombobox sur une table sql
    Par ermite67 dans le forum NetBeans
    Réponses: 0
    Dernier message: 15/03/2011, 17h05
  3. KEEP pool sur une table volumineuse
    Par couak dans le forum Administration
    Réponses: 6
    Dernier message: 18/06/2009, 23h02
  4. Historisation des modifications effectuées sur une table SQL
    Par Drooxy dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 18/10/2007, 13h29
  5. Select via un dblink sur une table sql server
    Par Cathy dans le forum SQL
    Réponses: 11
    Dernier message: 06/08/2007, 19h10

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