Salto sequencial no SQL Server

Tempo de leitura: 2 min

Escrito por Nilson
em 29 de dezembro de 2024

DESCRIÇÃO TÉCNICA DO SALTO SEQUENCIAL

Alteração no SQL Server a partir da versão 2012:

  • A Microsoft introduziu uma mudança na maneira como os valores do campo Identity (usado para gerar valores automáticos em tabelas) são atribuídos, a partir da versão SQL Server 2012.

    Efeito de uma falha ou reinicialização do servidor:

    • Quando ocorre uma reinicialização do SQL Server ou uma interrupção inesperada do sistema operacional (como por exemplo, uma queda de energia), o comportamento do campo Identity muda. O valor gerado para esse campo não é contínuo como esperado.

    Como o valor do campo Identity é alterado:

    • Se o campo for do tipo inteiro (int), o valor do Identity irá pular 1000 após uma falha ou reinicialização.
    • Se o campo for do tipo bigint, o valor do Identity irá pular 10000.
    • Ou seja, após uma falha ou reinicialização, o próximo valor gerado para o campo Identity será automaticamente maior do que o anterior, mas por uma diferença considerável.

    Por exemplo: O Sistema OS System utiliza por padrão um banco de dados SQL LocalDB 2012 ou versões superiores do SQL Server se for configurado em rede interna. Nesse vídeo abaixo, mostro na prática esse problema de salto sequencial. Durante o vídeo falo sobre a correção desse salto no sistema, utilizando um backup que tenha sido feito antes do salto, para entender assista o vídeo até o final.

    Obs.: Essa questão de salto sequencial no sistema OS System é citado no termo de instalação do sistema que pode ser consultado clicando aqui ou no momento da instalação do sistema.

    Objetivo dessa mudança pela Microsoft:

    • A Microsoft implementou essa alteração por questões de desempenho. Ao pular valores ao reiniciar, o SQL Server reduz a possibilidade de bloqueios e aumenta a velocidade de operações em que o valor do campo Identity é gerado.
    • Isso foi feito para otimizar o desempenho e a escalabilidade do banco de dados em sistemas de grande volume de dados.

    Possibilidade de perda de valores:

    • Durante uma falha ou reinicialização inesperada, alguns valores podem ser perdidos. Ou seja, o SQL Server pode pular valores do campo Identity, mas isso não afetará a integridade dos dados. Esse comportamento não é um erro, mas sim uma decisão de design para garantir o bom funcionamento do banco de dados em situações de falha.

    O que isso significa na prática:

    • Em termos de dados: Pode haver uma “lacuna” nos valores dos campos Identity, com valores pulados entre um e outro. Por exemplo, se um valor foi 100 e o próximo valor gerado for 1100, o valor 101 até 1099 foi “pulado”.
    • Em termos de impacto: Para a maioria das aplicações, isso não deve causar problemas, mas é importante que os clientes estejam cientes de que os valores de Identity podem não ser contínuos.

    Conclusão:

    • A Microsoft alterou o comportamento do campo Identity para melhorar a performance do banco de dados em ambientes de grande carga e reinicializações inesperadas.
    • O “salto” nos valores é esperado e faz parte da estratégia de desempenho do SQL Server. A perda de valores é uma consequência normal dessa abordagem, mas não compromete a integridade dos dados.

    Para enviar seu comentário, preencha os campos abaixo:

    Deixe um comentário para Nilson Cancelar resposta


    *


    *


    1 Comentário

  • Nilson disse:

    Para quem configurou o sistema em rede interna utilizando o SQL Server 2019 ou superior, existe algumas soluções para evitar o salto, nesses vídeos que encontrei no youtube:

    No primeiro vídeo é mostrado uma solução (Testei no SQL Server 2019 e deu certo):
    https://www.youtube.com/watch?v=Su5bpzPjYcg

    No segundo vídeo é mostrado duas soluções:
    https://youtu.be/ARGOwea5ZHM?si=xJLUTL-Z7O7Zoc8i

  • plugins premium WordPress