Limitações, observações e recomendações de implantação multi-AZ do Microsoft SQL Server - Amazon Relational Database Service

Limitações, observações e recomendações de implantação multi-AZ do Microsoft SQL Server

A seguir você encontrará algumas restrições aplicáveis ao trabalhar com implantações multi-AZ em instâncias de banco de dados do RDS para SQL Server:

  • O Multi-AZ entre regiões não é compatível.

  • Não há suporte para a interrupção de um para a instância de banco de dados SQL Server em uma implantação Multi-AZ.

  • Não é possível configurar a instância de banco de dado secundária para aceitar a atividade de leitura de banco de dados.

  • Multi-AZ com grupos de disponibilidade (AGs) Always On oferece suporte à otimização na memória.

  • O Multi-AZ com grupos de disponibilidade (AGs) Always On não oferece suporte à autenticação Kerberos para o listener do grupo de disponibilidade. Isso ocorre, pois o listener não tem nome principal do serviço (SPN).

  • Não é possível renomear um banco de dados em uma instância de banco de dados do SQL Server que esteja em uma implantação Multi-AZ do SQL Server. Se você precisar renomear um banco de dados em uma instância assim, primeiro desative o Multi-AZ da instância de banco de dados e renomeie o banco de dados. Por fim, reative Multi-AZ para a instância de banco de dados.

  • Você só pode restaurar instâncias de banco de dados Multi-AZ com backup feito usando-se o modelo de recuperação completo.

  • As implantações multi-AZ têm um limite de cem trabalhos do SQL Server Agent.

    Se um limite mais alto for necessário, solicite um aumento de cota entrando em contato com o AWS Support. Abra a página do AWS Support Center, faça login, se necessário, e escolha Create case (Criar caso). Escolha Service limit increase (Aumento de limite do serviço). Preencha e envie o formulário.

  • Não é possível ter um banco de dados off-line em uma instância de banco de dados do SQL Server que esteja em uma implantação multi-AZ do SQL Server.

Veja a seguir algumas observações sobre como trabalhar com implantações multi-AZ em instâncias de banco de dados do RDS para SQL Server:

  • O Amazon RDS expõe o endpoint de listener do grupo de disponibilidade de Always On AGs. O endpoint está visível no console e é retornado pela operação de API DescribeDBInstances como uma entrada no campo de endpoints.

  • O Amazon RDS oferece suporte a failovers de sub-rede do grupo de disponibilidade.

  • Para usar o multi-AZ do SQL Server com uma instância de banco de dados do SQL Server em uma nuvem privada virtual (VPC), primeiro crie um grupo de sub-rede de banco de dados que tenha sub-redes em pelo menos duas zonas de disponibilidade distintas. Em seguida, atribua o grupo de sub-rede de banco de dados à réplica primária da instância de banco de dados do SQL Server.

  • Quando uma instância de banco de dados é modificada para ser uma implantação Multi-AZ, durante a modificação, ela tem o status modifying. O Amazon RDS cria o modo de espera e faz um backup da instância de banco de dados primária. Depois que o processo estiver concluído, o status da instância de banco de dados primária se tornará available (disponível).

  • Implantações Multi-AZ mantém todos os bancos de dados no mesmo nó. Se um banco de dados no host primário fizer failover, todos os bancos de dados do SQL Server farão failover como uma unidade atômica para o host em espera. O Amazon RDS provisiona um novo host íntegro e substitui o host não íntegro.

  • O Multi-AZ com DBM ou AGs oferece suporte a uma única réplica em espera.

  • Os usuários, os logins e as permissões são replicados automaticamente para você na secundária. Não é necessário recriá-los. Os perfis de servidor definidos pelo usuário só são replicados em instâncias de banco de dados que usam AGs Always On para implantações multi-AZ.

  • Em implantações multi-AZ, o RDS para SQL Server cria logins do SQL Server para permitir AGs Always On ou o Database Mirroring. O RDS cria logins com o seguinte padrão, db_<dbiResourceId>_node1_login, db_<dbiResourceId>_node2_login e db_<dbiResourceId>_witness_login.

  • O RDS para SQL Server cria um login do SQL Server para permitir o acesso às réplicas de leitura. O RDS cria um login com o seguinte padrão: db_<readreplica_dbiResourceId>_node_login.

  • Em implantações multi-AZ, os trabalhos do SQL Server Agent são replicados do host primário para o host secundário quando o recurso de replicação de trabalhos é ativado. Para ter mais informações, consulte Ativar a replicação de trabalhos do SQL Server Agent.

  • Convém observar latências elevadas em comparação com uma implantação de instância de banco de dados padrão (em uma única zona de disponibilidade) por causa da replicação de dados síncrona.

  • Os tempos de failover são afetados pelo tempo necessário para completar o processo de recuperação. Transações grandes aumentam o tempo de failover.

  • Em implantações Multi-AZ do SQL Server, a reinicialização com failover reinicializa somente a instância de banco de dados principal. Após o failover, a instância de banco de dados primária torna-se a nova instância de banco de dados secundária. Os parâmetros podem não ser atualizados para instâncias Multi-AZ. Para a reinicialização sem failover, as instâncias de banco de dados primárias e secundárias são reinicializadas e os parâmetros são atualizados após a reinicialização. Se a instância de banco de dados não responder, recomendamos reinicializar sem failover.

