Deixando sua rotina de backup mais inteligente
Fala galera!
Tudo certo com vocês?
No post de hoje gostaria de compartilhar um novo recurso do SQL Server 2017 que é o Smart Backup e depois também foi disponibilizado no Service Pack 2 do SQL Server 2016.
Basicamente o que temos de novo é uma coluna na DMV (Dynamic Management View) sys.dm_db_file_space_usage chamada “modified_extent_page_count”. Essa coluna traz o número de páginas que foram alteradas desde o seu último backup full. Verificando essas contagens de páginas podemos deixar as nossas rotinas de backup mais inteligentes, pois o número de páginas modificadas pode ser usado para rastrear as alterações do banco de dados desde o último backup full e com isso decidir se o backup diferencial poderia ser o mais indicado nesse caso.
Normalmente utilizamos uma política de fazer um backup full no sábado ou domingo e backups diferenciais durante a semana. Utilizando essa estratégia tradicional, muitas vezes acontece de o backup diferencial de sexta-feira já estar quase do tamanho do backup full e tem casos que até maior, o que leva a um tempo maior em caso de necessidade de se fazer um restore.
Com essa nova feature podemos deixar as nossas rotinas de backup mais inteligentes validando se o percentual de páginas alteradas é 75% do total de páginas do bando de dados. Nesse caos, já valeria a pena fazer um backup full ao invés de um backup diferencial!
Vejamos na pratica como funciona:
Antes vamos realizar um backup full da nossa database para zerar o percentual de páginas alteradas.
Backup Database Northwind To disk = 'D:\SQLSERVER\BKP\NorthWind_Dados_Full.bak' with compression, format, stats=5
SELECT DB_NAME(database_id) DB_Name, total_page_count TotalPaginas, modified_extent_page_count TotalExtent_Modificado, CAST((modified_extent_page_count + mixed_extent_page_count) * 1.00 / allocated_extent_page_count AS NUMERIC(18, 2)) [%_PagModificadas] FROM sys.dm_db_file_space_usage;
Como podemos observar o %_PagModificadas está zerado.
O script abaixo faz uma validação se o percentual de páginas alteradas é maior que 75% e se o dia da semana está entre segunda-feira e quinta-feira ou se é domingo. Se essa cláusula for verdadeira, a rotina vai executar um backup full, caso contrário, executa o backup diferencial.
DECLARE @threshold_bkp_full NUMERIC(18,2), @dia_semena int SELECT @threshold_bkp_full = CAST((modified_extent_page_count + mixed_extent_page_count) * 1.00 / allocated_extent_page_count AS NUMERIC(18, 2)) FROM sys.dm_db_file_space_usage; SELECT @dia_semena = DATEPART(WEEKDAY,GETDATE()) -- 1 - Domingo -- 2 - Segunda-feira -- 3 - Terça-feira -- 4 - Quarta-feira -- 5 - Quinta-feira -- 6 - Sexta-feira -- 7 - Sábado IF (@threshold_bkp_full > '0.75' AND @dia_semena in (2,3,4,5)) OR @dia_semena = 1 BEGIN BACKUP DATABASE Northwind TO DISK = 'D:\SQLSERVER\BKP\NorthWind_Dados_Full.bak' WITH COMPRESSION, FORMAT, STATS = 5 PRINT 'Backup FULL' END ELSE BEGIN BACKUP DATABASE Northwind TO DISK = 'D:\SQLSERVER\BKP\NorthWind_Dados_Dif.bak' WITH COMPRESSION, FORMAT, DIFFERENTIAL, STATS = 5 PRINT 'Backup Diferencial' END
Sugerindo que esse backup full foi realizado em um Domingo, durante a Segunda-feira a empresa trabalhou normalmente e algumas páginas foram alteradas.
Podemos observar que na segunda-feira apenas 3% das páginas de dados foram alteradas. Com isso, a nossa rotina de backup vai realizar o backup diferencial, como é esperado.
Agora vamos simular que chegamos na Quinta-feira e já tivemos bastante alterações no banco, milhares de registros novos e milhares de update aconteceram. Com isso, ultrapassamos o nosso threshold de 75% de páginas modificadas.
Como podemos ver na Quinta-feira o nosso percentual de páginas alteradas chegou a 83%, com isso a nossa rotina vai executar um backup full.
Como foi dito na introdução do post, essa nova feature nos ajuda a otimizar a nossa estratégia de backups. O script de validação do % de páginas modificadas e dia da semana pode ser melhor customizados, no exemplo do post coloquei algo bem simples mesmo.
Bom pessoal a ideia desse post foi apresentar essa nova feature apesar de não ser novidade, pois o SQL Server 2019 já está saindo do forno e muitos ainda não conheciam.
Espero que tenham gostado.
Abraços,
Tiago Neves
Curta a minha página no Facebook.
Muito bom Tiago. Tudo que otimiza é lucro.
Obrigado.