Gap (pulo) no Identity, como evitar?

Desde o SQL Server 2012, o produto sofreu uma alterao no controle dos campos IDENTITY onde, logo na inicializao da instncia, ele coloca em cache aproximadamente 1000 registros para agilizar o processo. Ao fazer isso, o identity “pr-usado” internamente e o SQL se encarrega de entregar os prximos valores.

O ‘problema’ que, ao reinicializar a instncia, o cache perdido e ele cria um gap desses registros no utilizados.

Veja:

Isso foi tema de diversas discusses no Frum MSDN na poca que eu participava dele… Por que? Porque muita gente usa o campo identity como uma chave de negcio (cdigo do produto, por exemplo), e quando algo assim ocorre, aquela sequncia “se perde” e “fica feio” no sistema esse pulo.

Existiu, inclusive um Connect Item para que isso fosse resolvido. E foi. Desde ento, existe a trace flag 272, que faz com que essa reserva pare de ser executada e a sequncia se mantenha:

Mas notem que: Isso uma alterao para toda a instncia. Para fazer isso por banco, s a partir do SQL Server 2017, usando o SCOPED CONFIGURATION. Vejam:

Em tempo: Estou usando o dbatools.iovia Posh para os cmdlets e o docker, ao invs de VM ou instalando localmente.

[]’s!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Esse site utiliza o Akismet para reduzir spam. Aprenda como seus dados de comentários são processados.