Salto MASSIVE do valor da coluna de identidade no SQL Server 2014

Aug 19 2020

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_NOsaltou 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

5 JoshDarnell Aug 19 2020 at 01:06

Alguns possíveis culpados:

  1. 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.

  1. Alguém usou o RESEEDcomando

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...

  1. Alguém inseriu esses valores manualmente

Você pode inserir o que quiser em uma IDENTITYcoluna executando primeiro esta instrução:

SET IDENTITY_INSERT dbo.Transaction_Payment_NO ON;
  1. 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).