Dela via


Övervaka och hantera prestanda för shardad Azure SQL Database för flera klientorganisationer i en SaaS-app med flera klientorganisationer

Gäller för:Azure SQL Database

I den här självstudien utforskas flera viktiga scenarier för prestandahantering som används i SaaS-program. Med hjälp av en belastningsgenerator för att simulera aktivitet över shardade databaser med flera klientorganisationer demonstreras de inbyggda funktionerna för övervakning och aviseringar i Azure SQL Database.

Wingtip Tickets SaaS Multi-tenant Database-appen använder en fragmenterad datamodell för flera klientorganisationer, där platsdata (klient) distribueras av klientorganisations-ID över potentiellt flera databaser. Precis som för flera SaaS-program så är de förväntade belastningsmönstren för klienterna oberäkneliga och sporadiska. Biljettförsäljningar kan med andra ord ske när som helst. För att dra nytta av det här vanliga databasanvändningsmönstret kan databaser skalas upp och ned för att optimera kostnaden för en lösning. Med den här typen av mönster är det viktigt att övervaka databasresursanvändningen för att säkerställa att belastningarna är rimligt balanserade över potentiellt flera databaser. Du måste också se till att enskilda databaser har tillräckliga resurser och inte når sina DTU-gränser . I den här självstudien går vi igenom hur du övervakar och hanterar databaser och hur du vidtar korrigerande åtgärder som svar på variationer i arbetsbelastningen.

I den här självstudiekursen får du lära du dig att:

  • Simulera användning på en fragmenterad databas med flera klientorganisationer genom att köra en angiven belastningsgenerator
  • Övervaka databasen när den svarar på den ökade belastningen
  • Skala upp databasen som svar på den ökade databasbelastningen
  • Etablera en klientorganisation i en databas med en enda klientorganisation

Se till att följande förhandskrav är slutförda för att kunna slutföra den här guiden:

Introduktion till SaaS-prestandahanteringsmönster

Hantering av databasprestanda innebär kompilering och analys av prestandadata för att sedan reagera på den genom att justera parametrarna för att bibehålla en acceptabel svarstid för programmet.

Strategier för prestandahantering

  • För att undvika att behöva övervaka prestanda manuellt är det mest effektivt att ange aviseringar som utlöses när databaser avviker från normala intervall.
  • För att svara på kortsiktiga variationer i beräkningsstorleken för en databas kan DTU-nivån skalas upp eller ned. Om den här fluktuationen sker regelbundet eller förutsägbart kan skalning av databasen schemaläggas automatiskt. Du kan exempelvis skala ned när du vet att din arbetsbelastning är lätt, på nätter eller helger till exempel.
  • För att svara på mer långsiktiga variationer eller ändringar i klienterna kan enskilda klienter flyttas till en annan databas.
  • För att svara på kortsiktiga ökningar av den enskilda klientinläsningen kan enskilda klientorganisationer tas bort från en databas och tilldelas en enskild beräkningsstorlek. När belastningen har minskat kan klientorganisationen sedan returneras till databasen för flera klientorganisationer. När detta är känt i förväg kan klienter flyttas förebyggande för att säkerställa att databasen alltid har de resurser den behöver och för att undvika påverkan på andra klienter i databasen med flera klientorganisationer. Om det här kravet är förutsägbart, till exempel en plats där ett populärt evenemang skapar en rusning efter biljetter, kan det här hanteringsbeteendet integreras i programmet.

Azure-portalen tillhandahåller inbyggd övervakning och avisering för de flesta resurser. För SQL Database är övervakning och aviseringar tillgängliga i databaser. Den här inbyggda övervakningen och aviseringen är resursspecifik, så det är praktiskt att använda för ett litet antal resurser, men det är inte praktiskt när du arbetar med många resurser.