A seguir você encontrará algumas recomendações para trabalhar com implantações Multi-AZ em instâncias de banco de dados do RDS for Microsoft SQL Server:

  • Para bancos de dados usados em produção ou pré-produção, recomendamos as seguintes opções:

    • Implantações Multi-AZ para alta disponibilidade

    • "IOPS provisionadas" para performance rápida e consistente

    • "Memória otimizada" em vez de "Uso geral"

  • Não é possível selecionar a zona de disponibilidade (AZ) para a instância secundária. Por isso, quando implantar hosts de aplicativo, leve isso em conta. O banco de dados pode fazer failover para outro AZ, e os hosts de aplicativo podem não estar no mesmo AZ do banco de dados. Por esse motivo, recomendamos equilibrar os hosts de aplicação em todas as AZs na região da AWS indicada.

  • Para obter a melhor performance, não habilite o Database Mirroring ou os AGs Always On durante uma operação grande de carregamento de dados. Se quiser que o carregamento de dados seja o mais rápido possível, termine o carregamento de dados antes de converter a instância de banco de dados em uma implantação Multi-AZ.

  • Os aplicativos que acessam os bancos de dados do SQL Server devem ter um tratamento de exceção que capte erros de conexão. O exemplo de código a seguir mostra um bloco try/catch que capta um erro de comunicação. Neste exemplo, a break instrução sai do while loop se a conexão for bem-sucedida, mas tenta novamente até 10 vezes se uma exceção for lançada.

    int RetryMaxAttempts = 10; int RetryIntervalPeriodInSeconds = 1; int iRetryCount = 0; while (iRetryCount < RetryMaxAttempts) { using (SqlConnection connection = new SqlConnection(DatabaseConnString)) { using (SqlCommand command = connection.CreateCommand()) { command.CommandText = "INSERT INTO SOME_TABLE VALUES ('SomeValue');"; try { connection.Open(); command.ExecuteNonQuery(); break; } catch (Exception ex) { Logger(ex.Message); iRetryCount++; } finally { connection.Close(); } } } Thread.Sleep(RetryIntervalPeriodInSeconds * 1000); }
  • Não use o comando Set Partner Off ao trabalhar com instâncias Multi-AZ. Por exemplo, não faça o seguinte.

    --Don't do this ALTER DATABASE db1 SET PARTNER off
  • Não defina o modo de recuperação como simple. Por exemplo, não faça o seguinte.

    --Don't do this ALTER DATABASE db1 SET RECOVERY simple
  • Não use o parâmetro DEFAULT_DATABASE ao criar novos login em instâncias de banco de dados Multi-AZ, porque essas configurações não podem ser aplicadas ao espelho em espera. Por exemplo, não faça o seguinte.

    --Don't do this CREATE LOGIN [test_dba] WITH PASSWORD=foo, DEFAULT_DATABASE=[db2]

    Além disso, não faça o seguinte.

    --Don't do this ALTER LOGIN [test_dba] SET DEFAULT_DATABASE=[db3]