Monitorar e gerenciar o desempenho do Banco de Dados SQL do Azure em um aplicativo SaaS multilocatário

Aplica-se a:Banco de Dados SQL do Azure

Neste tutorial, vários cenários-chave de gerenciamento de desempenho usados em aplicativos SaaS são explorados. Usando um gerador de carga para simular a atividade em todos os bancos de dados de locatário, os recursos internos de monitoramento e alerta do Banco de dados SQL e pools elásticos são demonstrados.

O aplicativo Wingtip Tickets SaaS Database Per Tenant usa um modelo de dados de locatário único, onde cada local (locatário) tem seu próprio banco de dados. Como em muitas aplicações SaaS, o padrão de carga de trabalho do inquilino antecipado é imprevisível e esporádico. Por outras palavras, as vendas de bilhetes podem ocorrer em qualquer altura. Para aproveitar esse padrão típico de uso de banco de dados, os bancos de dados de locatários são implantados em pools elásticos. Os conjuntos elásticos otimizam o custo de uma solução ao partilhar recursos em muitas bases de dados. Com este tipo de padrão, é importante monitorizar a utilização das bases de dados e dos recursos dos conjuntos para confirmar que as cargas estão razoavelmente equilibradas entre os conjuntos. Também tem de garantir que as bases de dados individuais têm os recursos adequados e que os conjuntos não estão a atingir os seus limites eDTU. Este tutorial analisa formas de monitorizar e gerir bases de dados e conjuntos e como tomar uma medida corretiva em resposta a variações na carga de trabalho.

Neste tutorial, ficará a saber como:

  • Simular a utilização nas bases de dados de inquilinos ao executar um gerador de carga fornecido
  • Monitorizar as bases de dados de inquilinos à medida que a carga aumenta
  • Aumentar verticalmente o Conjunto elástico em resposta ao aumento de carga da base de dados
  • Aprovisionar um segundo Conjunto elástico para balancear a carga da atividade da base de dados

Para concluir este tutorial, devem ser cumpridos os seguintes pré-requisitos:

Introdução aos padrões de gerenciamento de desempenho SaaS

Gerir o desempenho da base de dados consiste em compilar e analisar dados de desempenho e, em seguida, reagir a estes dados ajustando os parâmetros para manter um tempo de resposta aceitável para a aplicação. Ao hospedar vários locatários, os pools elásticos são uma maneira econômica de fornecer e gerenciar recursos para um grupo de bancos de dados com cargas de trabalho imprevisíveis. Com determinados padrões de carga de trabalho, um mínimo de duas bases de dados S3 pode beneficiar ao serem geridas num conjunto.

application diagram

Os pools e os bancos de dados em pools devem ser monitorados para garantir que permaneçam dentro de intervalos aceitáveis de desempenho. Ajuste a configuração do pool para atender às necessidades da carga de trabalho agregada de todos os bancos de dados, garantindo que as eDTUs do pool sejam apropriadas para a carga de trabalho geral. Ajuste os valores eDTU mínimo e máximo por cada base de dados para adequar os valores aos requisitos da aplicação específica.

Estratégias da gestão do desempenho

  • Para evitar ter que monitorar manualmente o desempenho, é mais eficaz definir alertas que são acionados quando bancos de dados ou pools saem dos intervalos normais.
  • Para responder a flutuações de curto prazo no tamanho de computação agregado de um pool, o nível de eDTU do pool pode ser dimensionado para cima ou para baixo. Se esta flutuação ocorrer numa base regular ou previsível, o dimensionamento do conjunto poderá ser agendado para ocorrer automaticamente. Por exemplo, reduza verticalmente quando sabe que a carga de trabalho é leve, talvez durante a noite ou durante os fins de semana.
  • Para responder a flutuações de duração mais longa ou alterações no número de bases de dados, as bases de dados individuais podem ser movidas para outros grupos.
  • Para responder a aumentos de curto prazo na carga individual do banco de dados, os bancos de dados individuais podem ser retirados de um pool e atribuídos a um tamanho de computação individual. Assim que a carga for reduzida, a base de dados pode ser devolvida ao conjunto. Quando isso é conhecido com antecedência, os bancos de dados podem ser movidos preventivamente para garantir que o banco de dados sempre tenha os recursos necessários e para evitar impacto em outros bancos de dados no pool. Se este requisito for previsível, por exemplo, quando um local tem uma grande procura de bilhetes para um evento popular, este comportamento de gestão poderá ser integrado na aplicação.

