Resumo
If you have a multi-array environment, you can freeze database write I/O to take coordinated snapshots across volumes on two FlashArray systems using the T-SQL snapshot backup feature in SQL Server 2022.
Este artigo apareceu pela primeira vez no blog de Anthony Nocentino. Ela foi republicada com o crédito e o consentimento do autor.
Nesta publicação, a quarta da série, quero compartilhar um exemplo demonstrando o recurso de backup de snapshot T-SQL do SQL Server 2022 em um cenário em que um banco de dados abrange vários arrays de armazenamento. Se você estiver lidando com ambientes de vários arrays, perceberá como essa técnica congela I/O de gravação de banco de dados para tirar snapshots coordenados em volumes em dois sistemas FlashArray . Nesta publicação, apresentarei o processo, indicarei alguns dos principais elementos do script e mostrarei quanto tempo leva a pausa de gravação I/O.
O cenário
Imagine que você tem um banco de dados chamado MultiArraySnapshot que é distribuído em dois volumes separados, cada um localizado em seu próprio sistema FlashArray da Pure Storage®. Essa configuração pode ser benéfica para gerenciar ambientes grandes e essenciais, onde o desempenho e a consistência dos dados são essenciais. O desafio está na coordenação de um backup de snapshot que permite que ambos os arrays capturem uma visão uniforme dos dados simultaneamente. E usando o recurso de backup de snapshot T-SQL do SQL Server 2022, podemos fazer exatamente isso… vamos nos aprofundar.
Figura 1: Um banco de dados com arquivos em dois sistemas FlashArray.
Visão geral do processo
O processo é simples: Congele o banco de dados usando o snapshot T-SQL, tire snapshots de cada array e execute um backup somente de metadados para documentar os detalhes do snapshot. Esse backup de metadados descongela automaticamente o banco de dados.
Configuração do ambiente
Primeiro, importamos os módulos necessários e definimos variáveis de conexão para nossa instância do SQL Server, os dois sistemas FlashArray e vários volumes. Observe como especificamos detalhes, como os números de série do disco de destino e o caminho de compartilhamento de backup:
Estabelecemos uma sessão remota do PowerShell usando a nova sessão e criamos uma conexão SMO persistente com o Connect-DbaInstance. Essa conexão é essencial, pois permanece aberta até que os metadados de backup sejam gravados.
Examine o layout do arquivo de banco de dados
Em seguida, vamos usar o Get-DbaDbFile para obter informações detalhadas sobre os arquivos de banco de dados para o banco de dados especificado. Em nosso exemplo, P:\SQLDATA1\MultiArraySnapshot.mdf está localizado no FlashArray1 e Q:\SQLLOG1\MultiArraySnapshot_log.ldf no FlashArray2.
Conexão aos sistemas FlashArray
Agora, autenticamos as APIs REST de nossos sistemas FlashArray usando credenciais armazenadas localmente. Isso nos permite executar operações de snapshot nos arrays.
Congelamento do banco de dados
Para criar um snapshot pontual entre os dois sistemas FlashArray, suspendemos temporariamente I/O de gravação executando o comando ALTER DATABASE [MultiArraySnapshot] SET SUSPEND_FOR_SNAPSHOT_BACKUP = ON. Essa ação coloca o banco de dados em um estado estável, preparando-o para os snapshots de ambos os sistemas FlashArray. Durante esse processo, você ainda pode ler no banco de dados.
Tirando os snapshots
Com o banco de dados congelado para gravação I/O, agora tiramos snapshots em ambos os arrays usando o New-Pfa2ProtectionGroupSnapshot. Esses snapshots capturam o estado do grupo de proteção.
Backup e descongelamento de Metadata
Em seguida, é criado um backup de metadados. Essa é a etapa crucial para gerar um arquivo de backup (usaremos isso mais tarde ao restaurar esse banco de dados), descongelar automaticamente o banco de dados e gravar esse snapshot no histórico de backup do banco de dados.
Você pode verificar o status do backup do snapshot revisando o histórico de backup da instância usando Get-DbaDbBackupHistory.
Vamos fazer algo não tão bom…
Agora, para fins de demonstração, vamos abrir uma mesa.
Como realizar uma restauração de um backup de snapshot em dois arrays
Depois de soltar a tabela, vamos restaurar todo o banco de dados de um snapshot. A primeira coisa que precisamos fazer é deixar o banco de dados off-line.
Em seguida, levamos os volumes que contêm nossos arquivos de banco de dados offline usando o Set-Disk, que tem como alvo os discos pelos números de série em uma conexão remota do PowerShell. Embora você possa executar isso localmente na instância do SQL Server, estou executando esse código na minha jumpbox.
Com o banco de dados e seus volumes off-line, agora usamos os snapshots em cada FlashArray para restaurar os volumes para seu estado. Antes de excluir a tabela do banco de dados, usaremos o New-Pfa2Volume para isso.
Depois de reverter os volumes em cada um dos sistemas FlashArray para seu estado anterior por meio dos snapshots, vamos colocar os discos do banco de dados online no Windows.
Depois de colocar os discos de volta online, restauramos o banco de dados usando nosso backup de metadados, usando o RESTORE DATABASE $DbName FROM DISK = ‘$BackupFile’ WITH METADATA_ONLY, SUPLACE.
Depois de restaurado, verificamos o estado do banco de dados MultiArraySnapshot e vemos que ele está ON-LINE.
E, finalmente, verificamos que nossa mesa solta está de volta ao lugar graças ao processo de restauração quase instantâneo.
Por que estou fazendo isso?
Esse script é importante porque mostra uma maneira de fazer snapshots e restaurar um banco de dados a partir de snapshots em vários arrays de armazenamento em um ambiente SQL Server. Veja por que isso é importante:
- Instantâneos uniformes entre arrays: Este exemplo acima usa o backup de snapshot T-SQL do SQL Server 2022 para pausar I/O gravação em um banco de dados com arquivos em dois volumes em dois sistemas FlashArray diferentes. Ao fazer isso, os snapshots tirados em dois sistemas FlashArray separados capturam o banco de dados em um estado estável, garantindo que o banco de dados seja restaurado de forma confiável.
- Pausa de I/O de gravação minimizada: Ao coordenar um backup somente de metadados que descongela automaticamente o banco de dados, esse processo minimiza a janela de tempo de inatividade, que é um fator crítico em ambientes de alta disponibilidade/alto desempenho.
- Recursos avançados do SQL Server: Esta seção apresenta novos recursos no SQL Server 2022 e fornece um exemplo real de como usar esses recursos para aprimorar estratégias de backup e planos de recuperação de desastres em cenários complexos de implantação, como um banco de dados que abrange dois ou mais arrays.
Quanto tempo leva?
Essa demonstração executa o código desde o congelamento até o descongelamento em torno de 200 ms para todo o processo de snapshot em ambos os arrays.
Encerrando as coisas
Nesta publicação, a quarta de nossa série, usamos o recurso de backup de snapshot T-SQL em um ambiente de vários arrays.
Você viu como pode:
- Restaure rapidamente usando backups somente de metadados
- Congele I/O de gravação em um banco de dados
- Coordene snapshots em vários arrays de armazenamento
Você pode pegar o script completo desta publicação de blog no GitHub.
Go Deeper
Learn more in the video “Are Snapshots Backups?”