Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Banco de Dados SQL do Windows Azure - A coluna de incremento automático de identidade ignora valores


Você pode estar sem sorte aqui se precisar eliminar essas lacunas.

Eu mesmo bati esse problema enquanto estou desenvolvendo/testando um novo aplicativo. Estou intuindo o que está acontecendo aqui no sql azure com base no que li sobre o sql server 2012. Não consegui encontrar nenhuma documentação sobre isso para o sql azure.

Pelo que li, esse é um recurso que aparece como um bug IMO. No Sql server 2012, a Microsoft adicionou a capacidade de criar sequências. As seqüências registram quais valores foram usados ​​em blocos de 1000. Então digamos que sua seqüência estava progredindo... 1, 2, 3, 4, 5... e então seu servidor sql reinicia. Bem, a sequência já salvou o fato de que o bloco 1-1000 já foi usado, então você salta para o próximo 1000.... então seu próximo valor é 1001, 1002, 1003, 1004.... Isso melhora o desempenho do inserções ao usar sequências, mas pode resultar em lacunas incomuns. Existe uma solução para isso para sua sequência. Ao especificar sua sequência adicione o parâmetro "NOCACHE" para que não salve blocos de 1000 por vez. Veja aqui para obter mais documentação.

Onde isso se torna um problema é que as colunas Identidade parecem ter sido alteradas para usar esse mesmo paradigma. Portanto, quando seu servidor ou, neste caso, sua instância do sql azure for reiniciada, você poderá obter grandes lacunas (1000's) em suas colunas de identidade porque está armazenando em cache grandes blocos como "usados". Existe uma solução para isso para o sql server 2012. Você pode especificar um sinalizador de inicialização t272 para reverter sua identidade para usar o antigo paradigma do sql server 2008 r2. O problema é que desconheço (talvez não seja possível) como especificar isso no sql Azure. Não é possível encontrar a documentação. Veja este tópico para obter mais detalhes sobre o sql server 2012.

Verifique a documentação de identidade aqui no msdn. Especificamente a seção "Valores consecutivos após a reinicialização do servidor ou outras falhas". Aqui está o que diz:

Portanto, se você precisar ter valores consecutivos, tente especificar uma sequência com nocache em vez de confiar em sua coluna de identidade. Ainda não tentei isso, mas parece que você terá problemas para fazer isso funcionar com o framework de entidade.

Desculpe se isso não ajudar muito, mas pelo menos é alguma informação sobre o que você está experimentando.