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

Développement SQL Server Discussion :

[BULK INSERT] & performances


Sujet :

Développement SQL Server

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2003
    Messages : 87
    Points : 90
    Points
    90
    Par défaut [BULK INSERT] & performances
    Bonjour,

    J'utilise la commande BULK INSERT pour importer les données d'un fichier TXT vers une table SQL Server 2005 (serveur de dev peu sollicité).

    Le fichier TXT pèse 29 Mo et contient environ 120 000 lignes. Il est situé sur un ordinateur distant (réseau local avec un bon débit - la copie du fichier via l'explorateur Windows dure 60~70 secondes).
    Les données sont séparées par une virgule.

    Voici un exemple de ligne contenue dans le fichier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "A","MACHINE - PRINTER (OPB)              ","9907267     ","TRUC 4510 43PPM                  ","128MB 40GB HDD 220V 533MHZ         ","NMS   ","4510V_NZ            ",0001084.48,0001469.00,"Y","            "," ","0095205733044","0734","FR",027.00
    J'utilise la commande :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    BULK INSERT MaTable FROM 'xxx.xxx.xxx.xxx2009-10-13-fichier.txt' WITH (FIELDTERMINATOR = ',', rowterminator = 'n', KEEPNULLS)
    et la durée de l'import est de 8 minutes environ.

    Cela me semble long. Qu'en pensez-vous ?

    Y-a-t-il un moyen d'accélérer le traitement ?

    Par avance, je vous remercie de vos conseils.

    PS : Ici (http://www.developpez.net/forums/d73...e/#post4259492), SQLPro propose d'indexer la table temporaire d'import. Cela ne risque-t-il pas de ralentir l'import ? Mais il est vrai qu'il y a un traitement ensuite...

    Merci.

    Matthieu

  2. #2
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : janvier 2005
    Messages : 5 826
    Points : 12 348
    Points
    12 348
    Par défaut
    Bonjour,

    Citation Envoyé par SQLPro
    Il faut aussi indexer votre table temporaire sur le critère de filtrage.
    SQLPro parle ici de l'index qui permet d'accélérer la recherche des lignes candidates à la mise à jour par l'UPDATE, c'est à dire les colonnes référencées dans la clause WHERE, tout comme pour un SELECT ou un DELETE.

    Cela me semble long. Qu'en pensez-vous ?
    Effectivement c'est un peu long, et cela peut être effectivement du aux indexes sur votre table, mais cela dépend aussi de la configuration matérielle de votre machine.
    Vous pouvez aussi penser à utiliser l'option ROWS_PER_BATCH.
    Je ne pense pas qu'utiliser le mode de récupération BULK_LOGGED soit nécessaire dans votre cas.
    Pouvez-vous poster le DDL de votre table d'import ?

    Dans tous les cas si vous avez trop d'indexes sur votre table, cela peut influer négativement sur votre BULK INSERT (il faut mettre à jour tous les indexes). Vous pouvez dans un premier temps désactiver tous les indexes non-cluster de cette table pour les reconstruire après l'import.

    @++

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2003
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Bonjour,
    Merci de votre réponse.

    Voici la structure de la table :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    SET ANSI_PADDING ON
    GO
    CREATE TABLE [dbo].[Appro](
    	[col1] [varchar](50) NULL,
    	[constructeur] [varchar](50) NULL,
    	[ref_fournisseur] [varchar](15) NULL,
    	[designation] [varchar](50) NULL,
    	[InfoComplementaire] [varchar](50) NULL,
    	[systeme] [varchar](50) NULL,
    	[ref_constructeur] [varchar](50) NULL,
    	[col8] [varchar](50) NULL,
    	[col9] [varchar](50) NULL,
    	[col10] [varchar](50) NULL,
    	[col11] [varchar](50) NULL,
    	[col12] [varchar](50) NULL,
    	[EAN] [varchar](50) NULL,
    	[col14] [varchar](50) NULL,
    	[langue] [varchar](50) NULL,
    	[poids] [varchar](50) NULL
    ) ON [PRIMARY]
     
    GO
    SET ANSI_PADDING OFF
    Il n'y a pas d'index pour l'instant. En revanche son utilité pourrait exister puisqu'ensuite il faut réaliser un rapprochement entre les données importées et celles présentes dans la base.

    Config :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Intel Xeon 3.20Ghz, 3.5Go de RAM et 50 à 70 Go de DD de libre sur 2 disques.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Consultant Teradata
    Inscrit en
    septembre 2008
    Messages
    8 220
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

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

    Informations forums :
    Inscription : septembre 2008
    Messages : 8 220
    Points : 17 148
    Points
    17 148
    Par défaut
    Quel temps obtenez-vous si vous rappatriez d'abord le fichier sur le serveur puis que vous faites l'import ?

    30 Mo en 70 secondes on parle de 3.4 Mbits / sec, c'est un tout petit ADSL en terme de performance, maintenant c'est peut-être suffisant mais je n'irai pas jusqu'à parler de bon débit (sauf si votre serveur distant est vraiment loin dans un autre pays par exemple).

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur Web
    Inscrit en
    octobre 2003
    Messages
    87
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Associations - ONG

    Informations forums :
    Inscription : octobre 2003
    Messages : 87
    Points : 90
    Points
    90
    Par défaut
    Visiblement, cela provenait d'un "problème réseau".
    En déplaçant les fichiers TXT sur un autre poste et en lançant les DTS, cela est quasi instantané (15 secondes pour plusieurs fichiers TXT).

    Merci de vos suggestions !

    PS : J'ai une autre question mais elle mérite la création d'une nouvelle discussion. J'y vais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. BULK INSERT et format de date
    Par Fragonard dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 12/08/2005, 09h26
  2. Message d'erreur avec Bulk Insert
    Par Shivas dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 18/07/2005, 13h03
  3. Comment préciser nom de la colonne pour un Bulk Insert
    Par jeff37 dans le forum Langage SQL
    Réponses: 4
    Dernier message: 16/06/2004, 18h05
  4. BULK INSERT
    Par jeremie dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 12/03/2004, 14h49
  5. Bulk insert et caractère accentué
    Par slc dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/04/2003, 13h52

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