Précédent   Forum des professionnels en informatique > Bases de données > MS SQL-Server > Administration
Administration Forum d'entraide sur l'administration du dataserver, via SSM ou ligne de commande, les tables système, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/03/2011, 14h35   #1
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
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,
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 14h59   #2
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
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 :
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 :
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 ?
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 15h11   #3
Responsable SQL Server

 
Avatar de mikedavem
 
Homme David BARBARIN
Expert SQL Server
Inscription : août 2005
Messages : 3 723
Détails du profil
Informations personnelles :
Nom : Homme David BARBARIN
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Expert SQL Server
Secteur : Conseil

Informations forums :
Inscription : août 2005
Messages : 3 723
Points : 6 844
Points : 6 844
Bonjour,

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

++
mikedavem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 16h33   #4
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
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
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 17h14   #5
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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.
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 20h01   #6
Rédacteur/Modérateur

 
Avatar de SQLpro
 
Homme Frédéric BROUARD
Expert SGBDR & SQL
Inscription : mai 2002
Messages : 10 953
Détails du profil
Informations personnelles :
Nom : Homme Frédéric BROUARD
Localisation : France

Informations professionnelles :
Activité : Expert SGBDR & SQL
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 10 953
Points : 17 773
Points : 17 773
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
Site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
Blog SQL, SQL Server, modélisation données : http://blog.developpez.com/sqlpro
http://www.sqlspot.com : modélisation, conseils, audit, optimisation, formation
* * * * * Enseignant CNAM PACA - ISEN Toulon - CESI Aix en Provence * * * * *
SQLpro est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/03/2011, 20h03   #7
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 09h43   #8
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
Bonjour à tous,

Voici les statistiques IOpassée :
Code :
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 :
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,
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 10h15   #9
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
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 :
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
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 10h34   #10
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
Est-il possible de poster la requête associée à ce plan stp ?
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 10h49   #11
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
la voici :
Code :
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
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h10   #12
Membre chevronné
 
David BAFFALEUF
Inscription : février 2008
Messages : 612
Détails du profil
Informations personnelles :
Nom : David BAFFALEUF
Localisation : France

Informations forums :
Inscription : février 2008
Messages : 612
Points : 746
Points : 746
Il manque des critères:

Code :
WHERE    artip.sgltop =   'O' AND (...)
__________________
David B.
dbaffaleuf est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h11   #13
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
Citation:
Envoyé par dbaffaleuf Voir le message
Il manque des critères:

Code :
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
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h41   #14
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h44   #15
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
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.
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/03/2011, 11h47   #16
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Déjà ce join ne sert à rien:

Code :
LEFT JOIN sgl_champ ON sgl_champ.sglnum = artip.sglnum
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/03/2011, 11h01   #17
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
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é ?)

Citation:
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 ?
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 17h31   #18
Candidat au titre de Membre du Club
 
Homme Cyril CHARLIER
Chef de projet NTIC
Inscription : mai 2005
Messages : 21
Détails du profil
Informations personnelles :
Nom : Homme Cyril CHARLIER
Âge : 32
Localisation : France, Marne (Champagne Ardenne)

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

Informations forums :
Inscription : mai 2005
Messages : 21
Points : 10
Points : 10
Envoyer un message via AIM à kyrilkarlier Envoyer un message via MSN à kyrilkarlier
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 "/"
kyrilkarlier est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 17h54   #19
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Passez ces colonnes en VARCHAR(MAX), ça sera déjà un bon début
aieeeuuuuu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/04/2011, 21h01   #20
Membre Expert
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 299
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 30
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 299
Points : 2 282
Points : 2 282
Envoyer un message via MSN à iberserk
Citation:
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...)
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h50.


 
 
 
 
Partenaires

Hébergement Web