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 :

Lenteur sur une requête d'extraction


Sujet :

Administration SQL Server

  1. #1
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut Lenteur sur une requête d'extraction
    bonjour

    j'ai eu aujord'huit une réclamation sur plantage successive d'application de gestion dédier pour gérer le Flux entré/sortie Magazin et du lenteur de traitement du donées
    en lanancant une trace de profiler sur le serveur SGBD je vien de détecter que le plantage s'apparait pendant l'execution de cette requéte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select p.id_PickList ,p.Num_PickList,l.id_LigneProduction ,l.CodeLigneProduction,s.id_Status,s.Code,p.Magasin ,(select COUNT(*) from Detail_PickList as d where d.id_PickList=p.id_PickList ) as 'Nombre Article', p.TypePickList ,UnitesFabrication.Code,UnitesFabrication.MAPA,p.[DateCreation],p.CodeProduit,p.[DateLivraison]  
    from PickLists as p inner join Status as s ON s.id_Status = p.id_Status  inner join LigneProduction as l ON l.id_LigneProduction = p.id_LigneProduction   inner join UnitesFabrication on l.id_UniteFabrication= UnitesFabrication.id_UniteFabrication  
    where s.Code='DEMANDER' AND (p.Magasin in ('VIC','INC') )
    en lancant une mesure d'attente je viens de détecter la présence de compteux CXPACKET ---->j'ai décider de désactiver le parallélisme ok
    mainteant je pause cette question pour nos experts qui a une idé sur une action pour optimiser cette requéte (temps d'execution 1000ms)
    ci joint le schéme des tables utlisées
    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
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    USE [SuiviMatiere]
    GO
     
    /****** Object:  Table [dbo].[PickLists]    Script Date: 22/02/2016 1:42:25 PM ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE TABLE [dbo].[PickLists](
    	[id_PickList] [int] IDENTITY(1,1) NOT NULL,
    	[Num_PickList] [nvarchar](50) NULL,
    	[id_LigneProduction] [int] NULL,
    	[id_Status] [int] NULL,
    	[Magasin] [nvarchar](200) NULL,
    	[DateCreation] [datetime] NULL,
    	[DateMAj] [datetime] NULL,
    	[TypePickList] [nvarchar](50) NULL,
    	[CodeProduit] [nvarchar](50) NULL,
    	[DateLivraison] [datetime] NULL,
    	[DateServi] [datetime] NULL,
    	[NbUSServi] [int] NULL,
    	[NbUSRecept] [int] NULL,
    	[Hostame] [nvarchar](50) NULL,
    	[Observation] [nvarchar](250) NULL,
    	[id_CauseServi] [int] NULL,
     CONSTRAINT [PK_PickLists] PRIMARY KEY CLUSTERED 
    (
    	[id_PickList] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 4) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    ALTER TABLE [dbo].[PickLists] ADD  CONSTRAINT [DF_PickLists_DateCreation]  DEFAULT (getdate()) FOR [DateCreation]
    GO
     
    ALTER TABLE [dbo].[PickLists] ADD  CONSTRAINT [DF_PickLists_DateMAj]  DEFAULT (getdate()) FOR [DateMAj]
    GO
     
    ALTER TABLE [dbo].[PickLists] ADD  CONSTRAINT [DF_PickLists_NbUSServi]  DEFAULT ((0)) FOR [NbUSServi]
    GO
     
    ALTER TABLE [dbo].[PickLists] ADD  CONSTRAINT [DF_PickLists_NbUSRecept]  DEFAULT ((0)) FOR [NbUSRecept]
    GO
     
    ALTER TABLE [dbo].[PickLists] ADD  CONSTRAINT [DF_PickLists_Hostame]  DEFAULT (host_name()) FOR [Hostame]
    GO
     
    ALTER TABLE [dbo].[PickLists]  WITH CHECK ADD  CONSTRAINT [FK_PickLists_CauseServi] FOREIGN KEY([id_CauseServi])
    REFERENCES [dbo].[CauseServi] ([id_CauseServi])
    GO
     
    ALTER TABLE [dbo].[PickLists] CHECK CONSTRAINT [FK_PickLists_CauseServi]
    GO
     
    ALTER TABLE [dbo].[PickLists]  WITH CHECK ADD  CONSTRAINT [FK_PickLists_LigneProduction] FOREIGN KEY([id_LigneProduction])
    REFERENCES [dbo].[LigneProduction] ([id_LigneProduction])
    GO
     
    ALTER TABLE [dbo].[PickLists] CHECK CONSTRAINT [FK_PickLists_LigneProduction]
    GO
     
    ALTER TABLE [dbo].[PickLists]  WITH CHECK ADD  CONSTRAINT [FK_PickLists_Status] FOREIGN KEY([id_Status])
    REFERENCES [dbo].[Status] ([id_Status])
    GO
     
    ALTER TABLE [dbo].[PickLists] CHECK CONSTRAINT [FK_PickLists_Status]
    GO
    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
    USE [SuiviMatiere]
    GO
     
    /****** Object:  Table [dbo].[Detail_PickList]    Script Date: 22/02/2016 1:42:54 PM ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE TABLE [dbo].[Detail_PickList](
    	[id_PickListDetail] [int] IDENTITY(1,1) NOT NULL,
    	[id_PickList] [int] NULL,
    	[Id_Produit] [int] NULL,
    	[Emplacement] [nvarchar](500) NULL,
    	[Quantite_demande] [int] NULL,
    	[id_statut] [int] NULL,
     CONSTRAINT [PK_Detail_PickList] PRIMARY KEY CLUSTERED 
    (
    	[id_PickListDetail] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 4) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
    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
    USE [SuiviMatiere]
    GO
     
    /****** Object:  Table [dbo].[LigneProduction]    Script Date: 22/02/2016 1:43:35 PM ******/
    SET ANSI_NULLS ON
    GO
     
    SET QUOTED_IDENTIFIER ON
    GO
     
    CREATE TABLE [dbo].[LigneProduction](
    	[id_LigneProduction] [int] IDENTITY(1,1) NOT NULL,
    	[CodeLigneProduction] [nvarchar](50) NULL,
    	[id_UniteFabrication] [int] NULL,
    	[etat] [bit] NOT NULL,
    	[Observation] [nvarchar](50) NULL,
    	[RobotTraitement] [nvarchar](50) NULL,
    	[DateCreation] [datetime] NULL,
    	[DateMaj] [datetime] NULL,
    	[Hostname] [nvarchar](50) NULL,
     CONSTRAINT [PK_LigneProduction] PRIMARY KEY CLUSTERED 
    (
    	[id_LigneProduction] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [PRIMARY]
    ) ON [PRIMARY]
     
    GO
     
    ALTER TABLE [dbo].[LigneProduction] ADD  CONSTRAINT [DF_LigneProduction_etat]  DEFAULT ((1)) FOR [etat]
    GO
     
    ALTER TABLE [dbo].[LigneProduction] ADD  CONSTRAINT [DF_LigneProduction_DateCreation]  DEFAULT (getdate()) FOR [DateCreation]
    GO
     
    ALTER TABLE [dbo].[LigneProduction] ADD  CONSTRAINT [DF_LigneProduction_DateMaj]  DEFAULT (getdate()) FOR [DateMaj]
    GO
     
    ALTER TABLE [dbo].[LigneProduction] ADD  CONSTRAINT [DF_LigneProduction_Hostname]  DEFAULT (host_name()) FOR [Hostname]
    GO
     
    ALTER TABLE [dbo].[LigneProduction]  WITH CHECK ADD  CONSTRAINT [FK_LigneProduction_UnitesFabrication] FOREIGN KEY([id_UniteFabrication])
    REFERENCES [dbo].[UnitesFabrication] ([id_UniteFabrication])
    GO
     
    ALTER TABLE [dbo].[LigneProduction] CHECK CONSTRAINT [FK_LigneProduction_UnitesFabrication]
    GO
    ci joint le plan d'execution du requéte

    merci
    Images attachées Images attachées  

  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 : 42
    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 371
    Points
    12 371
    Par défaut
    Bonjour,

    Ce n'est pas parce que l'on a le type d'attentes CXPACKET qui sort dans le type ayant cumulé le total d'attentes le plus élevé que c'est un problème.
    Par ailleurs, le cumul est global à l'instance, donc il se peut que d'autre requêtes soient la source du problème que vous avez.
    Ensuite cela dépend aussi du type de la charge de travail que l'instance supporte : plutôt OLTP, ou OLAP / entrepôt de données ?
    On peut tout à fait avoir un nombre d'attentes élevé mais de courte durée; l'inverse est effectivement un problème.
    Auriez-vous la sortie de la DMV sys.dm_os_wait_stats SVP ?

    Est-ce que désactiver la parallélisation au niveau de la requête à l'aide d'OPTION (MAXDOP 1) a rendu votre requête plus rapide à s'exécuter ?
    Si tel est le cas, il faut comprendre pourquoi l'optimiseur a fait le choix de la paralléliser.

    Merci d'avoir mis le DDL des tables et le plan; malheureusement :

    • Sans les données qui sont dans ces tables, on ne peut pas comprendre précisément ce qui s'est passé
    • Il se peut que même en ayant les données, nous n'ayons pas les mêmes statistiques de colonne et d'index que les vôtres
    • Une capture du plan d'exécution graphique ne permet pas de rentrer dans les détails de celui-ci

    Je vous invite donc à lire ce petit billet
    Si vous ne pouvez pas partager le plan sur le forum pour des raisons de confidentialité, ce qui est tout à fait normal, vous pouvez me le passer par message privé, et je le regarderai.

    @++

  3. #3
    Membre expérimenté

    Homme Profil pro
    Auditeur informatique
    Inscrit en
    Novembre 2014
    Messages
    815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Auditeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2014
    Messages : 815
    Points : 1 350
    Points
    1 350
    Billets dans le blog
    2
    Par défaut
    Bonjour
    il s'agit d'une base OLTP
    L'opération maxdop(1) a été changer au niveau de serveur
    la résulat de la requéte sys.dm_os_wait_stat pointe sur ces deux compteur SOS_SCHEDULER_YIELD et CXPACKET

    Juste une remarque dans le programe il y beaucoup d'appel au requétes adhoc car pas de proc stock dans la base
    je vous communique la résultat du compteur compilations/sec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select * from sys.dm_os_performance_counters
    where counter_name='SQL Compilations/Sec'
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    object_name	counter_name	instance_name	cntr_value	cntr_type
    SQLServer:SQL Statistics                                                                                                        	SQL Compilations/sec                                                                                                            	                                                                                                                                	114048077	272696576
    La plupart des requêtes sont des select (avec beaucoup d'union)
    alors je m oriente vers ce piste et je pause cette question Quel est l'impact sur la perfermence si tout mes requétes sont des requétes adhoc et est ce que ce ci explique cette charge de CPU ??
    Images attachées Images attachées  

Discussions similaires

  1. [10gR2] Problème de lenteur sur une requête
    Par daddy2014 dans le forum SQL
    Réponses: 1
    Dernier message: 15/07/2014, 18h18
  2. [9iR2] Lenteur sur une requête (non identifiée)
    Par tck-lt dans le forum Administration
    Réponses: 6
    Dernier message: 21/02/2013, 10h02
  3. Lenteur sur une requête avec jointure
    Par mister3957 dans le forum SQL
    Réponses: 16
    Dernier message: 13/08/2008, 13h10
  4. Problème sur une requête INSERT
    Par Marion dans le forum Langage SQL
    Réponses: 3
    Dernier message: 17/06/2003, 08h45
  5. problème sur une requête!!!!!
    Par Mcgrady_01 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 13/06/2003, 01h17

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