Maison >base de données >tutoriel mysql >Pourquoi ma colonne d'identité SQL Server 2012 s'incrémente-t-elle de 100 secondes après un redémarrage ?

Pourquoi ma colonne d'identité SQL Server 2012 s'incrémente-t-elle de 100 secondes après un redémarrage ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-23 14:41:09636parcourir

Why Does My SQL Server 2012 Identity Column Increment by 100s After a Restart?

Problème de croissance anormale de la colonne d'auto-incrémentation dans SQL Server 2012

Dans SQL Server 2012, un comportement inhabituel a été observé : la valeur d'auto-incrémentation de la colonne "ReceiptNo" dans la table "Fee" sautait par intermittence de 100. Ceci n’est pas cohérent avec le modèle d’incrémentation habituel des colonnes à incrémentation automatique.

Détails du comportement anormal :

  • Le saut d'auto-incrémentation augmente de 100, mais les trois derniers chiffres restent les mêmes (par exemple, 306).
  • Ce comportement est déclenché après le redémarrage de l'ordinateur.

Raison :

Ce comportement est le résultat des améliorations de performances introduites dans SQL Server 2012. Par défaut, la base de données met désormais en cache 1 000 valeurs lors de l'attribution d'une valeur d'incrémentation automatique à une colonne int. Après un redémarrage, les valeurs mises en cache inutilisées peuvent être perdues, provoquant des interruptions dans la séquence d'auto-incrémentation.

Référence du document :

Description de la documentation SQL Server :

"Pour des raisons de performances, SQL Server peut mettre en cache les valeurs d'auto-incrémentation, et lors d'une panne de base de données ou d'un redémarrage du serveur, certaines valeurs attribuées peuvent être perdues... Cela peut entraîner des écarts dans les valeurs d'auto-incrémentation lors de l'insertion ."

Solutions possibles :

Si les écarts dans les colonnes à incrémentation automatique sont un problème, envisagez les solutions de contournement suivantes :

  • Utiliser SEQUENCE : Définissez une séquence avec une taille de cache plus petite et utilisez "NEXT VALUE FOR" dans la valeur par défaut de la colonne.
  • Activer l'indicateur de trace 272 : Cela enregistrera les allocations de valeurs auto-croissantes, vous permettant de voir les écarts.
  • Désactivez la mise en cache à augmentation automatique : Effectuez "ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF" pour une base de données spécifique.

Conseils importants :

Il est important de comprendre que ces solutions ne garantissent pas un fonctionnement complet et sans interstice. Les colonnes à incrémentation automatique ne garantissent pas en elles-mêmes une séquence sans interruption en raison d'échecs ou de transactions annulées. Pour des valeurs véritablement sans interruption, envisagez d'autres solutions telles qu'un algorithme personnalisé ou un générateur de clé externe.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn