Partilhar via


Monitorar e gerenciar o desempenho do Banco de Dados SQL do Azure multilocatário fragmentado 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 bancos de dados multilocatários fragmentados, os recursos internos de monitoramento e alerta do Banco de Dados SQL do Azure são demonstrados.

O aplicativo Wingtip Tickets SaaS Multi-tenant Database usa um modelo de dados multilocatário fragmentado, onde os dados do local (locatário) são distribuídos pelo ID do locatário em vários bancos de dados potenciais. 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 podem ser dimensionados para cima e para baixo para otimizar o custo de uma solução. Com esse tipo de padrão, é importante monitorar o uso de recursos de banco de dados para garantir que as cargas sejam razoavelmente equilibradas entre bancos de dados potencialmente múltiplos. Você também precisa garantir que os bancos de dados individuais tenham recursos adequados e não estejam atingindo seus limites de DTU . Este tutorial explora maneiras de monitorar e gerenciar bancos de dados e como tomar medidas corretivas em resposta a variações na carga de trabalho.

Neste tutorial, ficará a saber como:

  • Simule o uso em um banco de dados multilocatário fragmentado executando um gerador de carga fornecido
  • Monitore o banco de dados à medida que ele responde ao aumento da carga
  • Aumente a escala do banco de dados em resposta ao aumento da carga do banco de dados
  • Provisionar um locatário em um banco de dados de locatário único

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.

Estratégias da gestão do desempenho

  • Para evitar ter que monitorar manualmente o desempenho, é mais eficaz definir alertas que são acionados quando os bancos de dados saem dos intervalos normais.
  • Para responder a flutuações de curto prazo no tamanho de computação de um banco de dados, o nível de DTU pode ser dimensionado para cima ou para baixo. Se essa flutuação ocorrer em uma base regular ou previsível, o dimensionamento do banco de dados pode 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 longo prazo ou alterações nos inquilinos, os inquilinos individuais podem ser movidos para outra base de dados.
  • Para responder a aumentos de curto prazo na carga de locatários individuais, os locatários individuais podem ser retirados de um banco de dados e atribuídos a um tamanho de computação individual. Depois que a carga for reduzida, o locatário poderá ser retornado ao banco de dados multilocatário. Quando isso é conhecido com antecedência, os locatários podem ser movidos preventivamente para garantir que o banco de dados sempre tenha os recursos necessários e para evitar impacto em outros locatários no banco de dados multilocatário. 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. Para o Banco de dados SQL, o monitoramento e os alertas estão disponíveis em bancos de dados. Esse monitoramento e alerta internos são específicos de recursos, por isso é conveniente usar para um pequeno número de recursos, mas não é 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.

Obtenha o código-fonte e os scripts do aplicativo Wingtip Tickets SaaS Multi-tenant Database

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

Aprovisionar inquilinos adicionais

Para uma boa compreensão de como o monitoramento e o gerenciamento de desempenho funcionam em escala, este tutorial exige que você tenha vários locatários em um banco de dados multilocatário fragmentado.

Se você já tiver provisionado um lote de locatários em um tutorial anterior, vá 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 implanta 17 locatários no banco de dados multilocatário em poucos minutos.

O script New-TenantBatch cria novos locatários com chaves de locatário exclusivas dentro do banco de dados multilocatário fragmentado e os inicializa com o nome do locatário e o tipo de local. Isso é consistente com a maneira como o aplicativo provisiona um novo locatário.

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 no banco de dados multilocatário. A carga é gerada usando um dos cenários de carga disponíveis:

Demonstração Cenário
2 Gerar carga de intensidade normal (aproximadamente 30 DTU)
3 Gere carga com rajadas mais longas por locatário
4 Gerar carga com picos de DTU mais altos por locatário (aproximadamente 70 DTU)
5 Gere uma alta intensidade (aproximadamente 90 DTU) em um único locatário mais uma carga de intensidade normal em todos os outros locatários

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 DTUs), duração e intervalos são variados em todos os bancos de dados, simulando atividade imprevisível do 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. Definir $DemoScenario = 2, Gerar carga de intensidade normal
  3. Pressione F5 para aplicar uma carga a todos os seus locatários.

O Wingtip Tickets SaaS Multi-tenant Database é 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á sendo executado como uma série de trabalhos em uma nova janela do PowerShell. Se você fechar a sessão, 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 para o banco de dados multilocatário, , tenants1contendo os locatários:

  1. Abra o portal do Azure e navegue até o servidor tenants1-mt-<USER>.
  2. Role para baixo e localize bancos de dados e selecione locatários1. Esse banco de dados multilocatário fragmentado contém todos os locatários criados até agora.

A screenshot of the Azure portal showing the database monitoring chart.

Observe o gráfico da DTU .

Definir alertas de desempenho no banco de dados

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

  1. Abra o tenants1 banco de dados (no tenants1-mt-<USER> servidor) no portal do Azure.

  2. Selecione Regras de alerta e, em seguida, selecione + Adicionar alerta:

    A screenshot from the Azure portal. UnderMonitoring and Alert Rules, the Add alert page is shown.

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

  4. Defina os seguintes valores:

    • Métrica = percentagem de DTU
    • 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(is) e selecione OK.

    A screenshot from the Azure portal. The Add an Alert rule page is shown.

Aumente a escala de um banco de dados ocupado

Se o nível de carga aumentar em um banco de dados a ponto de atingir o máximo de uso do banco de dados e atingir 100% de uso da DTU, o desempenho do banco de dados será afetado, potencialmente diminuindo os tempos de resposta da consulta.

A curto prazo, considere dimensionar o banco de dados para fornecer recursos adicionais ou remover locatários do banco de dados multilocatário (movendo-os do banco de dados multilocatário para um banco de dados autônomo).

