Maison >base de données >tutoriel mysql >Pourquoi mes incréments d'IDENTITÉ SQL Server sautent-ils après un redémarrage ?
É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 :
IDENTITY
par des objets SEQUENCE
, permettant un contrôle plus précis de la taille du cache.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!