A mudança no Identity a partir do SQL Server 2012!



Fala galera tudo certo? Espero que sim!

Hoje vou falar sobre um comportamento do SQL Server 2012 relacionado à utilização da propriedade Identity que muitos já devem ter presenciado ou lido algo sobre.

Para começar, o que é o Identity?

O Identity como já foi dito a cima, é uma propriedade que você define dentro de uma coluna contendo um tipo numérico com o intuito de gerar valores únicos¹ que tenham um incremento automático, por exemplo, uma coluna do tipo INT com um Identity definido em “1,1”, irá crescer sempre de um em um conforme forem sendo feitas as inserções das linhas na tabela. O criador da tabela define o valor inicial e o valor do incremento, ambos são chamados de “seeds”, quando estes não são definidos o SQL Server assume o padrão “1,1”.
¹ Não é garantido que os valores sejam sempre únicos e que nunca ocorram intervalos entre eles, em certas situações estes podem duplicar.

O antes e depois...

Em versões anteriores do SQL Server, sempre que um novo valor do Identity era gerado, este era logado separadamente. No SQL Server 2012 os valores do identity são gerados em batches e apenas o valor máximo é logado, ou seja, com o mínimo de operações sendo logadas a performance do SQL Server em operações evolvendo identity tende a ser melhor.

+10,+100,+10.00,+10.000...

Esta mudança feita no SQL Server 2012 acabou provocando um comportamento peculiar nas colunas Identity. Imagine que uma instância do SQL Server falha sem que o CHECKPOINT seja executado. Durante o restart do serviço, o SQL Server precisa garantir que não irá reutilizar um valor já atribuído a um campo Identity. Para isto, os campos terão seus valores máximos ajustados de um determinado valor, de acordo com o tipo do campo:

Colunas TINYINT = + 10
Colunas SMALLINT = + 100
Colunas INT = + 1.000
Colunas BIGINT = + 10.000

TRACE FLAG -t272

O trace flag -t272, não documentado, faz com que o SQL Server volte a operar da maneira antiga com relação ao Identity. Ou seja, para cada novo valor gerado será persistido no log.

Simulando o comportamento...

CREATE DATABASE TesteDB
GO

USE TesteDB
GO

CREATE TABLE SimulaID
(
ID INT IDENTITY,
NOME VARCHAR(20)
)
GO

INSERT INTO SimulaID VALUES ('SQL')
INSERT INTO SimulaID VALUES ('MAGU')

--VEJA O RESULTADO…

SELECT ID,NOME FROM SimulaID


--PARE O SQL SERVER COM O COMANDO SHUTDOWN WITH NOWAIT...

SHUTDOWN WITH NOWAIT

Server shut down by NOWAIT request from login --\Andre Cesar.
SQL Server is terminating this process.

--SUBA O SERVIÇO DO SQL NOVAMENTE...

C:\Windows\system32>net start "MSSQL$MSSQL2014" << Troque pelo nome da sua instância...
The SQL Server (MSSQL2014) service is starting.
The SQL Server (MSSQL2014) service was started successfully.

INSIRA NOVAMENTE DOIS VALORES NA TABELA...

USE TesteDB
GO

INSERT INTO SimulaID VALUES ('SQL')
INSERT INTO SimulaID VALUES ('MAGU')

--VEJA NOVAMENTE O RESULTADO, REPARE NO SALTO DO IDENTITY...


Agora, habilite o trace flag -t272 nos parâmetros de inicialização do SQL Server e reinicie o serviço...

 
 
Com o serviço no ar novamente, faça os procedimentos abaixo...

--LIMPE A TABELA...

TRUNCATE TABLE SimulaID

--INSIRA DOIS VALORES NA TABELA..

USE TesteDB
GO

INSERT INTO SimulaID VALUES ('SQL')
INSERT INTO SimulaID VALUES ('MAGU')

