Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 12359|Odpověď: 1

[Zdroj] SQL Server 2012 automaticky rostou sloupce s problémy s přeskokem hodnoty

[Kopírovat odkaz]
Zveřejněno 23.08.2018 12:03:06 | | | |
Úvod

Od vydání SQL Server 2012, když je instance SQL Server restartována, hodnota sloupce automatického růstu tabulky skočí a konkrétní hodnota skoku je určena datovým typem sloupce růstu. Pokud je datový typ int, hodnota skoku je 1000, a pokud je typ dat bigint, hodnota skoku je 10000. Z našeho projektu je tento problém s přeskakováním nepřijatelný, zvlášť když se projevuje na straně klienta. Tento zvláštní problém se vyskytuje pouze v SQL Server 2012 a novějších verzích a neexistoval ve verzích před SQL Server 2012.


pozadí

Před pár dny kolega z našeho QA týmu navrhl: Hodnota sloupce samozvyšující se v naší tabulce nevysvětlitelně vzrostla o 10 000. Jinými slovy, poslední hodnota sloupce samozvyšující se v naší tabulce byla 2200, ale nyní, když jsme přidali nový rekord, hodnota sloupce se samozvyšující se zvýšila na 12200. V naší obchodní logice nejsou takové situace na klientovi povoleny, takže musíme tento problém vyřešit.


Použití kódu

Zpočátku jsme byli všichni velmi zvláštní, jak se to stalo? Obvykle ručně nevkládáme žádné hodnoty do samopřirůstajících sloupců (ruční vkládání hodnot do samonafukujících sloupců je v pořádku) a hodnoty samonafukujících sloupců jsou udržovány samotnou databází. Člen našeho hlavního týmu začal tuto otázku zkoumat a našel odpověď. Nyní bych rád podrobně vysvětlil tento problém a řešení, které našel můj kolega.


Jak tuto chybu reprodukovat


Budete muset nainstalovat SQL Server 2012 a poté vytvořit testovací databázi. Poté vytvořte tabulku se samorozrůstajícími sloupci:
Nyní vložte dvě datové části:

Projděte výsledky:






V tuto chvíli byl výsledek stejný, jak jsme očekávali. Nyní restartujte svou SQL Server službu. Existuje několik způsobů, jak restartovat SQL Service, a zde používáme SQL Server Manager k jeho restartu:



Po restartu právě teď vložíme do tabulky další 2 datové části:



Projděte výsledky:




Nyní vidíte výsledky po restartu SQL Server 2012 a jeho samozvyšující se sloupce začínají na 1002. To znamená, že jsem skočil o 1000. Jak již bylo zmíněno, pokud je přidaný datový typ bigint, jeho hodnota skoku bude 10 000.


Je to opravdu CHYBA?

Microsoft uvádí, že jde o funkci, nikoli chybu, a je užitečná v mnoha situacích. Ale v našem případě takovou funkci nepotřebujeme, protože tato samoinkrementální data jsou určena k tomu, aby byla zobrazována zákazníkům, a zákazníci se budou cítit divně, pokud uvidí taková skákající data. A hodnota skoku je určena počtem restartů SQL Serveru. Pokud tato data nejsou zákazníkům zobrazována, mohou být přijatelná. Tato funkce je proto obvykle vhodná pouze pro vnitřní použití.



řešení

Pokud nás tato "funkce" nabízená Microsoftem nezajímá, existují dva způsoby, jak ji můžeme vypnout.

1. Použití sekvencí

2. Zaregistrujte počáteční parametr -t272 pro SQL Server



Používejte sekvence

Nejprve musíme odstranit samopřirůstající sloupce tabulky. Poté vytvoříte sekvenci bez cache, ze které se vkládají číselné hodnoty. Tady je ukázkový kód:


Zaregistrujte startovací parametr -t272

Otevřete SQL Server Configuration Manager. Vyberte instanci SQL Server 2012, klikněte pravým tlačítkem a vyberte nabídku Vlastnosti. Najděte parametry spuštění v vyskakovacím okně a registrujte -t272. Po dokončení restartujte SQL Server (SQLSERVER2012) na obrázku níže a poté provedete operaci reprodukce chyb, abyste ověřili, zda byl problém vyřešen.




Další poznámky:

Pokud máte v databázi hodně samonafukujících tabulek a všechny mají problémy s číselným skokem, je lepší použít druhou možnost. Protože je to velmi jednoduché a rozsah je na úrovni serveru. Přijetí druhého řešení ovlivní všechny databáze na této instanci služby.





Předchozí:Webový server vrací typ a význam stavového kódu
Další:Aktualizovat způsob provozu sloupce samorostoucího ID v databázi SQL Server
 Pronajímatel| Zveřejněno 08.07.2020 15:15:52 |
SQL Server se objevuje ve vyšších verzích. Z důvodu výkonu "ukládá" 1000 identifikačních hodnot hned na začátku
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com