För scenarier med stora volymer, där du arbetar med många resurser, kan Azure Monitor-loggar användas. Det här är en separat Azure-tjänst som tillhandahåller analys över utgivna loggar som samlats in på en Log Analytics-arbetsyta. Azure Monitor-loggar kan samla in telemetri från många tjänster och användas för att köra frågor mot och ställa in aviseringar.

Hämta Källkoden och skripten för Wingtip-biljetter för SaaS-program med flera klientorganisationer

Wingtip Tickets SaaS Multi-tenant Database-skript och programkällkod är tillgängliga i WingtipTicketsSaaS-MultitenantDB GitHub-lagringsplatsen. Se den allmänna vägledningen för steg för att ladda ned och avblockera Wingtip Tickets SaaS-skript.

Etablera ytterligare klienter

För att få en bra förståelse för hur prestandaövervakning och hantering fungerar i stor skala kräver den här självstudien att du har flera klienter i en fragmenterad databas med flera klientorganisationer.

Om du redan har etablerat en batch med klienter i en tidigare självstudie går du vidare till avsnittet Simulera användning på alla klientdatabaser .

  1. I PowerShell ISE öppnar du ...\Learning Modules\Performance Monitoring and Management\Demo-PerformanceMonitoringAndManagement.ps1. Ha det här skriptet öppet medan du kör scenarierna i den här guiden.
  2. Ställ in $DemoScenario = 1, etablera en batch med klienter
  3. Tryck F5 för att köra skriptet.

Skriptet distribuerar 17 klienter till databasen för flera klientorganisationer på några minuter.

Skriptet New-TenantBatch skapar nya klienter med unika klientnycklar i den fragmenterade databasen för flera klientorganisationer och initierar dem med klientnamnet och platstypen. Detta överensstämmer med hur appen etablerar en ny klientorganisation.

Simulera användning på alla klientdatabaser

Skriptet Demo-PerformanceMonitoringAndManagement.ps1 tillhandahålls som simulerar en arbetsbelastning som körs mot databasen med flera klientorganisationer. Belastningen genereras med något av de tillgängliga inläsningsscenarierna:

Demonstration Scenario
2 Generera normal intensitetsbelastning (cirka 30 DTU)
3 Generera belastning med längre bursts per klientorganisation
4 Generera belastning med högre DTU-bursts per klientorganisation (cirka 70 DTU)
5 Generera en hög intensitet (cirka 90 DTU) på en enda klientorganisation plus en normal intensitetsbelastning på alla andra klienter

Belastningsgeneratorn tillämpar en syntetisk enbart-CPU-belastning på varje klientdatabas. Generatorn startar ett jobb för varje klientdatabas som anropar en lagrad procedur med jämna mellanrum, vilket genererar belastningen. Belastningsnivåerna (i DTU:er), varaktighet och intervall varierar mellan alla databaser, vilket simulerar oförutsägbar klientaktivitet.

  1. I PowerShell ISE öppnar du ...\Learning Modules\Performance Monitoring and Management\Demo-PerformanceMonitoringAndManagement.ps1. Ha det här skriptet öppet medan du kör scenarierna i den här guiden.
  2. Ange $DemoScenario = 2, Generera normal intensitetsbelastning
  3. Tryck på F5 för att tillämpa en belastning på alla dina klienter.

Wingtip Tickets SaaS Multi-tenant Database är en SaaS-app, och den verkliga belastningen på en SaaS-app är vanligtvis sporadisk och oförutsägbar. För att simulera det så skapar belastningsgeneratorn en slumpmässig belastning som distribueras över alla klienterna. Det krävs flera minuter för att belastningsmönstret ska uppstå, så kör lastgeneratorn i 3–5 minuter innan du försöker övervaka belastningen i följande avsnitt.

Viktigt!

Belastningsgeneratorn körs som en serie jobb i ett nytt PowerShell-fönster. Om du stänger sessionen stoppas belastningsgeneratorn. Belastningsgeneratorn är fortfarande i ett jobbanropstillstånd där den genererar belastning på alla nya klienter som etableras efter att generatorn har startats. Använd Ctrl-C för att sluta anropa nya jobb och avsluta skriptet. Belastningsgeneratorn fortsätter att köras, men bara på befintliga klienter.

