Salto de valor de columna de identidad MASIVO en SQL Server 2014

Aug 19 2020

Entonces, en medio de la codificación y las pruebas básicas, vimos un gran salto sin patrón en los valores de identidad para varias tablas. No tenemos conocimiento de ningún problema de servidor o intento de operaciones masivas, pero los administradores de bases de datos están investigando los registros.

Las brechas no son las típicas 1,000 o 10,000 que se ven con los reinicios del servidor y demás.

La brecha para Application_NOes 10,410,345 para una tabla con 2,320 filas

Transaction_Payment_NOsaltó un asombroso 1.712.149.313 para una tabla con 685 registros.

¿Alguna idea sobre qué podría estar causando saltos tan grandes y aparentemente arbitrarios?

Respuestas

5 JoshDarnell Aug 19 2020 at 01:06

Algunos posibles culpables:

  1. el proceso de prueba crea muchas filas en una transacción y luego revierte la transacción

Esta parece ser la razón más probable, ya que mencionó que actualmente está realizando pruebas. Quizás se están ejecutando algunas pruebas automatizadas que realizan cambios en esas tablas, verifican los resultados y luego revierten los cambios.

Los valores de identidad no se reutilizan después de revertir una transacción, que es lo que hace que vea grandes brechas en este escenario.

  1. Alguien usó el RESEEDcomando

Puede cambiar manualmente el valor actual de "siguiente identidad" con este comando:

DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);

Este parece menos probable, porque usted o uno de los administradores tendría que hacer todo lo posible para hacerlo. Similarmente...

  1. Alguien insertó esos valores manualmente

Puede insertar lo que quiera en una IDENTITYcolumna ejecutando primero esta declaración:

SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
  1. Conmutaciones por error y reinicios

Mencionó esto en la pregunta, pero solo para completar: SQL Server almacena en caché los valores de identidad para mejorar el rendimiento. Pero esos valores de identidad preasignados se pueden perder si el servicio se reinicia o se produce una conmutación por error de AG. Sin embargo, esto conduce a brechas más predecibles (10,000 en versiones modernas de SQL Server).