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

MS SQL Server Discussion :

Recherche de plan d'optimisation


Sujet :

MS SQL Server

  1. #1
    Candidat au Club
    Homme Profil pro
    reseau et informatique
    Inscrit en
    avril 2017
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : avril 2017
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Recherche de plan d'optimisation
    Je suis actuellement sur un projet BI, et j'ai besoin de votre expertise. J'ai trois table sur une même instance sql avec les volumétries suivantes :
    -Table 1 : Plus de 10 millions de ligne
    -Table 2 : Plus de 60 millions de ligne
    -Table 3 : Plus de 320 millions de ligne
    Trois pachages déployés sur un autre serveur insèrent des données chaque 30mn dans ses tables.
    J'attaque ces tables depuis Power BI report builder via des procédures stockées. Je suis confronté à un problème de performance. Comme solution, j'ai opté pour le partionning en filegroup et après création des index cluster sur ide_date. Cette solution marche apparemment pour les deux premières tables pour lesquelles, j'ai un temps de réponse relativement bon. Mais les rapports basé sur la table 3 sont toujours lent lorsque je fais des analyses sur plusieurs mois. Pour cette table 3, j'ai crée une partition pour chaque jours soit une moyenne de 3 millions de lignes par partition et un total de 204 partitions.
    je viens solliciter votre aide à travers vos conseils et bonne attitude à appliquer. Ci joint un exemple de code de procédure stocké que j’exécute depuis le rapport en fonction des paramètres saisi

    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
    ALTER PROCEDURE [dbo].[USP_DIFFERENTIAL_PRESSURE]
     
    	@VARIABLE VARCHAR(MAX)
    	,@TYPE_PERIODE INT
    	,@DATE_DEBUT DATE, @DATE_FIN DATE	
    	,@HEURE_DEBUT VARCHAR(8), @HEURE_FIN VARCHAR(8)	
    AS
    BEGIN
     
    DECLARE 
    @VAR_VARIABLE VARCHAR(MAX) = @VARIABLE
    ,@VAR_TYPE_PERIODE INT = @TYPE_PERIODE
    ,@VAR_DATE_DEBUT INT = cast(convert(varchar(8),cast(@DATE_DEBUT as date),112) as int)
    ,@VAR_DATE_FIN INT = cast(convert(varchar(8),cast(@DATE_FIN as date),112) as int)
    ,@VAR_HEURE_DEBUT VARCHAR(8) = @HEURE_DEBUT, @VAR_HEURE_FIN VARCHAR(8) = @HEURE_FIN
     
    select 
    s.Code_Site, s.Libelle_Site
    ,cl.Code_Client, cl.Libelle_Client
    ,e.Code, e.Libelle_Equipement
    ,u.Unite, f.Ide_Date
    ,cast(cast(f.Ide_Date as varchar(8)) as date) Date_Jour
    ,f.Heure_Complete
    ,f.Heure  
    ,f.Heure+':'+f."Minute" Heure_Minute
    ,f."Minute"
    ,f.Seconde
    ,@VAR_TYPE_PERIODE Type_Periode
    ,v.Variables
    ,f.Differential_Press 
    from FAIT_COMPT_GAZ_LIVRE f
    join DIM_VARIABLE v on f.Ide_Variable = v.Ide_Variable
    join DIM_SITE s on f.Ide_Terminal = s.Ide_Site
    join DIM_CLIENT cl on f.Ide_Clients = cl.Ide_Client
    join DIM_EQUIPEMENT e on f.Ide_Equipements = e.Ide_Equipement
    join DIM_UNITE u on f.Ide_Unite = u.Ide_Unite
    where 
    f.Ide_Date between @VAR_DATE_DEBUT and @VAR_DATE_FIN
    and f.Heure_Complete between @VAR_HEURE_DEBUT and @VAR_HEURE_FIN
    and CHARINDEX(',' + CAST(f.Ide_Variable AS VARCHAR(MAX)) + ',', ',' + REPLACE(@VAR_VARIABLE, ' ', '') + ',' ) > 0
    order by f.Ide_Date, f.Heure, f."Minute", f.Seconde
    END

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Ingénieur d'études décisionnel
    Inscrit en
    mai 2002
    Messages
    8 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : mai 2002
    Messages : 8 269
    Points : 26 746
    Points
    26 746
    Par défaut
    Je suppose que le premier paramètre est une liste d'identifiants séparés par une virgule
    Il faudrait commencer par transformer cette liste en table (temporaire) sur laquelle faire une jointure...
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    octobre 2002
    Messages
    928
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : octobre 2002
    Messages : 928
    Points : 1 116
    Points
    1 116
    Par défaut
    Bonjour,
    Pour al1_24, mettre le contenu de @VARIABLE en table temporaire pourrait aider , mais à condition de normaliser aussi DIM_VARIABLE.
    Le problème tel que je le vois c'est que mettons que dans dim_variable il y ait A,B,C,D, et que dans @variable il y ait B,C on veut récupérer la valeur, mais s'il y a C,B on ne veut pas l'avoir, il faut donc aussi un ordre.
    [edit] à la relecture j'ai l'impression que c'est le contraire
    dans dim_variable il y B,C et dans @variable A,B,C,D
    [/edit]
    Si Dim_variable est petite, on pourrait décomposer le problème en deux.
    Mettre dans une table temporaire les Ide_Variable correspondants au critère.
    puis faire la requête en joignant sur la table temporaire.
    Mais j'ai l'impression comme al1_24 que le problème réside surtout sur dim_variable.
    Cordialement
    Soazig

  4. #4
    Membre expérimenté
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    septembre 2016
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : Conseil

    Informations forums :
    Inscription : septembre 2016
    Messages : 677
    Points : 1 302
    Points
    1 302
    Par défaut
    Bonsoir,

    Citation Envoyé par diallochercheur Voir le message
    Comme solution, j'ai opté pour le partionning en filegroup et après création des index cluster sur ide_date. Cette solution marche apparemment pour les deux premières tables pour lesquelles, j'ai un temps de réponse relativement bon. Mais les rapports basé sur la table 3 sont toujours lent lorsque je fais des analyses sur plusieurs mois.
    Est-ce que le plan d’exécution montre l'utilisation du partitionnement ?
    Si non, il faut se poser les bonnes questions
    Le savoir est une nourriture qui exige des efforts.

Discussions similaires

  1. Recherche Composant Planning Freeware pour D7PE
    Par petitprince dans le forum Composants VCL
    Réponses: 76
    Dernier message: 30/08/2011, 09h25
  2. aide sur recherche de plan de mémoire
    Par mptijr dans le forum Stages
    Réponses: 0
    Dernier message: 17/10/2009, 12h12
  3. [Calendrier] recherche script planning location
    Par vivh349 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 11/10/2009, 22h16
  4. Réponses: 1
    Dernier message: 03/02/2009, 02h23

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