Wartość kolumny Identity nagle przeskakuje do 1001 w sql server [duplikat]

To pytanie ma już odpowiedź tutaj:

Używam Sql server 2012 (Denali). Zastanawiam się tylko, dlaczego wszystkie wartości kolumn identity zaczynają się od 1001 i tak dalej. Na początku kolumny tożsamość zaczyna się od 1,2 i tak dalej i dodaje tożsamość płynnie, ale nagle przeskakuje do 1001,1002 i dalej dla całej tabeli w bazie danych zawierającej kolumnę identity. Co może być powodem. Proszę o pomoc.

Author: Rajaram Shelar, 2013-07-11

3 answers

Microsoft zmienił sposób radzenia sobie z wartościami tożsamości w SQL Server 2012 i w wyniku tego można zobaczyć luki tożsamości między rekordami po ponownym uruchomieniu instancji SQL server lub komputera serwerowego. Może być kilka innych przyczyn tych luk id, może to być spowodowane automatycznym restartem serwera po zainstalowaniu aktualizacji.

Możesz użyć poniżej dwóch opcji

  • użyj znacznika śledzenia 272 o spowoduje to wygenerowanie rekordu dziennika dla każdej Wygenerowanej tożsamości wartość. Na wydajność generowania tożsamości może mieć wpływ włączenie tej flagi śledzenia.
  • Użyj generatora sekwencji z ustawieniem NO CACHE

    Ustawienie znacznika śledzenia 272 na SQL Server 2012, którego tutaj oczekujesz

  • Otwórz "SQL Server Configuration Manager"

  • Kliknij "SQL Server Services" na lewym panelu
  • Kliknij prawym przyciskiem myszy nazwę instancji serwera SQL w prawym okienku - > domyślnie: SQL Server (MSSQLSERVER)
  • Kliknij "Właściwości"
  • Kliknij "Parametry Uruchamiania"
  • na "określ parametr startowy" typ pola tekstowego "- T272 "
  • Kliknij "Dodaj"
  • potwierdź zmiany
 65
Author: Kitty,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-15 10:54:55

Wydaje mi się, że masz wyjaśnienie w komentarzu do tego elementu connect. przełączanie awaryjne lub Restart powoduje ponowne przesłanie tożsamości

Aby zwiększyć preformancję dla maszyn wysokiej klasy, Wprowadzamy prealokacja wartości tożsamości w 2012 r. I ta funkcja może być wyłączony za pomocą TF 272 (wtedy otrzymasz zachowanie z 2008R2).

Właściwości tożsamości są przechowywane oddzielnie w metadanych. Jeśli wartość jest używany w tożsamości i przyrost jest wywoływany, wtedy nowa wartość nasion będzie ustawiony. Brak operacji, w tym Rollback, Failover, ..... can zmień wartość początkową z wyjątkiem pliku DBCC. Failover dotyczy obiekt table, ale nie obiekt identity. Więc w przypadku przełączania awaryjnego możesz wywołaj checkpoint przed ręcznym przełączaniem awaryjnym, ale możesz zobaczyć lukę dla nieplanowane przypadki. Jeśli gap jest problemem, to proponuję użyć TF 272.

Dla zamknięcia menedżera kontroli mamy poprawkę dla następnej wersji (z kolejny TF). Ta poprawka zajmie się najbardziej control manager shutdown sprawy.

 12
Author: Mikael Eriksson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-11 07:19:11

Myślę, że możesz użyć sekwencji zamiast, Sekwencja daje ci 100% pełną kontrolę i jest pod wieloma względami znacznie lepsza w porównaniu do tożsamości... Identity is just so damn easy and convenient

Http://msdn.microsoft.com/en-us/library/ff878091.aspx

z tego co wiem, kiedy robisz wstawkę z identity i się nie udaje, tożsamość jest używana i tak, Verified

Za pomocą sekwencji można "wypełnić" luki za pomocą cyklu. Chociaż, jak wskazuje Amy Barrett out to jest tworzone poza zakresem transakcji.

Istnieje optymalizacja wydajności, gdy używasz pamięci podręcznej, która może być również przydatna.

 1
Author: Christopher Bonitz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-26 15:43:59