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

Administration SQL Server Discussion :

Optimisation par rapport à la machine


Sujet :

Administration SQL Server

  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut Optimisation par rapport à la machine
    Bonjour à tous,

    dans mon entreprise, il a été fait le choix d'acheter un serveur quadri processeur dual-care avec 12Go de RAM.

    Dessus j'ai un SQLServer 2005.

    Le problème que nous ayons est que dès qu'une "grosse" requête (un renvoie de plusieurs 10aine de millier de lignes) passe sur le serveur et occupe 10 à 15% des ressources processus (sqlservr.exe), cela ralenti toute la boite.

    Savez-vous pourquoi et vers quelle piste dois-je me tourner ?

    merci,

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Il peut y avoir des dizaines de raisons différentes. Je commencerais par vérifier la présence de sessions bloquées pendant l'exécution de cette requête:

    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
    SELECT 
        t1.resource_type as lock_type
      , db_name(resource_database_id) as DB
      , t1.resource_associated_entity_id as blkd_obj
      , t1.request_mode as lock_req          -- lock requested
      , t1.request_session_id as waiter_sid-- spid of waiter
      , t2.wait_duration_ms as waittime
      , (SELECT text FROM sys.dm_exec_requests as r  --- get sql for waiter
            CROSS APPLY sys.dm_exec_sql_text (r.sql_handle) 
                WHERE r.session_id = t1.request_session_id) as waiter_batch
      , (SELECT SUBSTRING(qt.text , r.statement_start_offset/2
              , (CASE WHEN r.statement_end_offset = -1 
                    THEN LEN(CONVERT(nvarchar(MAX), qt.text)) * 2 
                    ELSE r.statement_end_offset END - r.statement_start_offset)/2) 
            FROM sys.dm_exec_requests as r
                CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) as qt
                WHERE r.session_id = t1.request_session_id) as waiter_stmt    --- this is the statement executing right now
       , t2.blocking_session_id as blocker_sid -- spid of blocker
       , (SELECT text FROM sys.sysprocesses as p       --- get sql for blocker
                CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) 
                WHERE p.spid = t2.blocking_session_id) as blocker_stmt
    FROM sys.dm_tran_locks as t1 
        JOIN sys.dm_os_waiting_tasks as t2 
            ON t1.lock_owner_address = t2.resource_address
    Sur des dizaines de milliers de lignes il peut y avoir une escalade de verrous sur certains objets, mais tout dépend de la requête. Si tu sais déjà de quelle requête il s'agit, essayes d'afficher le plan d'exécution estimé par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    set showplan_text on
    <la grosse requête ....>
    GO
    - Quels sont les critères de recherche ?
    - Enuméres les tables impliquées dans la requête. Quelles sont leur volumétrie respective, quels sont les indexes positionnés, sur quelles colonnes, quelle est la dernière date de mise à jour des statistiques sur ces indexes ?

  3. #3
    Expert confirmé
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Par défaut
    Bonjour,

    Identifiez la requête qui vous pose problème et regardez le plan d'exécution de celle-ci ..

    ++

  4. #4
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    En fait cela le fait quelque soit la "grosse" requête passée nous constatons un ralentissement sur les autres postes.

    N'est-il pas possible d'avoir plusieurs "instances" en parallèle ?

    (je vais voir pour la première piste de mon côté)

    Encore merci pour vos réponses

  5. #5
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    N'est-il pas possible d'avoir plusieurs "instances" en parallèle ?

    Inutile d'en arriver là!

    Il y a clairement un soucis au niveau de votre requête comme viennent de vous l'expliquer mikedavem et dbaffaleuf.

    Heureusement qu'on ne double pas les serveurs a chaque grosse requête trouvée :-).

    Postez ici le plan d’exécution de votre requête ainsi que les information d'IO
    en faisant précéder votre requête de SET STATISTICS IO ON puis voyez le résultat dans l'onglet message de SSMS.

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 042
    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 : 22 042
    Billets dans le blog
    6
    Par défaut
    Vous utilisez CROSS APPLY dans cette requête ce qui dé parallélise. Soit vous supprimez CROSS APPLY et trouvez une autre solution, soit vous ajoutez l'option MAXDOP = 1
    En sus vous pouvez faire cette requête au niveau d'isolation READ UNCOMMITTED voire snapshot.

    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/ * * * * *

  7. #7
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Vous utilisez CROSS APPLY dans cette requête ce qui dé parallélise. Soit vous supprimez CROSS APPLY et trouvez une autre solution, soit vous ajoutez l'option MAXDOP = 1
    En sus vous pouvez faire cette requête au niveau d'isolation READ UNCOMMITTED voire snapshot.

    Eu... j'ai du rater un post?

    Ou peut'on voir la requète incriminée?

  8. #8
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Bonjour à tous,

    Voici les statistiques IOpassée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    (132166*ligne(s) affectée(s))
    Table 'sgl_champ'. Nombre d'analyses 1, lectures logiques 0, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'artsoc'. Nombre d'analyses 10, lectures logiques 4067, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'artis'. Nombre d'analyses 1, lectures logiques 3195, lectures physiques 0, lectures anticipées 3170, lectures logiques de données d'objets volumineux 38548, lectures physiques de données d'objets volumineux 81, lectures anticipées de données d'objets volumineux 0.
    Table 'artip'. Nombre d'analyses 1, lectures logiques 5148, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'artim'. Nombre d'analyses 1, lectures logiques 47, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Table 'artfou'. Nombre d'analyses 1, lectures logiques 491, lectures physiques 8, lectures anticipées 448, lectures logiques de données d'objets volumineux 0, lectures physiques de données d'objets volumineux 0, lectures anticipées de données d'objets volumineux 0.
    Voici le plan d'exé :
    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
    29
    30
    31
    32
    33
    34
     
      |--Compute Scalar(DEFINE:([Expr1037]=CASE WHEN [Expr1035] IS NULL THEN (0) ELSE [Expr1035] END, [Expr1038]=(-1)))
           |--Merge Join(Right Outer Join, MERGE:([cohesis].[naia].[artfou].[artcod])=([cohesis].[naia].[artip].[artcod]), RESIDUAL:([cohesis].[naia].[artfou].[artcod]=[cohesis].[naia].[artip].[artcod]))
                |--Compute Scalar(DEFINE:([Expr1035]=CONVERT_IMPLICIT(int,[Expr1044],0)))
                |    |--Stream Aggregate(GROUP BY:([cohesis].[naia].[artfou].[artcod]) DEFINE:([Expr1044]=Count(*)))
                |         |--Index Scan(OBJECT:([cohesis].[naia].[artfou].[artfou_sgltop]),  WHERE:([cohesis].[naia].[artfou].[sgltop]='O') ORDERED FORWARD)
                |--Nested Loops(Left Outer Join, WHERE:([cohesis].[naia].[sgl_champ].[sglnum]=[cohesis].[naia].[artip].[sglnum]))
                     |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a10].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a10].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a9].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a9].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a8].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a8].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a7].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a7].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a6].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a6].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a5].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a5].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a4].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a4].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a3].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a3].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a2].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a2].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |    |    |    |    |--Merge Join(Left Outer Join, MERGE:([cohesis].[naia].[artip].[artcod])=([a1].[artcod]), RESIDUAL:([cohesis].[naia].[artsoc].[artcod] as [a1].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |    |    |    |    |    |--Merge Join(Right Outer Join, MERGE:([cohesis].[naia].[artim].[artcod])=([cohesis].[naia].[artip].[artcod]), RESIDUAL:([cohesis].[naia].[artim].[artcod]=[cohesis].[naia].[artip].[artcod]))
                     |    |    |    |    |    |    |    |    |    |    |    |--Clustered Index Scan(OBJECT:([cohesis].[naia].[artim].[PK_artim]), ORDERED FORWARD)
                     |    |    |    |    |    |    |    |    |    |    |    |--Merge Join(Inner Join, MERGE:([cohesis].[naia].[artip].[artcod])=([cohesis].[naia].[artis].[artcod]), RESIDUAL:([cohesis].[naia].[artip].[artcod]=[cohesis].[naia].[artis].[artcod]))
                     |    |    |    |    |    |    |    |    |    |    |         |--Clustered Index Scan(OBJECT:([cohesis].[naia].[artip].[PK_artip]),  WHERE:([cohesis].[naia].[artip].[sgltop]='O') ORDERED FORWARD)
                     |    |    |    |    |    |    |    |    |    |    |         |--Compute Scalar(DEFINE:([Expr1039]=[cohesis].[naia].[artis].[date_modif]-'1900-01-03 00:00:00.000'))
                     |    |    |    |    |    |    |    |    |    |    |              |--Clustered Index Scan(OBJECT:([cohesis].[naia].[artis].[PK_artis]), ORDERED FORWARD)
                     |    |    |    |    |    |    |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a1]), SEEK:([a1].[societe]='01') ORDERED FORWARD)
                     |    |    |    |    |    |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a2]), SEEK:([a2].[societe]='05') ORDERED FORWARD)
                     |    |    |    |    |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a3]), SEEK:([a3].[societe]='14') ORDERED FORWARD)
                     |    |    |    |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a4]), SEEK:([a4].[societe]='22') ORDERED FORWARD)
                     |    |    |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a5]), SEEK:([a5].[societe]='35') ORDERED FORWARD)
                     |    |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a6]), SEEK:([a6].[societe]='48') ORDERED FORWARD)
                     |    |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a7]), SEEK:([a7].[societe]='49') ORDERED FORWARD)
                     |    |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a8]), SEEK:([a8].[societe]='53') ORDERED FORWARD)
                     |    |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a9]), SEEK:([a9].[societe]='54') ORDERED FORWARD)
                     |    |--Clustered Index Seek(OBJECT:([cohesis].[naia].[artsoc].[PK_socart] AS [a10]), SEEK:([a10].[societe]='56') ORDERED FORWARD)
                     |--Clustered Index Scan(OBJECT:([cohesis].[naia].[sgl_champ].[PK_sgl_champ]))
    Merci,

  9. #9
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Eu... j'ai du rater un post?

    Ou peut'on voir la requète incriminée?
    C'est dans cette requête
    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
     
    SELECT 
        t1.resource_type AS lock_type
      , db_name(resource_database_id) AS DB
      , t1.resource_associated_entity_id AS blkd_obj
      , t1.request_mode AS lock_req          -- lock requested
      , t1.request_session_id AS waiter_sid-- spid of waiter
      , t2.wait_duration_ms AS waittime
      , (SELECT text FROM sys.dm_exec_requests AS r  --- get sql for waiter
            CROSS APPLY sys.dm_exec_sql_text (r.sql_handle) 
                WHERE r.session_id = t1.request_session_id) AS waiter_batch
      , (SELECT SUBSTRING(qt.text , r.statement_start_offset/2
              , (CASE WHEN r.statement_end_offset = -1 
                    THEN LEN(CONVERT(nvarchar(MAX), qt.text)) * 2 
                    ELSE r.statement_end_offset END - r.statement_start_offset)/2) 
            FROM sys.dm_exec_requests AS r
                CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS qt
                WHERE r.session_id = t1.request_session_id) AS waiter_stmt    --- this is the statement executing right now
       , t2.blocking_session_id AS blocker_sid -- spid of blocker
       , (SELECT text FROM sys.sysprocesses AS p       --- get sql for blocker
                CROSS APPLY sys.dm_exec_sql_text(p.sql_handle) 
                WHERE p.spid = t2.blocking_session_id) AS blocker_stmt
    FROM sys.dm_tran_locks AS t1 
        JOIN sys.dm_os_waiting_tasks AS t2 
            ON t1.lock_owner_address = t2.resource_address
    de dbaffaleuf

  10. #10
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Est-il possible de poster la requête associée à ce plan stp ?

  11. #11
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    la voici :
    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
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    SELECT  
                    artip.artcod, artip.sglnum, artip.sgleta, artip.sglses, artip.sgltop, artip.sglhoro, artip.sglini, artip.sglprop, artip.sgltrn,
                    artip.artlib, artip.sous_famille, artip.s_sous_famille, artip.ss_sous_famille, artip.famille, artip.fabricant, 
                    artip.denomin,  artip.tvacod, artip.artneg,
                    artis.date_creation, artip.top_pas_affecte,   artis.date_modif,
                    artip.niv_maj_stk, artip.code_message, artip.type_fabrication, artip.ex_code_tva, artip.date_tva, artip.unite_stock, artip.ref1, artip.ref2, 
                    artip.ref3, artip.ref4, artip.ref5, artip.ref6, artip.coef1, artip.coef2, artip.coef3, artip.coef4, artip.coef5, artip.coef6, artip.prixparv, 
                    artip.prixpara,  artis.dose_agro, artis.produit_veto, artis.art_remplace, artis.art_generique,  artip.vrac, artip.ulog,  artis.art_generique2,
                    artip.unite_etiq, artis.gest_peremp, artip.lib_art2,
                    artip.unite_v, artip.unite_a, artip.unite_s, artip.qte_min_v, artip.qte_min_a, artip.qte_min_s, artis.comm_art,
                    artis.num_homologation, artis.densite, artis.utilisateur, artis.emballage, artis.code_douane, artip.liste_taxe , 
                    artip.adresse_obli, artip.modif_libelle, artip.classification,  
                    artip.opv1, artip.opv2, artip.opv3, artip.opv4, artip.opv5, 
                    artip.opv6, artip.ops1, artip.ops2, artip.ops3, artip.ops4, artip.ops5, artip.ops6, artip.opa1, artip.opa2, artip.opa3, artip.opa4, 
                    artip.opa5, artip.opa6, artip.coef_etiq, 
                   (SELECT COUNT(*) FROM artfou (NOLOCK) WHERE  artfou.artcod = artip.artcod AND artfou.sgltop = 'O') AS nblien , 
                    -1 as resultat , artis.date_modif - 2 as date_test , 
                    codecreux as le_click ,
                    artip.unite_stock AS atunite_stock , comm_edit , comm_aff, artis.taille, artis.couleur, artip.u_stat, artip.coef_stat, artis.ecotaxe,  artis.poids_art,  artis.poidmaxi,
                    artim.stade_util, artim.action, artim.fam_chimique, artim.znt, artim.dar, artim.lmr, artim.date_retamm, 
                    artim.date_distrib, artim.date_util, artim.sem_trait, artim.sem_precocite, artim.sem_annee, artim.sem_destination
     
    ,a1.datact   as datsoc1,    a1.sgltop as sgltopsoc1,  a1.destination_vente  as destvte1
    ,a2.datact   as datsoc2,    a2.sgltop as sgltopsoc2,  a2.destination_vente  as destvte2
    ,a3.datact   as datsoc3,    a3.sgltop as sgltopsoc3,  a3.destination_vente  as destvte3
    ,a4.datact   as datsoc4,    a4.sgltop as sgltopsoc4,  a4.destination_vente  as destvte4
    ,a5.datact   as datsoc5,    a5.sgltop as sgltopsoc5,  a5.destination_vente  as destvte5
    ,a6.datact   as datsoc6,    a6.sgltop as sgltopsoc6,  a6.destination_vente  as destvte6
    ,a7.datact   as datsoc7,    a7.sgltop as sgltopsoc7,  a7.destination_vente  as destvte7
    ,a8.datact   as datsoc8,    a8.sgltop as sgltopsoc8,  a8.destination_vente  as destvte8
    ,a9.datact   as datsoc9,    a9.sgltop as sgltopsoc9,  a9.destination_vente  as destvte9
    ,a10.datact   as datsoc10,    a10.sgltop as sgltopsoc10,  a10.destination_vente  as destvte10, artip.sgl_user_maj, artip.sgl_date_maj
    FROM artip  
    INNER JOIN artis ON artis.artcod = artip.artcod
    LEFT JOIN artim ON artim.artcod = artip.artcod
    LEFT JOIN artsoc a1 ON a1.artcod = artip.artcod and  a1.societe = '01'                                     
    LEFT JOIN artsoc a2 ON a2.artcod = artip.artcod and  a2.societe = '05'
    LEFT JOIN artsoc a3 ON a3.artcod = artip.artcod and  a3.societe = '14'
    LEFT JOIN artsoc a4 ON a4.artcod = artip.artcod and  a4.societe = '22'
    LEFT JOIN artsoc a5 ON a5.artcod = artip.artcod and  a5.societe = '35'
    LEFT JOIN artsoc a6 ON a6.artcod = artip.artcod and  a6.societe = '48'
    LEFT JOIN artsoc a7 ON a7.artcod = artip.artcod and  a7.societe = '49'
    LEFT JOIN artsoc a8 ON a8.artcod = artip.artcod and  a8.societe = '53'
    LEFT JOIN artsoc a9 ON a9.artcod = artip.artcod and  a9.societe = '54'
    LEFT JOIN artsoc a10 ON a10.artcod = artip.artcod and  a10.societe = '56'
    LEFT JOIN sgl_champ ON sgl_champ.sglnum = artip.sglnum
     
    WHERE    artip.sgltop =   'O' and

  12. #12
    Membre émérite
    Profil pro
    Inscrit en
    Février 2008
    Messages
    758
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 758
    Par défaut
    Il manque des critères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE    artip.sgltop =   'O' AND (...)

  13. #13
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par dbaffaleuf Voir le message
    Il manque des critères:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WHERE    artip.sgltop =   'O' AND (...)

    Ah non y en manque pas ... c'est juste que j'ai enlevé 1=1 car c'est une requête générée

  14. #14
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    SELECT
    artip.artcod, artip.sglnum, artip.sgleta, artip.sglses, artip.sgltop, artip.sglhoro, artip.sglini, artip.sglprop, artip.sgltrn,
    artip.artlib, artip.sous_famille, artip.s_sous_famille, artip.ss_sous_famille, artip.famille, artip.fabricant,
    artip.denomin, artip.tvacod, artip.artneg,
    artis.date_creation, artip.top_pas_affecte, artis.date_modif,
    artip.niv_maj_stk, artip.code_message, artip.type_fabrication, artip.ex_code_tva, artip.date_tva, artip.unite_stock, artip.ref1, artip.ref2,
    artip.ref3, artip.ref4, artip.ref5, artip.ref6, artip.coef1, artip.coef2, artip.coef3, artip.coef4, artip.coef5, artip.coef6, artip.prixparv,
    artip.prixpara, artis.dose_agro, artis.produit_veto, artis.art_remplace, artis.art_generique, artip.vrac, artip.ulog, artis.art_generique2,
    artip.unite_etiq, artis.gest_peremp, artip.lib_art2,
    artip.unite_v, artip.unite_a, artip.unite_s, artip.qte_min_v, artip.qte_min_a, artip.qte_min_s, artis.comm_art,
    artis.num_homologation, artis.densite, artis.utilisateur, artis.emballage, artis.code_douane, artip.liste_taxe ,
    artip.adresse_obli, artip.modif_libelle, artip.classification,
    artip.opv1, artip.opv2, artip.opv3, artip.opv4, artip.opv5,
    artip.opv6, artip.ops1, artip.ops2, artip.ops3, artip.ops4, artip.ops5, artip.ops6, artip.opa1, artip.opa2, artip.opa3, artip.opa4,
    artip.opa5, artip.opa6, artip.coef_etiq,
    (SELECT COUNT(*) FROM artfou (NOLOCK) WHERE artfou.artcod = artip.artcod AND artfou.sgltop = 'O') AS nblien ,
    -1 AS resultat , artis.date_modif - 2 AS date_test ,
    codecreux AS le_click ,
    artip.unite_stock AS atunite_stock , comm_edit , comm_aff, artis.taille, artis.couleur, artip.u_stat, artip.coef_stat, artis.ecotaxe, artis.poids_art, artis.poidmaxi,
    artim.stade_util, artim.action, artim.fam_chimique, artim.znt, artim.dar, artim.lmr, artim.date_retamm,
    artim.date_distrib, artim.date_util, artim.sem_trait, artim.sem_precocite, artim.sem_annee, artim.sem_destination

    ,a1.datact AS datsoc1, a1.sgltop AS sgltopsoc1, a1.destination_vente AS destvte1
    ,a2.datact AS datsoc2, a2.sgltop AS sgltopsoc2, a2.destination_vente AS destvte2
    ,a3.datact AS datsoc3, a3.sgltop AS sgltopsoc3, a3.destination_vente AS destvte3
    ,a4.datact AS datsoc4, a4.sgltop AS sgltopsoc4, a4.destination_vente AS destvte4
    ,a5.datact AS datsoc5, a5.sgltop AS sgltopsoc5, a5.destination_vente AS destvte5
    ,a6.datact AS datsoc6, a6.sgltop AS sgltopsoc6, a6.destination_vente AS destvte6
    ,a7.datact AS datsoc7, a7.sgltop AS sgltopsoc7, a7.destination_vente AS destvte7
    ,a8.datact AS datsoc8, a8.sgltop AS sgltopsoc8, a8.destination_vente AS destvte8
    ,a9.datact AS datsoc9, a9.sgltop AS sgltopsoc9, a9.destination_vente AS destvte9
    ,a10.datact AS datsoc10, a10.sgltop AS sgltopsoc10, a10.destination_vente AS destvte10, artip.sgl_user_maj, artip.sgl_date_maj
    FROM artip
    INNER JOIN artis ON artis.artcod = artip.artcod
    LEFT JOIN artim ON artim.artcod = artip.artcod
    LEFT JOIN artsoc a1 ON a1.artcod = artip.artcod AND a1.societe = '01'
    LEFT JOIN artsoc a2 ON a2.artcod = artip.artcod AND a2.societe = '05'
    LEFT JOIN artsoc a3 ON a3.artcod = artip.artcod AND a3.societe = '14'
    LEFT JOIN artsoc a4 ON a4.artcod = artip.artcod AND a4.societe = '22'
    LEFT JOIN artsoc a5 ON a5.artcod = artip.artcod AND a5.societe = '35'
    LEFT JOIN artsoc a6 ON a6.artcod = artip.artcod AND a6.societe = '48'
    LEFT JOIN artsoc a7 ON a7.artcod = artip.artcod AND a7.societe = '49'
    LEFT JOIN artsoc a8 ON a8.artcod = artip.artcod AND a8.societe = '53'
    LEFT JOIN artsoc a9 ON a9.artcod = artip.artcod AND a9.societe = '54'
    LEFT JOIN artsoc a10 ON a10.artcod = artip.artcod AND a10.societe = '56'
    LEFT JOIN sgl_champ ON sgl_champ.sglnum = artip.sglnum

    WHERE artip.sgltop = 'O'

    Oui vous remontez toute votre base de données quoi

    But final de la requête?

  15. #15
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par iberserk Voir le message
    Oui vous remontez toute votre base de données quoi

    But final de la requête?
    le but final de la requête est bien de remonter mon annuaire complet d'article.
    Mais le problème c'est que dès que je lance cette requête, cela ralenti toutes les autres demandes SQL sur la base de données alors que le CPU et la RAM ne sont utilisés qu'à 15%.... c'est bien là le problème.

  16. #16
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    Déjà ce join ne sert à rien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN sgl_champ ON sgl_champ.sglnum = artip.sglnum

  17. #17
    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
    Par défaut
    Bonjour

    il est normal que votre CPU ne rale pas trop, la requête ne fait pas calculs faramineux, au regard du volume de données qu'elle semble manipuler.

    Il est normal aussi que cela rame même si le CPU et la RAM sont peu utilisés, à mon avis, ce sont vos disques qui ne suivent pas ! (et peut etre même le réseau dans le cas présent : quel est le volume de données retourné ?)

    lectures logiques de données d'objets volumineux 38548, lectures physiques de données d'objets volumineux 81,
    Vous avez des colonnes de type LOB (TEXT, IMAGE,...) dans votre table artis, en avez-vous vraiment besoin ?

  18. #18
    Membre averti
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Mai 2005
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Mai 2005
    Messages : 51
    Par défaut
    Citation Envoyé par aieeeuuuuu Voir le message
    Bonjour

    il est normal que votre CPU ne rale pas trop, la requête ne fait pas calculs faramineux, au regard du volume de données qu'elle semble manipuler.

    Il est normal aussi que cela rame même si le CPU et la RAM sont peu utilisés, à mon avis, ce sont vos disques qui ne suivent pas ! (et peut etre même le réseau dans le cas présent : quel est le volume de données retourné ?)


    Vous avez des colonnes de type LOB (TEXT, IMAGE,...) dans votre table artis, en avez-vous vraiment besoin ?
    OK merci pour la première info !

    Oui il y a une colonne TEXT (=> Commentaire) qui sert dans l'applicatif à l'afficher si on appuie sur "/"

  19. #19
    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
    Par défaut
    Passez ces colonnes en VARCHAR(MAX), ça sera déjà un bon début

  20. #20
    Membre Expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Par défaut
    OK merci pour la première info !

    Oui il y a une colonne TEXT (=> Commentaire) qui sert dans l'applicatif à l'afficher si on appuie sur "/"
    Peut-être n'est 'il pas utile de les charger... et de passer par un chargement à la demande... (evenement keypress...)

Discussions similaires

  1. optimisation décalage par rapport à multiplication
    Par ft1103 dans le forum Embarqué
    Réponses: 4
    Dernier message: 08/04/2013, 21h30
  2. Réponses: 9
    Dernier message: 18/02/2011, 13h17
  3. [MATH] Point par rapport à une droite
    Par teska dans le forum Mathématiques
    Réponses: 6
    Dernier message: 14/05/2003, 16h11
  4. Les possibilité que C++ offre par rapport à Pascal Objet
    Par Riko dans le forum Langages de programmation
    Réponses: 13
    Dernier message: 01/02/2003, 21h38
  5. [Choix] Quelles attentes par rapport aux SGBD ?
    Par thierry34 dans le forum Décisions SGBD
    Réponses: 6
    Dernier message: 13/07/2002, 20h08

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