A longo prazo, considere otimizar consultas ou o uso de índices para melhorar o desempenho do banco de dados. Dependendo da sensibilidade do aplicativo a problemas de desempenho, é uma prática recomendada aumentar a escala de um banco de dados antes que ele atinja 100% de uso da DTU. Utilize um alerta para avisá-lo antecipadamente.

Você pode simular um banco de dados ocupado aumentando a carga produzida pelo gerador. Fazendo com que os locatários intermitam com mais frequência e por mais tempo, aumentando a carga no banco de dados multilocatário sem alterar os requisitos dos locatários individuais. A expansão do banco de dados é feita facilmente no portal ou no PowerShell. Este exercício utiliza o portal.

  1. Conjunto $DemoScenario = 3, Gere carga com picos mais longos e frequentes por banco de dados para aumentar a intensidade da carga agregada no banco de dados sem alterar a carga de pico exigida por cada locatário.
  2. Prima F5 para aplicar uma carga a todas as bases de dados de inquilinos.
  3. Vá para o tenants1 banco de dados no portal do Azure.

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

  1. Para aumentar a escala do banco de dados, selecione Camada de preço (dimensionar DTUs) na página de configurações.
  2. Ajuste a configuração da DTU para 100.
  3. Selecione Aplicar para enviar a solicitação para dimensionar o banco de dados.

Volte para Visão geral dos locatários1>para exibir os gráficos de monitoramento. Monitore o efeito de fornecer mais recursos ao banco de dados (embora com poucos locatários e uma carga aleatória nem sempre seja fácil de ver conclusivamente até que você execute por algum tempo). Enquanto você está olhando para os gráficos, tenha em mente que 100% no gráfico superior agora representa 100 DTUs, enquanto no gráfico inferior 100% ainda é 50 DTUs.

As bases de dados permanecem online e estão totalmente disponíveis durante o processo. O código do aplicativo sempre deve ser gravado para repetir conexões descartadas e, portanto, se reconectará ao banco de dados.

Provisionar um novo locatário em seu próprio banco de dados

O modelo multilocatário fragmentado permite que você escolha se deseja provisionar um novo locatário em um banco de dados multilocatário ao lado de outros locatários ou provisionar o locatário em um banco de dados próprio. Ao provisionar um locatário em seu próprio banco de dados, ele se beneficia do isolamento inerente ao banco de dados separado, permitindo que você gerencie o desempenho desse locatário independentemente de outros, restaure esse locatário independentemente de outros, etc. Por exemplo, você pode optar por colocar clientes de avaliação gratuita ou regulares em um banco de dados multilocatário e clientes premium em bancos de dados individuais. Se bancos de dados isolados de locatário único forem criados, eles ainda poderão ser gerenciados coletivamente em um pool elástico para otimizar os custos de recursos.

Se você já provisionou um novo locatário em seu próprio banco de dados, ignore as próximas etapas.

  1. No ISE do PowerShell, abra ...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1o .
  2. Modificar $TenantName = "Salix Salsa" e $VenueType = "dance".
  3. Definir $Scenario = 2, Provisionar um locatário em um novo banco de dados de locatário único.
  4. Prima F5 para executar o script.

O script provisionará esse locatário em um banco de dados separado, registrará o banco de dados e o locatário no catálogo e abrirá a página Eventos do locatário no navegador. Atualize a página do Hub de Eventos e você verá que "Salix Salsa" foi adicionado como um local.

Nota

A restauração de bancos de dados multilocatários para um único locatário não é possível.

Gerenciar o desempenho de um banco de dados individual

Se um único locatário em um banco de dados multilocatário tiver uma carga alta sustentada, ele tende a dominar os recursos do banco de dados e afetar outros locatários no mesmo banco de dados. Se for provável que a atividade continue por algum tempo, o locatário pode ser movido temporariamente para fora do banco de dados e para seu próprio banco de dados de locatário único. Isso permite que o inquilino tenha os recursos extras de que precisa e o isola totalmente dos outros inquilinos.

Este exercício simula o efeito de Salix Salsa experimentar uma carga elevada quando os bilhetes são colocados à venda para um evento popular.

  1. Abra o ...\Demo-PerformanceMonitoringAndManagement.ps1 script.
  2. Definir $DemoScenario = 5, Gere uma carga normal mais uma carga alta em um único locatário (aproximadamente 90 DTU).
  3. Definir $SingleTenantName = Salix Salsa.
  4. Execute o script com F5.

Vá para o portal do Azure e navegue até Visão geral do salixsalsa>para exibir os gráficos de monitoramento.

Outros padrões de gestão de desempenho

Dimensionamento de autoatendimento do locatário

Como o dimensionamento é uma tarefa facilmente chamada por meio da API de gerenciamento, você pode facilmente criar a capacidade de dimensionar bancos de dados de locatários em seu aplicativo voltado para locatário e oferecê-lo como um recurso do seu 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 banco de dados para cima e para baixo em um cronograma para corresponder aos padrões de uso

Onde o uso agregado do locatário segue padrões de uso previsíveis, você pode usar a Automação do Azure para dimensionar um banco de dados para cima e para baixo em uma agenda. Por exemplo, reduza a escala de um banco de dados depois das 18h e aumente novamente antes das 6h nos dias úteis quando souber que há uma queda nos requisitos de recursos.

Próximos passos

Neste tutorial, ficará a saber como:

  • Simule o uso em um banco de dados multilocatário fragmentado executando um gerador de carga fornecido
  • Monitore o banco de dados à medida que ele responde ao aumento da carga
  • Aumente a escala do banco de dados em resposta ao aumento da carga do banco de dados
  • Provisionar um locatário em um banco de dados de locatário único

Recursos adicionais