Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 12359|Відповідь: 1

[Джерело] SQL Server 2012 авто-зростання стовпців із проблемами стрибка значення

[Копіювати посилання]
Опубліковано 23.08.2018 12:03:06 | | | |
Введення

Починаючи з релізів SQL Server 2012, коли екземпляр SQL Server перезапускається, значення стовпця авто-зростання таблиці стрибає, а конкретне значення стрибка визначається типом даних стовпця зростання. Якщо тип даних int, значення стрибка дорівнює 1000, а якщо тип даних bigint, то значення стрибка дорівнює 10000. З нашого проєкту така проблема стрибків є неприйнятною, особливо якщо це показано на боці клієнта. Ця дивна проблема присутня лише в SQL Server 2012 і новіших, і не існує у версіях до SQL Server 2012.


тло

Кілька днів тому колега з нашої команди контролю якості запропонував: Вартість колонки самозростання нашої таблиці незрозуміло підскочила на 10 000. Інакше кажучи, останнє значення стовпця самозбільшення в нашій таблиці було 2200, але тепер, коли ми додали новий запис, значення колонки самозбільшеного стало 12200. У нашій бізнес-логіці такі ситуації не дозволені клієнту, тому нам потрібно вирішити цю проблему.


Використання коду

Спочатку ми всі були дуже дивні, як це сталося? Зазвичай ми не вставляємо жодних значень у самозбільшувані стовпці вручну (ручне вставляння значень у самонадувні стовпці — це нормально), а значення самонадувних стовпців підтримує сама база даних. Один із членів нашої основної команди почав досліджувати це питання і знайшов відповідь. Тепер я хотів би детально пояснити цю проблему та рішення, яке знайшов мій колега.


Як відтворити цю помилку


Вам потрібно встановити SQL Server 2012, а потім створити тестову базу даних. Потім створіть таблицю з самозростаючими стовпцями:
Тепер вставте два дані:

Перегляньте результати:






На цьому етапі результат був таким, як ми й очікували. Тепер перезапустіть свій SQL Server Service. Існує кілька способів перезапустити SQL Service, і тут ми використовуємо SQL Server Manager для його перезапуску:



Після перезапуску ми щойно вставляємо ще 2 частини даних у таблицю:



Перегляньте результати:




Тепер ви бачите результати після перезапуску SQL Server 2012, і його самозростаючі стовпці починаються з 1002. Тобто, підстрибнув на 1000. Як уже згадувалося, якщо доданий тип даних bigint, його значення стрибка буде 10 000.


Чи справді це БАГ?

Microsoft стверджує, що це функція, а не помилка, і корисна в багатьох ситуаціях. Але у нашому випадку така функція не потрібна, бо ці самоінкрементні дані мають бути показані клієнтам, і клієнти почуватимуться дивно, побачивши такі стрибкові дані. А значення стрибка визначається кількістю перезапусків SQL Server. Якщо ці дані не будуть показані клієнтам, вони можуть бути прийнятними. Тому ця функція зазвичай підходить лише для внутрішнього використання.



рішення

Якщо нас не цікавить ця «функція», яку пропонує Microsoft, є два способи її вимкнути.

1. Використання послідовностей

2. Зареєструйте параметр запуску -t272 для SQL Server



Використання послідовностей

По-перше, потрібно прибрати колонки з таблиці з самозбільшенням. Потім створіть послідовність без кешування, з якої вставляються числові значення. Ось приклад коду:


Зареєструйте параметр запуску -t272

Відкритий менеджер конфігурації SQL Server. Виберіть свій екземпляр SQL Server 2012, клацніть правою кнопкою миші та виберіть меню «Властивості». Знайдіть параметри запуску у спливаючому вікні та зареєструйте -t272. Після завершення перезапустіть SQL Server (SQLSERVER2012) на рисунку нижче, а потім виконайте операцію відтворення помилок для перевірки, чи проблема вирішена.




Додаткові примітки:

Якщо у вашій базі даних багато самонадувних таблиць і всі вони мають проблеми з числовим стрибком, краще скористатися другим варіантом. Бо це дуже просто, а обсяг — на рівні сервера. Впровадження другого рішення вплине на всі бази даних у цьому екземплярі сервісу.





Попередній:Веб-сервер повертає тип і значення коду статусу
Наступний:Оновити метод роботи самозростаючого стовпця ID у базі даних SQL Server
 Орендодавець| Опубліковано 08.07.2020 15:15:52 |
SQL Server функціонує у вищих версіях. Він «кешує» 1000 ідентифікаційних значень заздалегідь з міркувань продуктивності
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com