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 :

Requete insert (lente) basée sur un select (rapide)


Sujet :

Développement SQL Server

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 12
    Points
    12
    Par défaut Requete insert (lente) basée sur un select (rapide)
    Bonjour,

    Je pèche sur une requête d'insertion qui met pas loin de 2 min 30 pour insérer 75 lignes dans ma base SQL server.

    L’exécution de la partie "select" seule met moins de 1s à s’exécuter et me retourne 75 lignes. En revanche l'insertion dans la table met 2min30. l'analyse du plan d’exécution n'indique pas s’index manquant et pour ne pas introduire de biais j'ai provisoirement éliminé tous les index de la table sans différence sur temps d’exécution.

    J'imagine que mon problème vient du fait que j'insère des lignes dans une table que je lit en même temps mais je n'y vois pas de solution.

    Avez-vous un conseil ?

    Merci d'avance.

    Voici le code :

    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
    28
    INSERT INTO PROD.dbo.OXY_GAPLBL (IDENT, IDENT_ENTETE, GCPARTIC_IDENT, GCPARTIC_CODE, DESIG, QTE, QTE_SORTIE, PUHT, HT, UNITE_ACHAT_IDENT, UNITE_STOCKAGE_IDENT, UNITE_UTILISATION_IDENT, COEFFICIENT_ACHAT_STOCKAGE, COEFFICIENT_STOCKAGE_UTILISATION_BRUT, COEFFICIENT_STOCKAGE_UTILISATION_NET)
     
    SELECT 'INV20200430' + RIGHT('00000' + CAST((ROW_NUMBER() OVER(ORDER BY Produit.ID ASC)) AS VARCHAR(5)),5), 'INV20200430',
    a.IDENT, A.CODE, A.DESIG, Produit.QTE-produit.stock, 0, A.PUAHT, A.PUAHT*Produit.QTE, Produit.Unite_Utilisation_ID, Produit.Unite_Utilisation_ID, Produit.Unite_Utilisation_ID
    FROM 
    (
    	SELECT ID.Qté_EnUniteUtilisationNette AS QTE, ID.Unite_Utilisation_ID, ID.Produit_Code AS CODE, CAST(ID.Inventaire_ID AS VARCHAR) AS ID, isnull(stock.qte,0) as stock
    	FROM PROD.dbo.InventaireDetail ID
    	INNER JOIN PROD.dbo.Inventaire ON ID = Inventaire_ID AND DATE = '20200430' AND ID.Qté_EnUniteUtilisationNette <> 0
    	LEFT JOIN 
    	(
    		SELECT L.GCPARTIC_CODE, sum((L.qte-L.QTE_SORTIE)*ISNULL(L.COEFFICIENT_ACHAT_STOCKAGE,1)*ISNULL(L.COEFFICIENT_STOCKAGE_UTILISATION_BRUT,1)) as qte
    		FROM PROD.dbo.oxy_gaplbl L
    		where l.qte <> l.QTE_SORTIE
    		group by L.GCPARTIC_CODE
     
     
    		UNION SELECT A.CODE, SUM(FSL.QTE-FSL.QTE_SORTIE) as QTE
    		FROM PROD.dbo.SQL_FAB FAB INNER JOIN PROD.dbo.OXY_GCPARTIC A on A.IDENT = FAB.GCPARTIC_IDENT INNER JOIN PROD.dbo.SQL_FAB_SOUS_LOT FSL ON FSL.IDENT  = FAB.IDENT
    		WHERE FSL.QTE <> FSL.QTE_SORTIE
    		GROUP BY A.CODE
    	) Stock ON Stock.GCPARTIC_CODE = id.Produit_Code
     
    	where isnull(stock.qte,0) < id.Qté_EnUniteUtilisationNette and ID.Qté_EnUniteUtilisationNette-isnull(stock.qte,0) > 0.01
    ) Produit
    INNER JOIN PROD.dbo.OXY_GCPARTIC A ON A.CODE = Produit.Code
    LEFT JOIN PROD.dbo.OXY_GAPLBL L ON L.GCPARTIC_CODE = Produit.Code AND DATE_LIVRAISON =
    	(SELECT MAX(DATE_LIVRAISON) FROM PROD.dbo.OXY_GAPLBL WHERE DATE_LIVRAISON <= '20200430' AND GCPARTIC_CODE = Produit.Code)

  2. #2
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    J'ai également fait une tentative d'insertion dans une variable table pour m'affranchir des problèmes de blocage ou d'index à mettre à jour.
    Sans succès.
    Il faut également 2 min 30 pour remplir ma variable table là où le select renvoi les résultats en 1s.
    Je ne comprend vraiment pas.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    1) Avez vous provisionné les fichiers de données et le fichier du journal de transactions de votre base ?
    2) êtes vous sur une machine physique ou une VM ?
    3) les disques sur lesquels reposent vos fichiers de bases sont-il en attachement direct, sur un SAN ou sur un NAS ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Bonjour,

    Merci pour votre réponse. J'ignore ce qu'est le provisionnement de fichiers de données, en revanche, je suis bien sur une machine physique avec les fichiers sur un disque en attachement direct.
    Autre information : cette requête est très longue mais je fais régulièrement des INSERT sur cette table sans constater de lenteurs particulières.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Version, édition et patch ?

    Plan de requête ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  6. #6
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    voici la version et le plan :
    Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)
    Apr 22 2011 19:23:43
    Copyright (c) Microsoft Corporation
    Enterprise Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)


    Nom : plan.png