--PARE O SQL SERVER NOVAMENTE COM O COMANDO SHUTDOWN WITH NOWAIT...

SHUTDOWN WITH NOWAIT

--SUBA O SERVIÇO DO SQL NOVAMENTE...

C:\Windows\system32>net start "MSSQL$MSSQL2014" << Troque pelo nome da sua instância...
The SQL Server (MSSQL2014) service is starting.
The SQL Server (MSSQL2014) service was started successfully.


--INSIRA NOVAMENTE DOIS VALORES NA TABELA..

USE TesteDB
GO

INSERT INTO SimulaID VALUES ('SQL')
INSERT INTO SimulaID VALUES ('MAGU')

--VEJA O RESULTADO AGORA QUE O TRACE FLAG ESTÁ LIGADO…

SELECT ID,NOME FROM SimulaID


Fontes:

SQL Server 2014 SP1 (Hold) / SQL Server 2016! -- ITIL -- New JOB


Fala galera tudo certo com vocês? Espero que sim! Bom, tenho algumas coisas para falar neste post afinal fiquei algum tempo ausente, primeiramente gostaria de falar sobre o que ocorreu com o SP1 do SQL Server 2014. 

No dia 15/04 foi feito o lançamento oficial do SP1 do SQL Server 2014, contudo, como muitos devem já ter lido sobre o assunto, apenas dois dias depois o SP foi removido do centro de downloads pela Microsoft. O motivo: Foi descoberto um problema com a instalação deste service pack em instâncias com o catálogo do SSISDB habilitado. Este problema ocorre por conta de uma falha no script de upgrade, e como a falha é no master, a instância fica num estado incorreto e impossibilitada de reiniciar.

Como um novo pacote para o SP1 será criado para distribuição, ele não será compatível com o build do SP1 original, 12.0.4050. Isto significa que será necessário remover o build 12.0.4050 antes de instalar o novo pacote do SQL Server 2014 SP1, incluindo cenários de side-by-side. Por cenários de side-by-side entende-se mais de uma instância do SQL Server 2014 SP1 rodando na mesma máquina ou cluster: para atualizá-las para o novo SP1, será necessário remover o SP1 velho de todas elas, antes de começar o setup. Isto acontece porque o novo  SP1 terá updates de segurança, updates cumulativos e hotfixes agregados, que não estavam no SP1 disponibilizado originalmente.

Se você já instalou o SP, mais informações sobre o problema e o contorno para este estão no link a seguir:


Mudando de assunto PT1, hoje começou em Chicago o evento Ignite da Microsoft e nele foi anunciado o SQL Server 2016! Segundo a MS, sua versão preview vai estar disponível em breve! Mais informações estão no link abaixo:


Mudando de assunto PT2, na semana passada tirei minha certificação ITIL Foundation, é uma certificação importante para quem trabalha com TI, pois lida com as boas práticas do dia a dia de uma área de tecnologia. Para quem tiver interesse em tentar a certificação, recomendo fortemente que usem o site TI EXAMES (http://www.tiexames.com.br). Todo meu estudo foi em cima do material deles, as vídeo aulas são bem detalhadas e os simulados são bem parecidos com a prova final.

Mudando de assunto PT3, alguns já sabem, mas resolvi que estava na hora de mudar em minha carreira, não mudar o fato de ser um DBA e sim mudar de emprego, conhecer novos ambientes para agregar ainda mais meu conhecimento no produto SQL Server. Sai do Bradesco após 5 bons anos de aprendizado e no inicio de Abril me tornei integrante do time de DBA’s da Secretaria da Fazenda de SP, o qual conta com outro integrante conhecido pela comunidade de SQL Server, o MCM Ricardo Leka (http://leka.com.br). Resumo esta minha mudança através do pensamento abaixo:

“Somos o que fazemos, mas somos, principalmente, o que fazemos para mudar o que somos.” – Eduardo Galeano

É isso galera! Vamos em frente! Um abraço!

Fontes: