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 :

Identity(1,1) qui fait n'importe quoi


Sujet :

Administration SQL Server

  1. #1
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut Identity(1,1) qui fait n'importe quoi
    Bonjour à tous,

    Nous avons récupéré une application en Access dont les tables proviennent d'une base MS SQL Server ayant au moins 10 ans d'existence.

    Il y a une table dont la colonne servant de clé primaire est définie en tant que : int (4) avec une "identity (1,1).

    Étonnamment, arrivé à 12528, l'auto incrément est passée à 13528, puis ensuite à 14528 etc... alors qu'on a toujours (1,1) en définition d'identity.

    Ne connaissant pas trop MS SQL Server, j'avoue que je patauge un peu sur ce problème. Auriez vous déjà vu ce genre de phénomène ? Avez-vous une piste pour remettre d'aplomb l'auto incrément ?

    Merci d'avance.

  2. #2
    Membre expérimenté Avatar de AaâÂäÄàAaâÂäÄàAaâÂäÄ
    Homme Profil pro
    db@
    Inscrit en
    Septembre 2021
    Messages
    486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : db@

    Informations forums :
    Inscription : Septembre 2021
    Messages : 486
    Points : 1 443
    Points
    1 443
    Par défaut
    Citation Envoyé par Soticca Voir le message
    int (4)
    Tiens, un nouveau type de données SQL Server que je ne connaissais pas

    Citation Envoyé par Soticca Voir le message
    Étonnamment, arrivé à 12528, l'auto incrément est passée à 13528, puis ensuite à 14528 etc... alors qu'on a toujours (1,1) en définition d'identity.
    Si votre application a «réserver» 10000 id qui n'ont pas été validé, c'est normale que l'on fasse un saut de 10000 dans la colonne ensuite.
    Cela dit ça ressemble également très fort au comportement d'une colonne définie avec un identity(1, 10000).

    Citation Envoyé par Soticca Voir le message
    Auriez vous déjà vu ce genre de phénomène ? Avez-vous une piste pour remettre d'aplomb l'auto incrément ?
    Vérifier comment votre applicatif insère les données dans la bd.
    Vérifier aussi la définition de votre colonne.
    Et il ne faut pas oublier qu'au final une pk n'a pas de sens fonctionnel, donc ça ne devrait même pas être un problème d'avoir une suite non continue.

  3. #3
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    Bonjour,

    Je sais bien qu'une PK ne devrait pas avoir de signification fonctionnelle malheureusement, quand on reprend une application on "subit" les structures qui ont été mise en place et je confirme que l'identity est bien définie en (1,1).

    C'est Access qui insère la nouvelle ligne via du code standard sans aucun recalcul ou quoi que ce soit d'autre.

    D'ailleurs, depuis que j'ai posté ce message on est repassé en pas de 1 Donc maintenant on a 12358, 13358, 14358 puis 14359, 14360, 14361 etc...

    Cette application n'ayant pas pour vocation à survivre à l'année 2024, on va continuer à surveiller sans plus.

    Merci pour la réponse.

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    Possiblement, un traitement qui commit ses insertions par paquets de 1 000 a fait des rollback, auquel cas, les identifiants non commités sont perdus, ça expliquerait les trous de 1 000 successifs.
    Un redémarrage de serveur peut également vider le cache et faire perdre des valeurs, mais en ce cas, on n'aurait pas des "trous" de même taille.

    Une remarque : la notion d'auto_increment est un terme spécifique à MySQL / MariaDB. SQL server utilise des IDENTITY

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 872
    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 : 21 872
    Points : 53 034
    Points
    53 034
    Billets dans le blog
    6
    Par défaut
    Ce saut est généré par la mise en cache de l'auto-incrémentation par IDENTITY... qui travaille de 10 000 en 10 000 pour des rasions de performances.

    Vous pouvez le désactiver avec la commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF;
    Néanmoins, je ne le ferais personnellement jamais....
    Mais si vous voulez vous assoir sur les performances.....

    A +

  6. #6
    Membre actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2015
    Messages
    142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juillet 2015
    Messages : 142
    Points : 236
    Points
    236
    Par défaut
    Merci pour les réponses.

    Petite question sur la mise en cache pour ma gouverne personnelle. Quelle est la raison de son exécution sachant que ce n'est pas une table contenant beaucoup de ligne ? (aucune envie de désactiver cette fonctionnalité)

  7. #7
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 311
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 311
    Points : 39 677
    Points
    39 677
    Billets dans le blog
    9
    Par défaut
    La mise en cache a pour but d'éviter de solliciter le moteur à chaque insertion, les performances en sont augmentées, mais, en contrepartie, il peut y avoir des pertes en cas de redémarrage du serveur.

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

Discussions similaires

  1. Compte admin qui me fait n'importe quoi.
    Par 6bil1 dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 02/07/2009, 13h33
  2. Calcul automatique qui fait n'importe quoi
    Par renaud26 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 26/03/2009, 15h14
  3. TextWriter qui écrit n'importe quoi
    Par mioux dans le forum ASP.NET
    Réponses: 7
    Dernier message: 04/03/2009, 09h25
  4. [débutant] set linesize me fait n'importe quoi
    Par Mathusalem dans le forum Oracle
    Réponses: 6
    Dernier message: 20/04/2006, 16h22

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