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

Développement SQL Server Discussion :

UniqueIdentifier et fragmentation des données


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut UniqueIdentifier et fragmentation des données
    bonjour, j'ai un petit problème que je compte résoudre par une solution que je souhaite soumettre à vos avis éclairés:

    Nous avons une base de données dont environ 80% des tables ont pour clé primaire un UNIQUEIDENTIFIER sur lequel est défini l'index clustered.
    Ces clés sont générées de façon non séquentielle par une application. Pourquoi? parce que cela permet aux développeurs de pouvoir insérer les clés étrangères sans avoir à faire de SELECT pour les récupérer puisqu'elles sont générées avant insertion dans la base.

    C'est pratique, mais provoque une fragmentation importante, à cause du fait que l'index clustered est sur ces colonnes. C'est un problème dont nous n'avions pas conscience à l'époque.

    Pour résoudre ce problème, sans modification de l'application, je pensais à la solution suivante, et j'aimerais avoir votre avis:

    - Ajouter dans mes tables un champ de type INT IDENTITY
    - Placer l'index clustered sur ce champ,
    - conserver la clé primaire sur le champ UNIQUEIDENTIFIER mais en changeant l'index Clustered en nonclustered.

    J'attends vos avis avec impatience.

  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 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Conserver ce GUID n'a aucun intérêt et engorge votre tables de données inutile qui grèveront les performances. De plus par sa nature, en l'indexant il sera toujours aussi fragmenté et vous serez obligé d'effectuer un maintenance draconienne. Mieux vaut donc s'en débarrasser définitivement.
    C'est le genre de stupidité que l'on rencontre chez les développeurs n'ayant pas de formation à la modélisation des données ni à l'administration des SGBDR.

    Lisez l'article que j'ai écrit à ce sujet :
    http://blog.developpez.com/sqlpro/p7...nt-le-verdict/

    Au passage pour récupérer un ID autoincrémenté il suffit d'interroger la fonction SCOPE_IDENTITY() et non @@IDENTITY. Pas besoin (et surtout ne pas le faire...) de faire un SELECT sur la table. En effet si quelqu'un d'autre ajoute une ligne au même moment en // alors vous récupérerez l'ID de l'autre utilisateur.


    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
    Membre averti
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Bâtiment

    Informations forums :
    Inscription : Décembre 2011
    Messages : 17
    Par défaut
    Merci pour ces explications.
    J'avais tout à fait conscience du fait que le type uniqueidentifier occupe beaucoup plus d'espace. C'est la notion de fragmentation que je n'avais pas intégrée au moment de la modélisation.

    Malheureusement, le mal est fait, et il parait difficile de demander aux développeurs aujourd'hui de refaire l'application.

    Le scope_identity est en effet intéressant, je ne connaissais que le @@Identitiy.

    Encore une question, je suis d'accord que l'index posé sur ce champ sera fragmenté, qu'il soit clustered ou non clustered mais ce qui m'importe aujourd'hui, dans l'urgence, c'est de limiter les effets négatifs de notre erreur. Confirmez-vous que le fait d'avoir de la fragmentation sur un index non clustered est moins pénalisant que de la fragmentation sur un index clustered et donc sur les données?

    D'avance merci.

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    22 002
    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 002
    Billets dans le blog
    6
    Par défaut
    OUI, si vous maintenez le GUID, passer le en index non clustered et avec un FILL FACTOR d 75%. Prévoyez une maintenance systématique des index (une fois par jour), par exemple avec les routines que j'ai données ici :
    http://blog.developpez.com/sqlpro/p8...es-index-et-s/

    Bien entendu utilisez un INT IDENTITY comme clef si vous êtes en 32 bits et un BIGINT si vous êtes en 64 bits.

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

  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 : 43
    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
    C'est le genre de stupidité que l'on rencontre chez les développeurs n'ayant pas de formation à la modélisation des données ni à l'administration des SGBDR.
    Et chez notre ami commun MICROSOFT dont c'est la technique de modélisation de base (par exemple toutes les tables générées pour leurs providers .NET:
    MEMBERSHIP,PROFIL,USERS/ROLES etc).

  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 002
    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 002
    Billets dans le blog
    6
    Par défaut
    Je sais bien hélas.... Rare sont aujourd'hui les personnes correctement formé à l'art de la modélisation. Et bien évidemment ça pète de partout. Aujourd'hui je suis en Suisse pour ce genre de chose... Pour ma part je suis tellement sollicité pour de tels problématiques, que j'augmente en continu mes tarifs. Actuellement mes devis d'audit sont à 1200 € la journée et si ça continu je vais passer à 1 500 au printemps... Parce que je n'ai plus de journée avant juillet !

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

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 23/02/2015, 10h03
  2. Activity envoyer des données aux fragment
    Par Rohan21 dans le forum Android
    Réponses: 1
    Dernier message: 21/01/2014, 01h03
  3. Transformer des données JSON en fragments HTML
    Par pitav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 23/10/2012, 15h50
  4. Fragmentation des fichiers de données et/ou de transactions
    Par tibal dans le forum Administration
    Réponses: 2
    Dernier message: 29/11/2010, 09h43
  5. Réponses: 2
    Dernier message: 18/12/2002, 10h30

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