O portal do Azure fornece monitorização e alertas incorporados na maior parte dos recursos. O monitoramento e os alertas estão disponíveis em bancos de dados e pools. Esse monitoramento e alerta integrados são específicos de recursos, por isso é conveniente usar para um pequeno número de recursos, mas não é muito conveniente ao trabalhar com muitos recursos.

Para cenários de alto volume, onde você está trabalhando com muitos recursos, os logs do Azure Monitor podem ser usados. Este é um serviço do Azure separado que fornece análises sobre logs emitidos reunidos em um espaço de trabalho do Log Analytics. Os logs do Azure Monitor podem coletar telemetria de muitos serviços e ser usados para consultar e definir alertas.

Obter os scripts de aplicativo SaaS Database Wingtip Tickets por locatário

Os scripts Wingtip Tickets SaaS Multi-tenant Database e o código-fonte do aplicativo estão disponíveis no repositório GitHub WingtipTicketsSaaS-DbPerTenant . Confira as orientações gerais para conhecer as etapas para baixar e desbloquear os scripts SaaS do Wingtip Tickets.

Aprovisionar inquilinos adicionais

Apesar de os conjuntos poderem ser económicos com apenas duas bases de dados S3, quantas mais bases de dados estiverem no conjunto mais económico será o efeito em média. Para uma boa compreensão de como funciona a monitorização e a gestão do desempenho à escala, este tutorial requer que tenha, pelo menos, 20 bases de dados implementadas.

Se você já provisionou um lote de locatários em um tutorial anterior, pule para a seção Simular uso em todos os bancos de dados de locatário.

  1. No ISE do PowerShell, abra ...\Learning Modules\Performance Monitoring and Management\Demo-PerformanceMonitoringAndManagement.ps1. Mantenha este script aberto, uma vez que vai executar vários cenários durante este tutorial.
  2. Defina $DemoScenario = 1, Aprovisionar um lote de inquilinos
  3. Prima F5 para executar o script.

O script implementará 17 inquilinos em menos de cinco minutos.

O script New-TenantBatch usa um conjunto aninhado ou vinculado de modelos do Resource Manager que criam um lote de locatários, que por padrão copia o banco de dados basetenantdb no servidor de catálogo para criar os novos bancos de dados de locatário, registra-os no catálogo e, finalmente, inicializa-os com o nome do locatário e o tipo de local. Isso é consistente com a maneira como o aplicativo provisiona um novo locatário. Quaisquer alterações feitas no basetenantdb são aplicadas a todos os novos locatários provisionados posteriormente. Consulte o tutorial Gerenciamento de esquema para ver como fazer alterações de esquema em bancos de dados de locatários existentes (incluindo o banco de dados basetenantdb).

Simular a utilização em todas as bases de dados de inquilinos

É fornecido o script Demo-PerformanceMonitoringAndManagement.ps1 que simula uma carga de trabalho em execução em todos os bancos de dados de locatário. A carga é gerada usando um dos cenários de carga disponíveis:

Demonstração Cenário
2 Gerar carga de intensidade normal (aproximadamente 40 DTU)
3 Gerar carga com picos mais demorados e mais frequentes por base de dados
4 Gerar carga com maiores intermitências de DTU por banco de dados (aproximadamente 80 DTU)
5 Gerar uma carga normal mais uma carga alta em um único locatário (aproximadamente 95 DTU)
6 Gerar carga desequilibrada em vários conjuntos

O gerador de carga aplica uma carga sintética só na CPU para cada base de dados do inquilino. O gerador inicia uma tarefa para cada base de dados de inquilino, que chama um procedimento armazenado que periodicamente gera a carga. Os níveis de carga (em eDTUs), a duração e os intervalos são diversificados em todas as bases de dados, o que simula a atividade imprevisível do inquilino.

  1. No ISE do PowerShell, abra ...\Learning Modules\Performance Monitoring and Management\Demo-PerformanceMonitoringAndManagement.ps1. Mantenha este script aberto, uma vez que vai executar vários cenários durante este tutorial.
  2. Defina $DemoScenario = 2, Gerar carga de intensidade normal.
  3. Prima F5 para aplicar uma carga a todas as bases de dados de inquilinos.

