Maison >base de données >tutoriel mysql >Pourquoi mes incréments d'IDENTITÉ SQL Server sautent-ils après un redémarrage ?

Pourquoi mes incréments d'IDENTITÉ SQL Server sautent-ils après un redémarrage ?

DDD
DDDoriginal
2025-01-23 14:46:13830parcourir

Why Are My SQL Server IDENTITY Increments Jumping After a Restart?

Écarts d'incrément de colonne SQL Server IDENTITY : compréhension du cache

La colonne IDENTITY de SQL Server, utilisée pour générer des identifiants de ligne uniques, présente parfois un comportement inattendu : après un redémarrage du serveur, l'incrément saute par centaines, au lieu d'augmenter séquentiellement d'une unité. Ce n'est pas un bug, mais une conséquence des optimisations de performances introduites dans SQL Server 2012.

SQL Server met en cache les valeurs d'identité pour améliorer les performances. Ce cache stocke généralement 1 000 int valeurs ou 10 000 bigint/numeric valeurs. Une fois le cache épuisé, un nouveau lot est alloué. Cependant, le redémarrage du serveur supprime toutes les valeurs mises en cache inutilisées.

Le saut observé, avec les trois derniers chiffres restant constants (par exemple, se terminant toujours par 306), reflète les valeurs de cache restantes après l'allocation initiale de 1 000.

Bien que ce mécanisme de mise en cache crée des lacunes dans la séquence IDENTITY, il améliore principalement les performances. À moins que des redémarrages fréquents ne soient fréquents, l’impact est minime. Cependant, plusieurs options existent pour atténuer cela :

  • Utiliser des séquences : Remplacez les colonnes IDENTITY par des objets SEQUENCE, permettant un contrôle plus précis de la taille du cache.
  • Activer l'indicateur de trace 272 : Active la journalisation des allocations de valeurs d'identité pour une analyse détaillée.
  • Désactiver la mise en cache d'identité : Exécutez ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF; pour désactiver la mise en cache d'une base de données spécifique.

Il est essentiel de se rappeler que même avec ces solutions de contournement, les insertions simultanées et les annulations de transactions peuvent toujours produire des lacunes. Pour les applications exigeant une continuité de séquence absolue, envisagez des alternatives telles que des générateurs d'UUID ou des implémentations de séquences personnalisées.

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