Affichages : 185
Taille : 117,9 Ko

  7. #7
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par lebracfr Voir le message
    Microsoft SQL Server 2008 R2 (RTM) - 10.50.1617.0 (X64)
    ouch une version RTM de 2010 même pas patché...
    Vous ne lésinez pas sur la maintenance !

  8. #8
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    1) 80 % du contenu des SP sont des correctifs de performances... bref, vous roulez avec des pneus crevé et vous vous demandez pourquoi ça va pas vite !
    2) Windows 2008 R2 n'est pas non plus patché ! Commencez par passez le SP2 !
    3) SQL Server 2008 R n'est plus supporté

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  9. #9
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Merci pour vos réponses, je vais donc m'atteler à l'installation des patch.

  10. #10
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 772
    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 772
    Points : 52 732
    Points
    52 732
    Billets dans le blog
    5
    Par défaut
    Pour corser un peu le tout.... Tu es sur que c'est des disques magnétiques sur lesquels la base est crées ? C'est pas des floppies par hasard ????

    https://en.wikipedia.org/wiki/Floppy...sk_2009_G1.jpg

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2009
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Novembre 2009
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    Oui, ce sont bien des disques dur standards.
    S’il s’agissait d’un problème matériel, toutes mes requêtes d’insert ou d’update seraient lente et c’est la première qui pose problème depuis très longtemps pour 75 lignes !

  12. #12
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    bonjour

    Il serait interessant d'avoir les plans d’exécution réels pour les deux requetes (insert et select seul). Idéalement au format XML

    Combien de temps mets le select en désactivant le parallélisme ?

Discussions similaires

  1. [AC-2016] Requete de suppression basée sur 2 tables , supression multi champs
    Par vavavoum74 dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 29/11/2018, 15h19
  2. Réaliser une requête croisée basée sur une Select
    Par sakia dans le forum VBA Access
    Réponses: 6
    Dernier message: 15/09/2010, 17h25
  3. Requete httpPost lent en local et rapide sur internet
    Par marsupio49 dans le forum Entrée/Sortie
    Réponses: 2
    Dernier message: 27/02/2008, 15h00
  4. [Sous requetes] insertion a partir d'un select
    Par max44410 dans le forum Requêtes
    Réponses: 4
    Dernier message: 28/05/2007, 02h46
  5. [VB.NET]Requete INSERT dans base de données access
    Par mael94420 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 05/10/2006, 13h57

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