Wingtip Tickets SaaS Database Per Tenant é um aplicativo SaaS, e a carga do mundo real em um aplicativo SaaS é normalmente esporádica e imprevisível. Para simular isto, o gerador de carga produz uma carga aleatória distribuída por todos os inquilinos. São necessários vários minutos para que o padrão de carga surja, portanto, execute o gerador de carga por 3-5 minutos antes de tentar monitorar a carga nas seções a seguir.

Importante

O gerador de carga está em execução como uma série de tarefas na sessão local do PowerShell. Mantenha aberto o separador Demo-PerformanceMonitoringAndManagement.ps1! Se fechar o separador ou suspender o computador, o gerador de carga será interrompido. O gerador de carga permanece em um estado de chamada de trabalho onde gera carga em quaisquer novos locatários que são provisionados depois que o gerador é iniciado. Use Ctrl-C para parar de invocar novos trabalhos e sair do script. O gerador de carga continuará a funcionar, mas apenas em locatários existentes.

Monitorar o uso de recursos usando o portal do Azure

Para monitorar o uso de recursos resultante da carga que está sendo aplicada, abra o portal no pool que contém os bancos de dados do locatário:

  1. Abra o portal do Azure e navegue até o servidor tenants1-dpt-USER<>.
  2. Desloque-se para baixo, localize os conjuntos elásticos e clique em Pool1. Este conjunto contém todas as bases de dados de inquilinos criadas até à data.

Observe os gráficos de monitoramento do pool elástico e do banco de dados elástico.

A utilização de recursos do pool é a utilização agregada do banco de dados para todos os bancos de dados no pool. O gráfico do banco de dados mostra os cinco bancos de dados mais quentes:

database chart

Como há bancos de dados adicionais no pool além dos cinco primeiros, a utilização do pool mostra a atividade que não é refletida no gráfico dos cinco principais bancos de dados. Para obter detalhes adicionais, clique em Utilização de Recursos de Banco de Dados:

database resource utilization

Definir alertas de desempenho no conjunto

Defina um alerta no pool que dispara 75% de >utilização da seguinte maneira:

  1. Abra Pool1 (no servidor tenants1-dpt-user<>) no portal do Azure.

  2. Clique em Regras de Alertae, em seguida, clique em + Adicionar alerta:

    add alert

  3. Forneça um nome, tal como DTU elevada,

  4. Defina os seguintes valores:

    • Métrica = percentagem de eDTU
    • Condição = superior a
    • Limiar = 75
    • Período = Nos últimos 30 minutos
  5. Adicione um endereço de e-mail à caixa E-mail(s) de administrador adicional e clique em OK.

    set alert

Aumentar verticalmente um conjunto ocupado

Se o nível de carga agregado aumentar num conjunto até ao ponto máximo do conjunto e atingir a utilização de 100% de eDTU, o desempenho da base de dados individual será afetado, o que potencialmente abranda os tempos de resposta de consulta de todas as bases de dados no conjunto.

A curto prazo, considere expandir o pool para fornecer recursos adicionais ou remover bancos de dados do pool (movendo-os para outros pools ou saindo do pool para uma camada de serviço autônoma).

A longo prazo, considere otimizar consultas ou o uso de índices para melhorar o desempenho do banco de dados. Dependendo da sensibilidade da aplicação relativamente a problemas de desempenho, a melhor prática para aumentar verticalmente um conjunto antes de atingir os 100% de utilização de eDTU. Utilize um alerta para avisá-lo antecipadamente.

Pode simular um conjunto ocupado ao aumentar a carga produzida pelo gerador. Fazendo com que os bancos de dados intermitam com mais frequência e por mais tempo, aumentando a carga agregada no pool sem alterar os requisitos dos bancos de dados individuais. O aumento vertical do conjunto é feito facilmente no portal ou a partir do PowerShell. Este exercício utiliza o portal.

  1. Defina $DemoScenario = 3, Gerar carga com picos mais demorados e mais frequentes por base de dados para aumentar a intensidade da carga agregada no conjunto sem alterar a carga de pico necessária para cada base de dados.

  2. Prima F5 para aplicar uma carga a todas as bases de dados de inquilinos.

  3. Vá para Pool1 no portal do Azure.

Monitore o aumento do uso de eDTU do pool no gráfico superior. Leva alguns minutos para que a nova carga mais alta entre em ação, mas você deve ver rapidamente a piscina começar a atingir a utilização máxima e, à medida que a carga se estabiliza no novo padrão, sobrecarrega rapidamente a piscina.

  1. Para aumentar a escala do pool, clique em Configurar pool na parte superior da página Pool1 .
  2. Ajuste a configuração eDTU do Pool para 100. Alterar a eDTU do conjunto não altera as definições por base de dados (que é ainda o máximo de 50 eDTU por base de dados). Você pode ver as configurações por banco de dados no lado direito da página Configurar pool .
  3. Clique em Salvar para enviar a solicitação de dimensionamento do pool.

Volte para Visão Geral do Pool1>para visualizar os gráficos de monitoramento. Monitore o efeito de fornecer mais recursos ao pool (embora com poucos bancos de dados e uma carga aleatória nem sempre seja fácil de ver conclusivamente até que você execute por algum tempo). Enquanto estiver a visualizar os gráficos tenha em atenção que 100% no gráfico superior representa agora 100 eDTUs, enquanto no gráfico inferior 100% é ainda 50 eDTUs, uma vez que o máximo por base de dados ainda está em 50 eDTUs.

As bases de dados permanecem online e estão totalmente disponíveis durante o processo. No último momento, à medida que cada base de dados fica pronta para ser ativada com a nova eDTU de conjunto, todas as ligações ativas são perdidas. O código da aplicação deve ser sempre escrito para repetir as ligações que caem e, por conseguinte, voltar a ligar à base de dados no conjunto aumentado verticalmente.

Balanceamento de carga entre pools

Como alternativa ao aumento vertical do conjunto, crie um segundo conjunto e mova as bases de dados para o conjunto para balancear a carga entre os dois conjuntos. Para fazê-lo, o novo conjunto tem de ser criado no mesmo servidor do primeiro conjunto.

  1. No portal do Azure, abra o servidor tenants1-dpt-USER><.

  2. Clique em + Novo pool para criar um pool no servidor atual.

  3. No modelo de pool elástico:

    1. Defina Nome como Pool2.

    2. Deixe o escalão de preço como Conjunto Padrão.

    3. Clique em Configurar conjunto.

    4. Defina Pool eDTU para 50 eDTU.

    5. Clique em Adicionar bancos de dados para ver uma lista de bancos de dados no servidor que podem ser adicionados ao Pool2.

    6. Selecione quaisquer 10 bancos de dados para movê-los para o novo pool e clique em Selecionar. Se você estiver executando o gerador de carga, o serviço já sabe que seu perfil de desempenho requer um pool maior do que o tamanho padrão de 50 eDTU e recomenda começar com uma configuração de 100 eDTU.

      recommendation

    7. Para este tutorial, deixe o padrão em 50 eDTUs e clique em Selecionar novamente.

    8. Selecione OK para criar o novo pool e mover os bancos de dados selecionados para ele.

Criar o pool e mover os bancos de dados leva alguns minutos. À medida que as bases de dados são deslocadas, permanecem em linha e totalmente acessíveis até ao último momento, altura em que todas as ligações abertas são fechadas. Contanto que você tenha alguma lógica de repetição, os clientes se conectarão ao banco de dados no novo pool.

Navegue até Pool2 (no servidor tenants1-dpt-user<>) para abrir o pool e monitorar seu desempenho. Se você não vê-lo, aguarde a conclusão do provisionamento do novo pool.

Agora você vê que o uso de recursos no Pool1 caiu e que o Pool2 agora está carregado da mesma forma.

Gerenciar o desempenho de um banco de dados individual

Se um banco de dados individual em um pool tiver uma carga alta sustentada, dependendo da configuração do pool, ele tende a dominar os recursos no pool e afetar outros bancos de dados. Se for provável que a atividade continue por algum tempo, o banco de dados pode ser movido temporariamente para fora do pool. Isso permite que o banco de dados tenha os recursos extras de que precisa e o isola dos outros bancos de dados.

