Salto MASSIVE do valor da coluna de identidade no SQL Server 2014
Portanto, no meio da codificação e dos testes básicos, vimos um enorme salto não padronizado nos valores de identidade para várias tabelas. Não temos conhecimento de nenhum erro de servidor ou tentativa de operação em massa, mas os DBAs estão analisando os logs.
As lacunas não são as típicas 1.000 ou 10.000 vistas nas reinicializações do servidor e coisas assim.
A lacuna para Application_NO
é 10.410.345 para uma tabela com 2.320 linhas
Transaction_Payment_NO
saltou surpreendentes 1.712.149.313 para uma mesa com 685 registros.
Alguma ideia sobre o que poderia estar causando saltos tão grandes e aparentemente arbitrários?

Respostas
Alguns possíveis culpados:
- o processo de teste cria muitas linhas em uma transação e, em seguida, reverte a transação
Esse parece ser o motivo mais provável, já que você mencionou que está fazendo testes no momento. Talvez haja alguns testes automatizados sendo executados que fazem alterações nessas tabelas, verificam os resultados e, em seguida, revertem as alterações.
Os valores de identidade não são reutilizados após a reversão de uma transação, que é o que faz com que você veja grandes lacunas nesse cenário.
- Alguém usou o
RESEED
comando
Você pode alterar manualmente o valor atual da "próxima identidade" com este comando:
DBCC CHECKIDENT ('dbo.Transaction_Payment_NO', RESEED, 1712149313);
Este parece menos provável, porque você ou um dos administradores teria que se esforçar para fazê-lo. De forma similar...
- Alguém inseriu esses valores manualmente
Você pode inserir o que quiser em uma IDENTITY
coluna executando primeiro esta instrução:
SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
- Failovers e reinicializações
Você mencionou isso na pergunta, mas apenas para completar - o SQL Server armazena em cache os valores de identidade para melhorar o desempenho. Mas esses valores de identidade pré-alocados podem ser perdidos se o serviço for reiniciado ou ocorrer um failover de AG. Isso leva a lacunas mais previsíveis (10.000 em versões modernas do SQL Server).