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

Microsoft Azure Discussion :

Sql Database : utlisation du type UNIQUEIDENTIFIER


Sujet :

Microsoft Azure

  1. #1
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut Sql Database : utlisation du type UNIQUEIDENTIFIER
    Hello tout le monde.

    Je viens chercher l'avis de la communauté car le travail sur Azure, c'est nouveau pour moi...

    Voici le contexte... Je reprends un projet et dans ce projet, le type UNIQUEIDENTIFIER a été utilisé partout. Chaque table a sa PK avec ce type.

    Au départ, j'ai crié à l'hérésie en pensant aux indexes puis j'ai vu que la fonction NEWSEQUENTIALID est utilisée partout aussi donc à priori, ça passe vu les guid créés sont donc séquentiels.

    Puis aujourd'hui, je tombe sur la page qui document la fonction NEWSEQUENTIALID.

    Page dans laquelle je peux lire ceci :
    Creates a GUID that is greater than any GUID previously generated by this function on a specified computer since Windows was started. After restarting Windows, the GUID can start again from a lower range, but is still globally unique. When a GUID column is used as a row identifier, using NEWSEQUENTIALID can be faster than using the NEWID function. This is because the NEWID function causes random activity and uses fewer cached data pages. Using NEWSEQUENTIALID also helps to completely fill the data and index pages.
    A la fin de ce paragraphe, le point que je soulevais pour les indexes est indiqué donc c'est ok.

    Par contre, la partie que j'ai mise en gras m'inquiète fortement.
    Comment cela est-il géré sur azure ? Qu'est-ce qui détermine si un serveur sql azure est redémarré ? Faut-il souscrire à une option, un plan particulier pour qu'il ne redémarre jamais sous peine d'avoir un jour un NEWSEQUENTIALID qui soit en plein milieu de l'index ? Le projet en question, c'est de l'iot donc niveau masse de donnée, ça envoie du paté... (enfin ça va envoyer, ce n'est encore que le début pour le moment)

    Voilà, si quelqu'un de coutumier avec Azure pouvait éclairer ma lanterne, ce serait cool.

    Merci d'avance.
    Kropernic

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Au départ, j'ai crié à l'hérésie en pensant aux indexes puis j'ai vu que la fonction NEWSEQUENTIALID est utilisée partout aussi donc à priori, ça passe vu les guid créés sont donc séquentiels.
    Les UNIQUEIDENTIFIER sont surtout problematiques lorsqu'ils sont utilises avec un UNIQUE CLUSTERED INDEX (ce qui est le cas par defaut lorsqu'une Clef Primaire est creee dans SQL Server).

    Citation Envoyé par Kropernic Voir le message
    Par contre, la partie que j'ai mise en gras m'inquiète fortement.
    Comment cela est-il géré sur azure ? Qu'est-ce qui détermine si un serveur sql azure est redémarré ? Faut-il souscrire à une option, un plan particulier pour qu'il ne redémarre jamais sous peine d'avoir un jour un NEWSEQUENTIALID qui soit en plein milieu de l'index ? Le projet en question, c'est de l'iot donc niveau masse de donnée, ça envoie du paté... (enfin ça va envoyer, ce n'est encore que le début pour le moment)
    Avec SQL Server on-premises ca peut arriver lorsqu'Always On est actif, et que la base de donnees failover. Sur Azure, je ne sais pas comment c'est gere.

    Si tu as souscrit au support Azure je te conseille de creer un ticket et de voir leur reponse. Sinon, tu peux poster ta question tout en bas de l'article dans les commentaires, mais ca peut prendre quelques jours pour avoir une reponse…
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 239
    Points
    4 239
    Par défaut
    Citation Envoyé par DotNetMatt Voir le message
    Les UNIQUEIDENTIFIER sont surtout problematiques lorsqu'ils sont utilises avec un UNIQUE CLUSTERED INDEX (ce qui est le cas par defaut lorsqu'une Clef Primaire est creee dans SQL Server).
    Ce qui est, bien sûr, le cas partout .
    Ce qui m'a été avancé comme argument quand j'ai posé la question du pourquoi le guid, c'était essentiellement car c'était comme ça quand ils ont reçu la base de code (car c'était la 2e société de consultance qui passait dessus) mais aussi pcq c'était plus difficile à bidouiller quand il est passé en querystring... Argument totalement bidon selon moi.

    Citation Envoyé par DotNetMatt Voir le message
    Avec SQL Server on-premises ca peut arriver lorsqu'Always On est actif, et que la base de donnees failover. Sur Azure, je ne sais pas comment c'est gere.

    Si tu as souscrit au support Azure je te conseille de creer un ticket et de voir leur reponse. Sinon, tu peux poster ta question tout en bas de l'article dans les commentaires, mais ca peut prendre quelques jours pour avoir une reponse…
    Je vais devoir regarder ce qu'on a droit comme support à ce niveau-là car c'est facturé via la boîte de consultance qui elle-même est facturée en CSP.

    De toute façon, tant que ça fonctionne et que ça n'est pas catastrophique au niveau de l'environnement de prod pour les perfs, ça va rester comme ça tant qu'on fait pas une version 2. Et on n'est pas encore vraiment à la version 1
    Kropernic

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Points : 9 743
    Points
    9 743
    Billets dans le blog
    3
    Par défaut
    Citation Envoyé par Kropernic Voir le message
    Ce qui est, bien sûr, le cas partout .


    Cela dit, il n'y a rien de mal a utiliser le type UNIQUEIDENTIFIER pour une clef primaire, il faut juste veiller a avoir le bon type d'index, et a garder un oeil sur la fragmentation (i.e. rebuilder les index souvent). A la clef, c'est pour economiser de l'espace disque et ameliorer les performances des requetes SELECT principalement.

    Il y a un tres bon article de Kimberly Tripp (la reine des index) a ce sujet : GUIDs as PRIMARY KEYs and/or the clustering key.

    Citation Envoyé par Kropernic Voir le message
    ça n'est pas catastrophique au niveau de l'environnement de prod pour les perfs
    C'est surtout sur les grosses volumetries que l'impact est sensible. Par contre, quelle que soit la volumetrie, ca peut contribuer a augmenter legerement ta facturation sur Azure vu que tu vas consommer un peu plus de DTU.
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

Discussions similaires

  1. Réponses: 5
    Dernier message: 03/07/2009, 10h38
  2. [SQL Server] Donnee de type text dans un GROUP BY non permis
    Par Tartenpion dans le forum Langage SQL
    Réponses: 5
    Dernier message: 06/03/2006, 17h31
  3. [PL/SQL 9i] Tester le type d'une donnée
    Par tomca dans le forum Oracle
    Réponses: 10
    Dernier message: 29/09/2005, 09h17
  4. Réponses: 4
    Dernier message: 30/01/2005, 14h23
  5. [MS-SQL][ADO] précision du type FLOAT
    Par Le Lézard dans le forum Bases de données
    Réponses: 2
    Dernier message: 23/09/2004, 15h30

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