Övervaka resursanvändning med hjälp av Azure-portalen

Om du vill övervaka resursanvändningen som beror på belastningen som tillämpas öppnar du portalen till databasen för flera klientorganisationer, tenants1som innehåller klientorganisationen:

  1. Öppna Azure-portalen och bläddra till servern tenants1-mt-<USER>.
  2. Rulla nedåt och leta upp databaser och välj klientorganisationer1. Den här fragmenterade databasen för flera klientorganisationer innehåller alla klienter som skapats hittills.

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

Observera DTU-diagrammet.

Ange prestandaaviseringar för databasen

Ange en avisering för databasen som utlöser >75 % användning enligt följande:

  1. tenants1 Öppna databasen (på tenants1-mt-<USER> servern) i Azure-portalen.

  2. Välj Aviseringsregler och välj sedan + Lägg till avisering:

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

  3. Ange ett namn, exempelvis hög DTU,

  4. Ange följande värden:

    • Mått = DTU-procent
    • Villkor = större än
    • Tröskelvärdet = 75.
    • Period = Under de senaste 30 minuterna
  5. Lägg till en e-postadress i rutan Ytterligare administratörs-e-post och välj OK.

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

Skala upp en upptagen databas

Om belastningsnivån ökar på en databas till den punkt då den maxar databasen och når 100 % DTU-användning påverkas databasprestandan, vilket kan göra frågesvarstiderna långsammare.

På kort sikt bör du överväga att skala upp databasen för att tillhandahålla ytterligare resurser eller ta bort klienter från databasen med flera klientorganisationer (flytta dem från databasen med flera klientorganisationer till en fristående databas).

På längre sikt bör du överväga att optimera frågor eller indexanvändning för att förbättra databasens prestanda. Beroende på programmets känslighet för prestandaproblem är det bästa praxis att skala upp en databas innan den når 100 % DTU-användning. Använd en avisering för att varna dig i förväg.

Du kan simulera en upptagen databas genom att öka belastningen som genereras av generatorn. Gör så att klientorganisationer spricker oftare och längre, vilket ökar belastningen på databasen för flera klientorganisationer utan att ändra kraven för de enskilda klientorganisationen. Det är enkelt att skala upp databasen i portalen eller från PowerShell. Den här övningen använder portalen.

  1. Ange $DemoScenario = 3, Generera belastning med längre och mer frekventa toppar per databas för att öka intensiteten för den aggregerade belastningen på databasen utan att ändra den högsta belastning som krävs av varje klientorganisation.
  2. Tryck på F5 för att tillämpa en belastning på alla dina klientdatabaser.
  3. Gå till tenants1 databasen i Azure-portalen.

Övervaka den ökade databas-DTU-användningen i det övre diagrammet. Det tar några minuter för den nya högre belastningen att starta, men du bör snabbt se att databasen börjar nå maximal användning och när belastningen ökar i det nya mönstret överbelastas databasen snabbt.

  1. Om du vill skala upp databasen väljer du Prisnivå (skala DTU:er) på inställningssidan.
  2. Justera DTU-inställningen till 100.
  3. Välj Använd för att skicka begäran om att skala databasen.

Gå tillbaka till klientorganisationer1>Översikt för att visa övervakningsdiagrammen. Övervaka effekten av att ge databasen fler resurser (men med få klienter och en slumpmässig belastning är det inte alltid lätt att se slutgiltigt förrän du har kört under en viss tid). Medan du tittar på diagrammen bör du tänka på att 100 % i det övre diagrammet nu representerar 100 DTU:er, medan 100 % i det nedre diagrammet fortfarande är 50 DTU:er.

Databaserna är online och fullt tillgängliga under hela processen. Programkoden ska alltid skrivas för att försöka ta bort anslutningar igen, så återansluter till databasen.

Etablera en ny klientorganisation i en egen databas