Este exercício simula o efeito de uma carga elevada em Contoso Concert Hall, quando são colocados à venda os bilhetes para um concerto popular.

  1. No ISE do PowerShell, abra o script ...\Demo-PerformanceMonitoringAndManagement.ps1.

  2. Defina $DemoScenario = 5, Gere uma carga normal mais uma carga alta em um único locatário (aproximadamente 95 DTU).

  3. Defina $SingleTenantDatabaseName = contosoconcerthall

  4. Execute o script com F5.

  5. No portal do Azure, navegue até a lista de bancos de dados no servidor tenants1-dpt-user><.

  6. Clique no banco de dados contosoconcerthall .

  7. Clique no pool em que contosoconcerthall está. Localize o pool na seção Pool elástico .

  8. Inspecione o gráfico de monitoramento do pool elástico e procure o aumento do uso de eDTU do pool. Depois de um minuto ou dois, o aumento de carga deve começar a surgir e deve poder ver rapidamente que o conjunto atinge os 100% de utilização.

  9. Inspecione a exibição de monitoramento de banco de dados elástico, que mostra os bancos de dados mais quentes na última hora. O banco de dados contosoconcerthall deve aparecer em breve como um dos cinco bancos de dados mais ativos.

  10. Clique no gráfico de monitoramentodo banco de dados elástico e ele abre a página Utilização de Recursos do Banco de Dados, onde você pode monitorar qualquer um dos bancos de dados. Isso permite isolar a exibição do banco de dados contosoconcerthall .

  11. Na lista de bancos de dados, clique em contosoconcerthall.

  12. Clique em Nível de Preços (dimensionar DTUs) para abrir a página Configurar desempenho, onde você pode definir um tamanho de computação autônomo para o banco de dados.

  13. Clique no separador Padrão para abrir as opções de dimensionamento na camada Padrão.

  14. Deslize o controle deslizante DTU para a direita para selecionar 100 DTUs. Observe que isso corresponde ao objetivo do serviço, S3.

  15. Clique em Aplicar para mover o banco de dados para fora do pool e torná-lo um banco de dados Standard S3 .

  16. Quando o dimensionamento estiver concluído, monitore o efeito no banco de dados contosoconcerthall e no Pool1 no pool elástico e nas folhas do banco de dados.

Assim que a alta carga no banco de dados contosoconcerthall diminuir, você deverá devolvê-la imediatamente ao pool para reduzir seu custo. Se não estiver claro quando isso acontecerá, você pode definir um alerta no banco de dados que será acionado quando o uso da DTU cair abaixo do máximo por banco de dados no pool. Veja o exercício 5, para saber como mover uma base de dados para um conjunto.

Outros padrões de gestão de desempenho

Dimensionamento preventivo No exercício acima, onde você explorou como dimensionar um banco de dados isolado, você sabia qual banco de dados procurar. Se a administração da Contoso Concert Hall tivesse informado a Wingtips da iminente venda de ingressos, o banco de dados poderia ter sido movido para fora do pool preventivamente. Caso contrário, seria provavelmente necessário um alerta no conjunto ou na base de dados para detetar o que estava a acontecer. Você não gostaria de aprender sobre isso com os outros inquilinos na piscina reclamando de desempenho degradado. E se o inquilino pode prever por quanto tempo serão necessários recursos adicionais, pode configurar um runbook de Automatização do Azure para mover a base de dados para fora do conjunto e, em seguida, fazê-la voltar numa agenda definida.

Dimensionamento de self-service do inquilino – Porque o dimensionamento é uma tarefa chamada facilmente através de API de gestão, pode criar facilmente a capacidade de dimensionar bases de dados de inquilino na sua aplicação direcionada para o inquilino e oferecê-la como uma funcionalidade do serviço SaaS. Por exemplo, permita que os inquilinos administrem automaticamente o aumento ou redução vertical, talvez ligando-os diretamente à faturação deles!

Dimensionamento de um pool para cima e para baixo em um cronograma para corresponder aos padrões de uso

Quando a utilização agregada de inquilinos segue padrões de utilização previsível, pode utilizar a Automatização do Azure para aumentar ou reduzir verticalmente um conjunto com base numa agenda. Por exemplo, reduza verticalmente um conjunto após as 18:00 e aumente-o verticalmente antes das 06:00 nos dias da semana quando sabe que existe uma quebra nos requisitos de recursos.

Próximos passos

Neste tutorial, ficará a saber como:

  • Simular a utilização nas bases de dados de inquilinos ao executar um gerador de carga fornecido
  • Monitorizar as bases de dados de inquilinos à medida que a carga aumenta
  • Aumentar verticalmente o Conjunto elástico em resposta ao aumento de carga da base de dados
  • Aprovisionar um segundo Conjunto elástico para balancear a carga da atividade da base de dados

Tutorial Restaurar um inquilino individual

Recursos adicionais