Maison > base de données > tutoriel mysql > Pourquoi mon incrément d'identité SQL Server ignore-t-il soudainement les valeurs ?

Pourquoi mon incrément d'identité SQL Server ignore-t-il soudainement les valeurs ?

Linda Hamilton
Libérer: 2025-01-23 14:36:12
original
822 Les gens l'ont consulté

Why Does My SQL Server Identity Increment Suddenly Skip Values?

Failles d'identité SQL Server : compréhension et atténuation

Aperçu

La propriété IDENTITY de SQL Server simplifie la gestion des clés primaires en incrémentant automatiquement les valeurs entières. Cependant, des écarts inattendus dans cette séquence peuvent survenir, laissant les utilisateurs perplexes.

Cause première : cache d'identité

La documentation de Microsoft explique que SQL Server (2012 et versions ultérieures) utilise un cache d'identité pour optimiser les performances. Ce cache, généralement défini sur 1 000 pour les colonnes int IDENTITY, pré-alloue un bloc de valeurs.

  • Processus d'allocation : Lorsqu'une valeur d'identité est nécessaire, SQL Server réserve une plage à partir du cache. Par exemple, si la valeur actuelle est de 1 205 446, elle pourrait réserver de 1 205 447 à 1 206 446.
  • Création d'espaces : Les redémarrages du serveur ou les transactions annulées peuvent libérer ces valeurs réservées et inutilisées, entraînant des espaces vides notables dans la séquence.

Impact de la taille du cache

L'exemple montre que les incréments d'identité augmentent d'environ 100 en raison du cache de 1 000 valeurs. Lorsqu'une valeur telle que 1 206 321 est attribuée, les 1 000 suivantes sont réservées, créant ainsi des écarts. Les trois derniers chiffres cohérents (par exemple, 321) reflètent la fin du bloc réservé.

Stratégies de réduction des écarts

Bien que les lacunes identitaires ne soient pas problématiques en soi, elles peuvent être indésirables. Considérez ces options :

  • Séquences (NOCACHE) : Les séquences SQL Server offrent une alternative sans mise en cache, minimisant les écarts pour les seules transactions non validées.
  • Indicateur de trace 272 : Cet indicateur de trace fournit une journalisation détaillée de l'attribution d'identité, aidant ainsi à identifier les événements provoquant des écarts. Notez que cela affecte toutes les bases de données.
  • Désactivation de la mise en cache au niveau de la base de données : Pour les versions plus récentes de SQL Server, ALTER DATABASE SCOPED CONFIGURATION avec IDENTITY_CACHE = OFF désactive la mise en cache pour une base de données spécifique.

Considérations importantes

Aucune méthode n’élimine complètement les lacunes identitaires. Des insertions simultanées ou des échecs de transaction peuvent toujours en créer. Pour les applications nécessitant une intégrité de séquence absolue, envisagez des GUID ou des mécanismes de génération de séquence personnalisés.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal