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 :

Performances temps d'insertions sql server


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Par défaut Performances temps d'insertions sql server
    Bonjour à tous,
    je réfléchis à l'optimisation en terme de performance d'une séquence d'insertion dans une base de données SQL server.
    Je me demande si les temps que j'ai sont trop élevés ou non.
    J'insère 100 enregistrements en 15 secondes.
    Est ce normal ? cela vous parait-il trop long ?

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Cela fait 15 ms par enregistrements, mais cela dépend le volume, le nombre d'index à mettre à jour, les triggers, en fait, non ce n'est pas si long que cela si tu as déjà quelques centaines de milliers d'engistrements ... par contre, si tu insères dans une table vide, cela peut sembler long, ... après tout dépend ton exigence, ... moi dans certains projets, je devais faire 5 insert, 5 update, 20 select, 5 delete en moins de 250 ms secondes, ce qui fait 10 ms par requête au maximum, ... avec MySQL ou Paradox, je n'ai jamais dépassé la milli seconde, mais j'avais un faible volume, avec InterBase que j'avais mal utilisé (les composants IB sont quelqu'un peu piègeur, le Prepare n'est pas automatique), avec SQL Server ou Oracle, je n'ai jamais eu de contrainte de temps aussi importante, juste, je devais faire un traitement insérant 800 000 enregistrements dans une table et 10 000 dans une autre, cela prenait 1h (l'analyse d'un fichier d'une centaine de Mo et la génération des requêtes ne prenant qu'une petite minute) ... surtout à cause de la lib lentissime (via Provider COM ... compteur manuel, d'ailleurs avec quelques astuces spéciques à cet lib) le traitement qui durait au début 12h, fut réduire à 1h), ce qui donne en fait 4 milli secondes par insert, donc par rapport à mes habitudes de faible volume avec MySQL, c'est lent ...
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre confirmé

    Inscrit en
    Août 2005
    Messages
    253
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 253
    Par défaut
    Bonjour

    Performance/rapidité dépend aussi du matériels utilisé.

    Ciao

  4. #4
    Membre éclairé Avatar de KRis
    Profil pro
    Inscrit en
    Avril 2002
    Messages
    232
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations forums :
    Inscription : Avril 2002
    Messages : 232
    Par défaut
    Merci pour vos réponses,
    en fait la table n'est pas vide, mais il ne s'agit pas d'un simple insert. c'est une procédure stockée qui fait quelques vérifications aussi.
    J'ai un axe de recherche, nous utilisons un transport soap en envoyant des array of string, integer à un serveur d'application.
    je me demande si il ne serait pas préférable d'envoyer des array of byte...

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 089
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 089
    Par défaut
    Effectivement, si tu as une architecture multi-tiers cela alourdi le traitement, et si tes insertions sont soumis à condition, il n'est donc pas surprenant que cela prenent du temps

    pour les array of byte ou array of string, vous avez votre propre couche bas niveau pour l'envoi du SOAP ? basé sur TCP\IP et SSH pour la connexion sécurisé, n'ayant utilisé SOAP que via des WebService et le composant HTTPRIO et https, les traitements du WS sont lent, donc je n'ai jamais cherché à savoir combien de temps cela prenait comme temps surtout que l'on attaque un serveur sur le web et non local
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  6. #6
    Membre Expert

    Profil pro
    Leader Technique
    Inscrit en
    Juin 2005
    Messages
    1 756
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Leader Technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 756
    Par défaut
    J'insère 100 enregistrements en 15 secondes
    Ca fait donc 150 ms par enregistrement.
    Personnellement j'arrive à insérer jusqu'à 20 000 enregistrements par secondes sur SQL Server.
    Pour moi c'est énorme !

    c'est une procédure stockée qui fait quelques vérifications aussi.
    J'ai un axe de recherche, nous utilisons un transport soap en envoyant des array of string, integer à un serveur d'application.
    je me demande si il ne serait pas préférable d'envoyer des array of byte...
    Effectivement, si vous le prenez comme ça, ça a de quoi être long.
    Il serait intéressant de mesurer précisémentles temps d'exécution de la procédure stockée, ainsi que les temps d'appels de la procédure. Ca peut se faire de la façon suivante : Lancer SQL Profiler sur le serveur, il permettra de mesurer les temps exécution de la SP. Ensuite tu mesures le temps d'écriture des enregistrements depuis le client.
    Si tu fais la différence des deux, ça donnera le d'invocation de la SP (temps d'exécution du serveur d'appli compris).

    Mais je serais prêt à parier que le temps d'appel est beaucoup plus important que le temps d'exécution de la SP.

    Si vous voulez améliorer les performances, il faut commencer par réduire le traffic réseau.
    Ca veut dire, réduire le volume de données envoyé (pour gagner sur les temps de transit), mais également réduire le nombre de messages envoyés (pour supprimer les temps d'attente des messages d'acquitements du réseau).

    Plusieurs pistes pour celà :
    - L'écriture se fait-elle ligne à ligne ou bloc par bloc (vous faites un appel de la SP pour chaque ligne, ou vous envoyer un bloc de lignes (un batch d'écriture par exemple) pour écrire plusieurs lignes en un seul appels ? (évidemment le mieux c'est de tout grouper en un seul appel).
    - Réduire la taille des messages échangés. L'idéal serait d'oublier SOAP et d'effectuer un envoie binaire.

    Si l'essentiel du temps de traitement se passe dans la SP, ben il n'y a plus qu'à l'optimiser !

Discussions similaires

  1. Optimiser le temps réponse avec sql server
    Par yuri2008 dans le forum Développement
    Réponses: 1
    Dernier message: 30/05/2008, 23h41
  2. Gestion des Temps dans Base Sql Server par Delphi
    Par BYALI dans le forum Bases de données
    Réponses: 4
    Dernier message: 09/03/2008, 14h09
  3. [C#]insertion sql server
    Par nawal106 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 25/10/2006, 12h28
  4. Récupérer les données Insert - SQL Server 2000
    Par jfc dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 19/04/2006, 07h47
  5. Lenteur lors d'une insertion (sql server)
    Par shiners300 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 16/09/2005, 09h09

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