SQL Server 2012: Unerwartetes Identitätsinkrementverhalten
Dieser Artikel befasst sich mit einem Problem in SQL Server 2012, bei dem das Identitätsinkrement für ganzzahlige Spalten unerwartet auf ein Vielfaches von 100 springt, anstatt auf das erwartete Inkrement von 1. Dieses unregelmäßige Verhalten wird häufig durch einen Systemneustart ausgelöst.
Grundursache:
Das Problem ist auf eine Leistungsoptimierung in SQL Server 2012 zurückzuführen. Es verwendet einen Cache, um IDENTITY-Werte vorab zuzuweisen. Die Standard-Cache-Größe beträgt 1000.
Folgen:
Beim Serverneustart werden alle nicht zugewiesenen Werte in diesem Cache verworfen. Dies führt beim Einfügen neuer Zeilen zu Lücken in der Identitätssequenz, da die Datenbank neue Werte aus dem aktualisierten Cache zuweist.
Lösungen und Schadensbegrenzungsstrategien:
Obwohl eine völlig lückenlose Sequenz nicht garantiert ist, können verschiedene Strategien das Problem minimieren:
NEXT VALUE FOR
innerhalb einer Spaltenstandardeinschränkung.ALTER DATABASE SCOPED CONFIGURATION SET IDENTITY_CACHE = OFF;
aus, um das Caching für die betroffene Datenbank zu deaktivieren.Wichtige Überlegung:
Es ist wichtig zu verstehen, dass keine dieser Methoden Lücken in der Identitätssequenz vollständig verhindern kann. Für Anwendungen, die absolute lückenlose Identitätswerte erfordern, werden alternative Ansätze wie Zeilenzeitstempel oder benutzerdefinierte Schlüsselgenerierungsmechanismen empfohlen.
Das obige ist der detaillierte Inhalt vonWarum springt mein SQL Server 2012-Identitätsinkrement?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!