[Azure] SQL Server Stretch Database Overview

O Stretch Database é uma feature disponível a partir do SQL Server 2016 que permite armazenarmos parte dos dados de um banco SQL Server no Azure. Com o Stretch Database temos um exemplo de solução híbrida, onde parte dos dados estão on-premises (local) e parte no Azure.

Atualmente é possível armazenar até 240 TB no Azure com dados de tabelas Stretch.

Apesar do nome da feature ser Stretch Database, na prática, a configuração é por tabela.

A forma mais simples de habilitar o Stretch Database é através do SSMS: botão direito no banco > Tasks > Stretch > Enable. Neste wizard podemos escolher quais tabelas configurar e o wizard dirá se a tabela atende todos os pré-requisitos. Importante frisar que é necessário ter uma assinatura no Azure e que por hora, nem todas as regiões do Azure oferecem este serviço.

Se o cliente desejar, ele pode deixar parte dos dados de uma tabela on-premises e parte dos dados na nuvem (como em um particionamento). Para aplicar este "particionamento" é preciso definir uma função T-SQL com a regra do que deve ser enviado para o Azure; na hora de habilitar o stretch para a tabela, informamos o nome da function como um filter_predicate. Exemplo:

 -- função com a lógica do "particionamento"
create function dbo.fn_filtro_stretch(@dt datetime)
returns table
with schemabinding  
as  
return select 1 as linha_elegivel
       where @dt < '20170701 00:00:00'
go
 -- habilitar o stretch na tabela com a lógica de particionamento:
alter table t1 set ( remote_data_archive = on (
   filter_predicate = dbo.fn_filtro_stretch(data_pedido) ,
   migration_state = outbound
) );

Os dados enviados para o Azure não podem ser modificados.

Depois de enviar os dados para o Azure é possível traze-los de volta para o on-premises, mudando o migration_state para inbound:

 alter table t1
   set ( remote_data_archive = on ( migration_state = inbound ) ) ;
go

Para mensurar o espaço utilizado por uma tabela Stretch, podemos utilizar o comando sp_spaceused com a opção remote_only:

 -- espaço utilizado no Azure:
exec sp_spaceused 'Pedidos', 'true', 'remote_only';
go

Para monitorar a sincronização dos dados para o Azure temos a DMV sys.dm_db_rda_migration_status que exibe os 200 ciclos mais recentes de sincronização dos dados. Essa DMV também será útil para identificar problemas de conectividade.

O Stretch Database é interessante para o armazenamento de cold data, ou seja, dados que precisam ser armazenados por longos períodos, mas que serão consultados raramente. Com essa abordagem o cliente pode reduzir significativamente o custo de armazenamento e também reduzir o tamanho do banco de dados, o que refletirá na redução do custo de operações de backup, reindex, etc.

Os dados armazenados no Azure são criptografados, possuem backup automático e HA/DR.

Tabelas que participam de replicação, In-Memory OLTP, change tracking, CDC, filestream, não suportam o Stretch Database.

Para ter acesso a mais conteúdo, consulte a documentação da feature:

/en-us/sql/sql-server/stretch-database/stretch-database

Até +

 

Silas

============================

The code and techniques described in this blog are presented to the reader ‘as is’, without any warranty, whether express or implied, of its accuracy, completeness, fitness for a particular purpose, title or non-infringement, and none of the third-party products or information mentioned in the work are authored, recommended, supported or guaranteed by any of the authors or Microsoft. Further, the authors shall not be liable for any damages you may sustain by using this information, whether direct, indirect, special, incidental or consequential, even if it has been advised of the possibility of such damages. Your use of the information contained in these pages, is at your sole risk.