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 :

Index Columstore question


Sujet :

Administration SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Par défaut Index Columstore question
    Bonjour a Tous

    Nous allons migrer la partie BI de SQL 2008 R2 a 2014

    J'avais des questions concernant les columstore :

    - Faut il indexer toutes les colonnes non-clustered ?
    - faut il remplacer les index clustered par ceux des index columstore

    Je dis ca car je fais des tests et c'est pas tres probant , je dois surement mal m'y prendre...

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 010
    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 010
    Billets dans le blog
    6
    Par défaut
    Les index columnstore sont read only et dépendent de ce que vous voulez faire en matière de BI. Si votre DW est alimenté en scrtah and go alors c'est adapté. Si alimenté en différentiel alors éventuellement un index CLUSTERED COLUMNSTORE. Dans tous les cas il faut tester avec une vrai charge !

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

  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
    Hello,

    - Faut il indexer toutes les colonnes non-clustered ?
    - faut il remplacer les index clustered par ceux des index columstore
    Avec 2014, tu peux créer un index clustered columnstore donc toutes les colonnes seront incluses by design
    Donc soit tu auras un index clustered columnstore soit un index cluster classique


    Je dis ca car je fais des tests et c'est pas tres probant , je dois surement mal m'y prendre...
    Les index columnstore ne sont pas forcément adaptés à toutes les situations.
    Peux-tu préciser ton contexte, une requête et éventuellement un plan d'exécution dans une situation où le gain de performance n'est pas probant?

    ++

  4. #4
    Membre chevronné
    Homme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Décembre 2007
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Décembre 2007
    Messages : 327
    Par défaut
    Je confirme que les index Columnstore ne sont pas toujours utile et n'ameliorent pas toujours les perf ...

    Il faut les utiliser dans certains cas, peux tu nous founir des exemples de cas d'utilisation ?

    Merci

  5. #5
    Membre éclairé Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Par défaut
    ce n'est pas probant car une vue qui met normalement 3 minutes mets plus de 4 minutes apres la creation de l'index columstore non clustered sur la table :

    le nombre de pages lues avant la creation de l'index :

    Table 'TR_REGROUPEMENT_RGR'. Nombre d'analyses 7279402, lectures logiques 14558804, lectures physiques 0, lectures anticipées 0, lectures logiques de données d'objets volumineux 0, lec

    Apres creation de l'index Columstore sur la meme colonne :

    Table 'TR_REGROUPEMENT_RGR'. Scan count 14667440, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 104, lob physical reads 0, lob read-ahead reads 0.
    Table 'TR_REGROUPEMENT_RGR'. Segment reads 7333720, segment skipped 0.

    Je precise qu'il y a un index clustered sur la table, mais qui n'est pas bien sur, sur la meme colonne

  6. #6
    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
    ce n'est pas probant car une vue qui met normalement 3 minutes mets plus de 4 minutes apres la creation de l'index columstore non clustered sur la table :
    J'imagine Mais ici pour t'aider il nous faudra plus d'information sur le contexte. Est-ce que déjà tu peux nous donner la requête que tu exécutes? Le plan d'exécution réel ?

    PS: Si tu utilises SQLSentry et que tes informations sont sensibles tu peux d'abord anonymer avant de nous le fournir.

    ++

  7. #7
    Membre éclairé Avatar de olivtone
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2010
    Messages
    242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure et Loir (Centre)

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

    Informations forums :
    Inscription : Octobre 2010
    Messages : 242
    Par défaut
    ok ca marche et merci beaucoup de votre aide

    voici la requete :

    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
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    SELECT 
    			 INC.INC_ID_CONTRAT as CON_IdContratKey
    			 ,CON.CON_ID_CONTRAT as REN_IdRenouvKey
    			 ,INC.INC_ID_ADHESION as CON_IdContrat
    			 ,CNT.CNT_CD_CENTRE as CEN_CodeCentre
    			 ,CON.CON_NUMERO as CON_NumContrat
    			 ,PRD.PRD_CD_PRODUIT as PRD_CodeProduit
    			 ,INC.INC_DT_SOUSCRIPTION as CON_DateAdhesion
    			 ,INC.INC_DT_REALISATION as CON_DateRealisation
    			 ,CON.CON_DT_DEBUT as CON_DateDebutContrat
    			 ,CON.CON_DT_FIN as CON_DateFinDeContrat
    			 ,CON.CON_DUREE_CONTRAT as CON_DureeContrat
    			 ,CASE WHEN SUBSTRING(CMB.CMB_RESULTAT, 1, 2) = 'OK' 
    			 THEN 'OK'
    			 ELSE CASE WHEN CMB.CMB_ID_CONTRAT IS null 
    			 THEN 'NA'
    			 ELSE 'KO' 
    			 END 
    			 END as CON_StatutAppelBienvenue
    			 ,CON.CON_TOP_TACITE as CON_TopTacite
    			 ,CONVERT(CHAR(6), INC.INC_DT_SOUSCRIPTION, 112) as CON_EcheanceCourante
    			 ,CON.CON_NB_LIGNE - 1 as ECH_NbrRenouvCourante
    			 ,CASE WHEN CON.CON_NB_LIGNE = 1 
    			 THEN '-' ELSE 'M' END
    			 as CON_TypeEcheanceCourante
    			 ,ISNULL(CNR.CNR_CODE,'-') as TRE_TypeRenouvCourante
    			 ,CONVERT(CHAR(6), INC.INC_DT_REALISATION, 112) as CON_AnneeMoisDeRealisation
    			 --,CASE WHEN CRB.CRB_ID_COORDONNEES_BANCAIRES IS NOT NULL AND RGP3.RGP_LIB ='Eligible AP-LIV'
    			 /*,CASE WHEN INC0.INC_TOP_RIB in ('1','T') -- 23/09/2015 
    									AND RGP3.RGP_LIB ='Eligible AP-LIV'
    			 THEN '1' ELSE '0' END CON_TopDossierComplet*/
    			 -- 11/04/2016 -- TFS7743 - Revoir flag DC dans ODS (Tacite ou Tacite à venir)
    			 ,CASE WHEN CON0.CON_TOP_TACITE in ('1','2','3','5') AND RGP3.RGP_LIB ='Eligible AP-LIV' THEN '1' ELSE '0' END CON_TopDossierComplet
    			 ,CASE RSV.RSV_LIB WHEN 'Vente à distance' THEN '1' ELSE '0' END CON_TopVD
    			 ,INC.INC_NUM_REF_GED as CON_NumStock
    			 ,RSV_LIB CON_ReseauVente
    			 ,CON0.CON_NUM_REF_GED
    			 ,CON0.CON_OPTION_VINCI
    			 ,CNC_CD_USER+CNC_TYPE_CONTACT Code_APPAFF
    FROM dbo.T_CONTRAT_CON CON with (nolock)
    INNER join T_CONTRAT_CON CON0 with (nolock)
     ON CON.INC_ID_CONTRAT=CON0.INC_ID_CONTRAT 
     and CON0.CON_NB_LIGNE=1
    INNER JOIN dbo.T_INFOS_CONTRAT_INC INC with (nolock)
     ON CON.INC_ID_CONTRAT = INC.INC_ID_CONTRAT 
     AND INC.INC_ID_ADHESION IS NOT NULL
    INNER JOIN dbo.T_INFOS_CONTRAT_INC INC0 with (nolock)
    	ON CON0.INC_ID_CONTRAT = INC0.INC_ID_CONTRAT 
    	AND INC0.INC_ID_ADHESION IS NOT NULL
    INNER JOIN T_PRODUIT_PRD PRD with (nolock)
     ON CON.PRD_ID_PRODUIT = PRD.PRD_ID_PRODUIT
    LEFT JOIN TJ_REGROUPEMENT_PRODUIT_RGP RGP3 with (nolock)
     ON PRD.PRD_ID_PRODUIT = RGP3.PRD_ID_PRODUIT
     AND RGP3.RGR_ID_REGROUPEMENT = (SELECT RGR_ID_REGROUPEMENT FROM TR_REGROUPEMENT_RGR WHERE RGR_ID_SOURCE='3')
    LEFT JOIN dbo.TR_CANAL_RENOUVELLEMENT_CNR CNR with (nolock)
     ON CON.CNR_ID_CANAL_RENOU = CNR.CNR_ID_CANAL_RENOU
    LEFT OUTER JOIN (
     SELECT distinct CMB.CMB_ID_CONTRAT, CMB.CMB_RESULTAT
     from adhexp.T_CAMPAGNE_BIENVENUE_CMB CMB with (nolock)
     join (
     select distinct CMB_ID_CONTRAT, MAX(CMB_DT_APPEL) as CMB_DT_APPEL
     from adhexp.T_CAMPAGNE_BIENVENUE_CMB with (nolock)
     group by CMB_ID_CONTRAT
     ) MCM
     on CMB.CMB_ID_CONTRAT = MCM.CMB_ID_CONTRAT
     and CMB.CMB_DT_APPEL = MCM.CMB_DT_APPEL
     ) CMB
     ON INC.INC_ID_ADHESION = CMB.CMB_ID_CONTRAT
    INNER JOIN dbo.TJ_CONTRAT_INDIVIDUS_CNI AS CNICENTRE with (nolock)
     ON CNICENTRE.CON_ID_CONTRAT = CON.INC_ID_CONTRAT
     AND CNICENTRE.CNI_TOP_DERNIER_ACTEUR_ROLE = '1'
     AND CNICENTRE.RLI_ID_ROLE_INDIVIDU = (SELECT RLI_ID_ROLE_INDIVIDU FROM DBO.TR_ROLE_INDIVIDU_RLI WHERE RLI_LIB = 'Distributeur')
    INNER JOIN dbo.T_INDIVIDU_IND IND with (nolock)
     ON CNICENTRE.IND_ID_INDIVIDU = IND.IND_ID_INDIVIDU
    INNER JOIN dbo.T_CENTRE_CNT CNT with (nolock)
     ON CNT.CNT_ID_CENTRE = IND.CNT_ID_CENTRE
    INNER JOIN dbo.TR_RESEAU_VENTE_RSV RSV with (nolock)
     ON INC.RSV_ID_RESEAU_VENTE = RSV.RSV_ID_RESEAU_VENTE
    INNER JOIN dbo.TJ_CONTRAT_INDIVIDUS_CNI AS CNIADH with (nolock)
     ON CNIADH.CON_ID_CONTRAT = CON.INC_ID_CONTRAT
     AND CNIADH.CNI_TOP_DERNIER_ACTEUR_ROLE = '1'
     AND CNIADH.RLI_ID_ROLE_INDIVIDU = (SELECT RLI_ID_ROLE_INDIVIDU FROM DBO.TR_ROLE_INDIVIDU_RLI WHERE RLI_LIB = 'Adhérent')
    LEFT OUTER JOIN dbo.T_COORDONNEES_BANCAIRES_CRB CRB with (nolock)
     ON CRB.IND_ID_INDIVIDU = CNIADH.IND_ID_INDIVIDU
     AND CRB.CRB_TOP_PRINCIPAL = '1'
     
    left JOIN dbo.TJ_CONTRAT_INDIVIDUS_CNI AS ConAPPAFF with (nolock)
     ON ConAPPAFF.CON_ID_CONTRAT = CON.INC_ID_CONTRAT
     AND ConAPPAFF.CNI_TOP_DERNIER_ACTEUR_ROLE = '1'
     AND ConAPPAFF.RLI_ID_ROLE_INDIVIDU = (SELECT RLI_ID_ROLE_INDIVIDU FROM DBO.TR_ROLE_INDIVIDU_RLI WHERE RLI_LIB = 'Apporteur d''affaire')
    left JOIN dbo.T_INDIVIDU_IND APPAFF with (nolock)
     ON ConAPPAFF.IND_ID_INDIVIDU = APPAFF.IND_ID_INDIVIDU
    left join T_CONTACT_CENTRE_CNC CNC
     ON CNC.CNC_ID_CONTACT_CENTRE=APPAFF.CNC_ID_CONTACT_CENTRE
     
    WHERE
     (CON.CON_DT_CREATION_SYS >= DATEADD(DAY, -90, GETDATE())
     OR CON.CON_DT_MODIFICATION_SYS >= DATEADD(DAY, -90, GETDATE())
     OR CNICENTRE.CNI_DT_CREATION_SYS >= DATEADD(DAY, -90, GETDATE())
     OR CRB_DT_CREATION_SYS >= DATEADD(DAY, -90, GETDATE())
     OR CRB.CRB_DT_MODIFICATION_SYS >= DATEADD(DAY, -90, GETDATE())
     )
    --CON.CON_ID_CONTRAT='7FDE079C-6DC1-449B-9626-75486D290B30'
    AND 
    CON.CON_TOP_DERNIERE_LIGNE = '1'
    voici les plans d'executions avant et apres la creation de l'index columstore
    Images attachées Images attachées   

Discussions similaires

  1. [débutant] questions - regroupement indexes et jobs ?
    Par nagty dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 21/07/2005, 08h17
  2. Question sur les index
    Par barok dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 31/05/2005, 08h06
  3. [DB2] Question sur les index et les vues
    Par ahoyeau dans le forum DB2
    Réponses: 1
    Dernier message: 14/03/2005, 08h30
  4. Questions sur les indexations
    Par freud dans le forum Bases de données
    Réponses: 2
    Dernier message: 11/05/2004, 11h38
  5. question sur les vertex buffer et index buffer
    Par airseb dans le forum DirectX
    Réponses: 9
    Dernier message: 25/08/2003, 02h38

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