Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Windows Azure SQL Database — kolumna automatycznego przyrostu tożsamości pomija wartości

Możesz mieć tu pecha, jeśli musisz wyeliminować te luki.

Sam trafiłem na ten problem, gdy opracowuję/testuję nową aplikację. Intuicyjnie wyczuwam, co dzieje się tutaj w sql azure na podstawie tego, co przeczytałem o sql server 2012. Nie udało mi się znaleźć żadnej dokumentacji na ten temat dla sql azure.

Z tego, co czytałem, jest to funkcja, która pojawia się jako błąd IMO. W Sql Server 2012 Microsoft dodał możliwość tworzenia sekwencji. Sekwencje rejestrują, jakie wartości zostały użyte w blokach po 1000. Powiedzmy, że twoja sekwencja postępowała... 1, 2, 3, 4, 5... a następnie serwer sql zostanie zrestartowany. Cóż, sekwencja już zapisała fakt, że blok 1-1000 został już użyty, więc przeskakuje cię do następnego 1000.... więc następna wartość to 1001, 1002, 1003, 1004.... To poprawia wydajność wstawia się podczas używania sekwencji, ale może skutkować nietypowymi przerwami. Jest na to rozwiązanie dla twojej sekwencji. Podczas określania sekwencji dodaj parametr "NOCACHE", aby nie zapisywał bloków po 1000 na raz. Więcej dokumentacji znajdziesz tutaj.

Staje się to problemem, ponieważ wydaje się, że kolumny tożsamości zostały zmienione, aby używać tego samego paradygmatu. Tak więc po ponownym uruchomieniu serwera lub w tym przypadku instancji sql Azure możesz uzyskać duże przerwy (1000) w kolumnach tożsamości, ponieważ buforuje duże bloki jako „używane”. Istnieje rozwiązanie tego problemu dla serwera sql 2012. Możesz określić flagę uruchamiania t272, aby przywrócić tożsamość do używania starego paradygmatu serwera sql 2008 r2. Problem polega na tym, że nie jestem świadomy (może to nie być możliwe), jak to określić w sql Azure. Nie mogę znaleźć dokumentacji. Zobacz ten wątek aby uzyskać więcej informacji na temat serwera sql 2012.

Sprawdź dokumentację tożsamości tutaj w msdn. W szczególności sekcja „Kolejne wartości po ponownym uruchomieniu serwera lub innych awariach”. Oto, co mówi:

Więc jeśli potrzebujesz kolejnych wartości, możesz spróbować określić sekwencję za pomocą nocache zamiast polegać na kolumnie tożsamości. Nie próbowałem tego sam, ale wygląda na to, że będziesz mieć problem z uruchomieniem tego w ramach encji.

Przepraszam, jeśli to nie pomoże, ale przynajmniej jest to trochę informacji o tym, czego doświadczasz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. pyodbc nie może połączyć się z bazą danych

  2. SQL — procedura składowana z instrukcją Select przy użyciu IN (@Variable_CommaDelimitedListOfIDS)

  3. Gdzie ustawić wartość daty i godziny UTC w aplikacji wielowarstwowej:warstwa prezentacji, domena lub baza danych?

  4. Jak uzyskać liczbę prawda/fałsz z pola bitowego do dwóch oddzielnych kolumn?

  5. Klauzula wyjściowa SQL Server do zmiennej skalarnej