Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Windows Azure SQL-Datenbank – Spalte „Automatisches Inkrement der Identität“ überspringt Werte

Möglicherweise haben Sie hier Pech, wenn Sie diese Lücken schließen müssen.

Ich bin selbst auf dieses Problem gestoßen, als ich eine neue Anwendung entwickle/teste. Ich ahne, was hier in SQL Azure passiert, basierend auf dem, was ich über SQL Server 2012 gelesen habe. Ich konnte keine Dokumentation darüber für SQL Azure finden.

Nach dem, was ich gelesen habe, ist dies eine Funktion, die meiner Meinung nach als Fehler auftritt. In SQL Server 2012 hat Microsoft die Möglichkeit hinzugefügt, Sequenzen zu erstellen. Sequenzen zeichnen auf, welche Werte in Blöcken von 1000 verwendet wurden. Nehmen wir also an, Ihre Sequenz hat Fortschritte gemacht ... 1, 2, 3, 4, 5 ... und dann wird Ihr SQL-Server neu gestartet. Nun, die Sequenz hat bereits die Tatsache gespeichert, dass die Blöcke 1-1000 bereits verwendet wurden, sodass Sie zu den nächsten 1000 springen ... Ihre nächsten Werte sind also 1001, 1002, 1003, 1004 .... Dies verbessert die Leistung von fügt bei der Verwendung von Sequenzen ein, kann jedoch zu ungewöhnlichen Lücken führen. Dafür gibt es eine Lösung für Ihre Sequenz. Wenn Sie Ihre Sequenz angeben, fügen Sie den Parameter "NOCACHE" hinzu, damit nicht Blöcke von 1000 gleichzeitig gespeichert werden. Hier finden Sie weitere Dokumentation.

Wo dies zu einem Problem wird, ist, dass die Identity-Spalten anscheinend geändert wurden, um dasselbe Paradigma zu verwenden. Wenn Ihr Server oder in diesem Fall Ihre SQL-Azure-Instanz neu gestartet wird, können große Lücken (1000er) in Ihren Identitätsspalten auftreten, da große Blöcke als "verwendet" zwischengespeichert werden. Es gibt eine Lösung für dieses Problem für SQL Server 2012. Sie können ein Startflag t272 angeben, um Ihre Identität auf die Verwendung des alten SQL Server 2008 r2-Paradigmas zurückzusetzen. Das Problem ist, dass ich nicht weiß (es ist möglicherweise nicht möglich), wie ich dies in SQL Azure angeben soll. Kann keine Dokumentation finden. Siehe diesen Thread für weitere Details zu SQL Server 2012.

Überprüfen Sie die Identitätsdokumentation hier in der msdn. Insbesondere der Abschnitt "Fortlaufende Werte nach Serverneustart oder anderen Fehlern". Hier ist, was es sagt:

Wenn Sie also aufeinanderfolgende Werte benötigen, können Sie versuchen, eine Sequenz mit nocache anzugeben, anstatt sich auf Ihre Identitätsspalte zu verlassen. Ich habe das selbst noch nicht ausprobiert, aber hört sich so an, als ob Sie Probleme haben werden, dies mit dem Entity Framework zum Laufen zu bringen.

Tut mir leid, wenn das nicht viel hilft, aber zumindest ein paar Informationen darüber, was du erlebst.