REBUILD RESUMABLE = ON

Olá pessoal, hoje quero demonstrar uma novidade que estive testando no SQL Server 2017 que particularmente achei extremamente interessante e útil, então decidi compartilhar!

Quem nunca passou por situações onde é preciso fazer um rebuild de index ou mesmo já efetuando uma operação de rebuild e por algum motivo torna-se necessário abortar? Até então esta situação nos forçava a cancelar a operação e perder todo o tempo de execução, porém, a partir do SQL Server 2017 temos uma opção que nos permite pausar o rebuild de um índice e simplesmente continuarmos depois. Fantástico não é? O mais interessante é que é possível saber inclusive onde o processo parou e qual percentual falta para finalizar.

Esta é uma dica rápida então vamos lá, mão na massa:

Primeiramente vamos criar uma base de dados só para efetuarmos este teste:

–Cria base de dados
CREATE DATABASE LabSQL2017

Em seguida vamos criar uma tabela apenas para simularmos o ambiente que desejamos efetuar os testes.

–Cria Tabela
CREATE TABLE tab1 (

id int identity (1,1),
nome varchar(40) default ‘Caio Amante’,
dt_log datetime default getdate(),
sexo char(1) default ‘M’,
salario decimal (6,2) default (1000.00));

Após criarmos a tabela é necessário popularmos a mesma com dados, para que desta forma a simulação faça de fato sentido. Este processo poderá demorar um pouco mais dependendo da sua configuração de hardware, de qualquer forma,  você pode ajustar a quantidade de inserts na hora de rodar o processo.

–Insere massa de dados
INSERT INTO tab1 default values
GO 10000000

Finalizando o insert iremos criar dois índices, um índice clustered e um índice nonclustered, para tentarmos simular um cenário mais próximo do real.

–Cria um indice cluster
CREATE CLUSTERED INDEX IX_tab1 ON tab1 (id)

— Cria indice nonclustered
CREATE NONCLUSTERED INDEX IX2_tab1 on tab1 (nome,dt_log,salario)

Ao fim teremos  um cenário de dados parecido com isto:

Screen Shot 07-23-17 at 01.32 PM

FIGURA 1

Agora já temos base de dados criada, tabela criada e populada, além de índices para fazermos uma simulação desta nova funcionalidade.

Primeiro iremos tentar efetuar um rebuild de index sem utilizar a opção online e utilizando a clausula resumable = ON

ALTER INDEX IX2_tab1 on tab1 rebuild WITH (RESUMABLE = ON, ONLINE = OFF)

Screen Shot 07-23-17 at 01.35 PM

FIGURA 2

Como podemos observar , é uma premissa a opção de rebuild online estar habilitada, sendo assim não vamos perder tempo e vamos processar com o parâmetro online = on :

ALTER INDEX IX2_tab1 ON tab1 REBUILD WITH (RESUMABLE = ON, ONLINE = ON)

Screen Shot 07-29-17 at 06.27 PM

FIGURA 3

Neste passo estamos rodando o rebuild do índice, perceba que ele está rodando há 10 segundos.

Screen Shot 07-29-17 at 07.20 PM

FIGURA 4

A imagem acima demonstra que aos 39 segundos foi abortada a operação, neste caso, teoricamente teríamos perdido todo trabalho realizado referente ao rebuild do índice, no entanto iremos efetuar uma consulta no banco de dados em  uma nova DMV introduzida chamada sys.index_resumable_operations.

select name,total_execution_time,
percent_complete,
page_count,state_desc,
start_time,last_pause_time
from sys.index_resumable_operations

Screen Shot 07-29-17 at 07.21 PM

FIGURA 5

Como podemos perceber,  temos o percentual exato que o indice foi pausado automaticamente, desta forma, poderemos no futuro começar exatamente do mesmo ponto em que paramos.

ALTER INDEX IX2_tab1 ON tab1 RESUME;

Screen Shot 07-29-17 at 07.24 PM

FIGURA 6

Como a imagem mostra, tivemos a conclusão do indice com o comando resume . 

Apesar de ser algo muito simples, eu sinceramente vi muitas pessoas que nem se quer sabiam da existência disto, fato é que este recurso em breve será muito utilizado por grande parte dos mortais!!

Assim, finalizo este post, agradeço a todos e caso tenham dúvidas, criticas ou elogios fiquem a vontade.

Não se esqueçam de curtir a página da Dataside no facebook

https://www.facebook.com/dataside/

Abraços

Referências: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-index-transact-sql

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s