Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 12359|Odpowiedź: 1

[Źródło] Kolumny automatycznego wzrostu SQL Server 2012 z problemami skoku wartości

[Skopiuj link]
Opublikowano 23.08.2018 12:03:06 | | | |
Wprowadzenie

Począwszy od wydań SQL Server 2012, po ponownym uruchomieniu instancji SQL Server wartość kolumny automatycznego wzrostu tabeli skacze, a konkretna wartość skoku jest określana przez typ danych kolumny wzrostu. Jeśli typ danych to int, wartość skoku wynosi 1000, a jeśli typ danych jest bigint, wartość skoku wynosi 10000. Z naszego projektu wynika, że tego typu problem skakania jest nie do przyjęcia, zwłaszcza gdy pojawia się po stronie klienta. Ten dziwny problem występuje tylko w SQL Server 2012 i późniejszych, a nie występuje w wersjach sprzed SQL Server 2012.


tło

Kilka dni temu kolega z naszego zespołu QA zasugerował: Wartość kolumny samozwiększającej się w naszej tabeli niewytłumaczalnie wzrosła o 10 000. Innymi słowy, ostatnia wartość kolumny samoprzyrastających w naszej tabeli wynosiła 2200, ale teraz, gdy dodaliśmy nowy rekord, wartość kolumny samoprzyrastających wzrosła do 12200. W naszej logice biznesowej takie sytuacje nie są dozwolone na klientze, więc musimy rozwiązać ten problem.


Użycie kodu

Na początku wszyscy byliśmy bardzo dziwni, jak to się stało? Zazwyczaj nie wstawiamy ręcznie żadnych wartości do kolumn samoprzyrastających (ręczne wprowadzanie wartości do kolumn samonapompowujących jest w porządku), a wartości kolumn samoinflujących są utrzymywane przez samą bazę danych. Członek naszego głównego zespołu zaczął badać to pytanie i znalazł odpowiedź. Teraz chciałbym szczegółowo wyjaśnić ten problem oraz rozwiązanie, które znalazł mój kolega.


Jak odtworzyć ten błąd


Będziesz musiał zainstalować SQL Server 2012, a następnie stworzyć testową bazę danych. Następnie stwórz tabelę z kolumnami samorosnącymi:
Teraz wstaw dwa dane:

Przejrzyj wyniki:






W tym momencie efekt był taki sam, jak się spodziewaliśmy. Teraz zrestartuj usługę SQL Server. Istnieje kilka sposobów na ponowne uruchomienie SQL Service, a tutaj używamy SQL Server Managera do jego ponownego uruchomienia:



Po ponownym uruchomieniu właśnie wstawiliśmy do tabeli jeszcze 2 dane:



Przejrzyj wyniki:




Teraz widzisz wyniki po ponownym uruchomieniu SQL Server 2012, a jego samoprzyrastające wartości kolumn zaczynają się od 1002. To znaczy, skoczył o 1000. Jak wspomniano wcześniej, jeśli dodany przez nas typ danych jest bigint, jego wartość skoku wyniesie 10 000.


Czy to naprawdę BŁĄD?

Microsoft twierdzi, że jest to funkcja, a nie błąd, i jest przydatna w wielu sytuacjach. Ale w naszym przypadku nie potrzebujemy takiej funkcji, ponieważ te samoprzyrostowe dane mają być pokazywane klientom, a klienci poczują się dziwnie, jeśli zobaczą takie skaczące dane. Wartość skoku zależy od liczby restartów SQL Servera. Jeśli te dane nie są pokazywane klientom, mogą być akceptowalne. Dlatego ta funkcja jest zazwyczaj odpowiednia tylko do użytku wewnętrznego.



rozwiązanie

Jeśli nie interesuje nas ta "funkcja" oferowana przez Microsoft, istnieją dwa sposoby, by ją wyłączyć.

1. Użycie sekwencji

2. Zarejestruj parametr startowy -t272 dla SQL Server



Sekwencje użycia

Po pierwsze, musimy usunąć kolumny samoprzyrastające w tabeli. Następnie tworzy sekwencję bez buforowania, z której wstawiane są wartości liczbowe. Oto przykładowy kod:


Zarejestruj parametr startowy -t272

Otwórz SQL Server Configuration Manager. Wybierz swoją instancję SQL Server 2012, kliknij prawym przyciskiem myszy i wybierz menu Właściwości. Znajdź parametry startu w oknie wyskakującym i zarejestruj -t272. Po zakończeniu uruchom SQL Server (SQLSERVER2012) na poniższym rysunku, a następnie wykonaj operację odtwarzania błędów, aby zweryfikować, czy problem został rozwiązany.




Dodatkowe notatki:

Jeśli masz w bazie danych dużo samonapompowujących się tabel i wszystkie mają problemy z przeskokami liczbowymi, lepiej użyć drugiej opcji. Bo jest bardzo prosty, a zakres jest na poziomie serwera. Przyjęcie drugiego rozwiązania wpłynie na wszystkie bazy danych na tej instancji usługi.





Poprzedni:Serwer WWW zwraca typ i znaczenie kodu statusu
Następny:Zaktualizuj metodę działania kolumny samorosnącego ID w bazie SQL Server
 Ziemianin| Opublikowano 08.07.2020 15:15:52 |
SQL Server pojawia się w wyższych wersjach. Z góry "buforuje" 1000 wartości identyfikacyjnych ze względów wydajnościowych
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com