Med den horisontella modellen för flera klientorganisationer kan du välja om du vill etablera en ny klientorganisation i en databas med flera klientorganisationer tillsammans med andra klienter eller etablera klientorganisationen i en egen databas. Genom att etablera en klientorganisation i en egen databas drar den nytta av isoleringen i den separata databasen, så att du kan hantera klientorganisationens prestanda oberoende av andra, återställa klientorganisationen oberoende av andra osv. Du kan till exempel välja att placera kostnadsfri utvärderingsversion eller vanliga kunder i en databas med flera klientorganisationer och premiumkunder i enskilda databaser. Om isolerade databaser med en klientorganisation skapas kan de fortfarande hanteras kollektivt i en elastisk pool för att optimera resurskostnaderna.

Om du redan har etablerat en ny klientorganisation i en egen databas hoppar du över de närmaste stegen.

  1. Öppna i PowerShell ISE...\Learning Modules\ProvisionTenants\Demo-ProvisionTenants.ps1.
  2. Ändra $TenantName = "Salix Salsa" och $VenueType = "dance".
  3. Ange $Scenario = 2, Etablera en klientorganisation i en ny databas med en enda klientorganisation.
  4. Tryck F5 för att köra skriptet.

Skriptet etablerar den här klientorganisationen i en separat databas, registrerar databasen och klientorganisationen med katalogen och öppnar sedan klientorganisationens sida Händelser i webbläsaren. Uppdatera sidan Events Hub så ser du att "Salix Salsa" har lagts till som en plats.

Kommentar

Det går inte att återställa från databaser med flera klientorganisationer till en enda klientorganisation.

Hantera prestanda för en enskild databas

Om en enskild klientorganisation i en databas med flera klientorganisationer har en ihållande hög belastning kan den tendera att dominera databasresurserna och påverka andra klienter i samma databas. Om aktiviteten sannolikt kommer att fortsätta under en viss tid kan klientorganisationen tillfälligt flyttas från databasen och till en egen databas med en enda klientorganisation. Detta gör det möjligt för klientorganisationen att ha de extra resurser som behövs och isolerar den helt från de andra klienterna.

Den här övningen simulerar effekten av att Salix Salsa upplever en hög belastning när biljetter går till försäljning för ett populärt evenemang.

  1. Öppna skriptet ...\Demo-PerformanceMonitoringAndManagement.ps1 .
  2. Ange $DemoScenario = 5, Generera en normal belastning plus hög belastning på en enskild klientorganisation (cirka 90 DTU).
  3. Ange $SingleTenantName = Salix Salsa.
  4. Kör skriptet med F5.

Gå till Azure-portalen och gå till salixsalsa>Översikt för att visa övervakningsdiagrammen.

Andra mönster för prestandahantering

Självbetjäningsskalning för klientorganisation

Eftersom skalning är en uppgift som enkelt anropas via hanterings-API:et kan du enkelt skapa möjligheten att skala klientdatabaser i ditt klientinriktade program och erbjuda dem som en funktion i SaaS-tjänsten. Exempelvis kan du låta klienter självhantera upp- och nedskalning, kanske kopplat direkt till sin fakturering!

Skala upp och ned en databas enligt ett schema för att matcha användningsmönster

Där aggregerad klientorganisationsanvändning följer förutsägbara användningsmönster kan du använda Azure Automation för att skala upp och ned en databas enligt ett schema. Skala till exempel ned en databas efter 18.00 och uppåt igen före 06.00 på vardagar när du vet att resurskraven sjunker.

Nästa steg

I den här självstudiekursen får du lära du dig att:

  • Simulera användning på en fragmenterad databas med flera klientorganisationer genom att köra en angiven belastningsgenerator
  • Övervaka databasen när den svarar på den ökade belastningen
  • Skala upp databasen som svar på den ökade databasbelastningen
  • Etablera en klientorganisation i en databas med en enda klientorganisation

Ytterligare resurser