Dela via


Övervaka och hantera prestanda för Azure SQL Database 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 i alla klientdatabaser demonstreras de inbyggda funktionerna för övervakning och avisering i SQL Database och elastiska pooler.

Appen Wingtip Tickets SaaS Database Per Tenant använder en datamodell för en enda klientorganisation, där varje plats (klientorganisation) har en egen databas. 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 distribueras klientdatabaser till elastiska pooler. Elastiska pooler optimerar kostnaderna för en lösning genom att dela resurser över flera databaser. Med den här typen av mönster är det viktigt att övervaka användningen av databas- och poolresurser för att försäkra att belastningarna balanseras över poolerna. Du behöver också se till att enskilda databaser har tillräckliga resurser och att pooler inte träffar sina eDTU-gränser. Den här guiden går igenom sätt att övervaka och hantera databaser och pooler och hur man vidtar åtgärder i respons på belastningsvariationer.

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

  • Simulerar användning på klientdatabaserna genom att köra en angiven belastningsgenerator
  • Övervakar klientdatabaserna när de svarar på belastningsökningar
  • Skalar upp den elastiska poolen i svar på den ökade databasbelastningen
  • Etablerar en andra elastisk pool för att belastningsutjämna databasaktiviteten

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. När du är värd för flera klientorganisationer är elastiska pooler ett kostnadseffektivt sätt att tillhandahålla och hantera resurser för en grupp databaser med oförutsägbara arbetsbelastningar. Med vissa arbetsbelastningmönster, kan så få som två S3-databaser dra nytta av att hanteras i en pool.

application diagram

Pooler och databaser i pooler bör övervakas för att säkerställa att de håller sig inom godkända prestandaintervall. Justera poolkonfigurationen så att den uppfyller behoven för den aggregerade arbetsbelastningen för alla databaser, vilket säkerställer att poolens eDTU:er är lämpliga för den övergripande arbetsbelastningen. Justera per databas min och max eDTU-värden till lämpliga värden för dina specifika programkrav.

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 eller pooler avviker från normala intervall.
  • För att svara på kortsiktiga variationer i den sammanlagda beräkningsstorleken för en pool kan poolens eDTU-nivå skalas upp eller ned. Om de här variationerna inträffar på regelbunden eller förutsägbar basis, kan skalning av poolen schemaläggas att ske 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 förändringar av antalet databaser, kan enskilda databaser flyttas till andra pooler.
  • För att svara på kortsiktiga ökningar i enskilda databasinläsningar kan enskilda databaser tas bort från en pool och tilldelas en enskild beräkningsstorlek. När belastningen minskar, kan databasen returneras till poolen. När detta är känt i förväg kan databaser 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 databaser i poolen. 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. Övervakning och aviseringar är tillgängliga i databaser och pooler. 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 särskilt 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 Wingtip Tickets SaaS Database Per Tenant-programskript

Wingtip Tickets SaaS Multi-tenant Database-skript och programkällkod är tillgängliga i WingtipTicketsSaaS-DbPerTenant 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

Pooler kan vara kostnadseffektiva med bara två S3 databaser, men ju fler databaser som finns i poolen, desto mer kostnadseffektiv blir genomsnittseffekten. 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 kursen du har distribuerat minst 20 databaser.

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 på mindre än fem minuter.

Skriptet New-TenantBatch använder en kapslad eller länkad uppsättning Resource Manager-mallar som skapar en batch med klienter, som som standard kopierar databasbastenantdbpå katalogservern för att skapa de nya klientdatabaserna, registrerar dem sedan i katalogen och initierar dem slutligen med klientorganisationens namn och platstyp. Detta överensstämmer med hur appen etablerar en ny klientorganisation. Ändringar som görs i basetenantdb tillämpas på alla nya klienter som etableras därefter. Se självstudien Schemahantering för att se hur du gör schemaändringar i befintliga klientdatabaser (inklusive basetenantdb-databasen).

Simulera användning på alla klientdatabaser

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

Demonstration Scenario
2 Generera normal intensitetsbelastning (cirka 40 DTU)
3 Generera belastning med längre och mer frekventa toppar per databas
4 Generera belastning med högre DTU-bursts per databas (cirka 80 DTU)
5 Generera en normal belastning plus hög belastning på en enskild klientorganisation (cirka 95 DTU)
6 Generera obalanserad belastning över flera pooler

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åer (i eDTU:er), varaktighet och intervaller varierar över 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 klientdatabaser.

Wingtip Tickets SaaS Database Per Tenant ä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 din lokala PowerShell-session. Behåll fliken Demo-PerformanceMonitoringAndManagement.ps1 öppen! Om du stänger fliken eller pausar din dator, stannar 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 öppnar du portalen till poolen som innehåller klientdatabaserna:

  1. Öppna Azure-portalen och bläddra till servern tenants1-dpt-USER<>.
  2. Bläddra ned och hitta elastiska pooler och klicka på Pool1. Den här poolen innehåller alla klientdatabaser som skapats än så länge.

Observera de elastiska poolövervaknings - och elastiska databasövervakningsdiagrammen .

Poolens resursanvändning är den aggregerade databasanvändningen för alla databaser i poolen. Databasdiagrammet visar de fem hetaste databaserna:

database chart

Eftersom det finns ytterligare databaser i poolen utöver de fem främsta visar poolanvändningen aktivitet som inte återspeglas i de fem översta databasdiagrammet. Om du vill ha mer information klickar du på Databasresursanvändning:

database resource utilization

Ställ in prestandaaviseringar för poolen

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

  1. Öppna Pool1 (på servern tenants1-dpt-user><) i Azure-portalen.

  2. Klicka på aviseringsregler och därefter på + lägg till avisering:

    add alert

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

  4. Ange följande värden:

    • Mått = eDTU procent
    • Villkor = större än
    • Tröskelvärde = 75
    • Period = Under de senaste 30 minuterna
  5. Lägg till en e-postadress i rutan Ytterligare e-post för administratör och klicka på OK.

    set alert

Skala upp en upptagen pool

Om den sammanställda belastningsnivån ökar på en pool till den punkt där poolen maxas ut och den når 100% eDTU-användning så påverkas individuell databasprestanda, vilket kan sakta ner frågesvarstiderna för alla databaser i poolen.

På kort sikt bör du överväga att skala upp poolen för att tillhandahålla ytterligare resurser eller ta bort databaser från poolen (flytta dem till andra pooler eller från poolen till en fristående tjänstnivå).

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 praxis att skala upp en pool innan den når 100% eDTU-användning. Använd en avisering för att varna dig i förväg.

Du kan simulera en upptagen pool genom att öka belastningen som generatorn skapar. Gör att databaserna spricker oftare och under längre tid ökar den aggregerade belastningen på poolen utan att ändra kraven för de enskilda databaserna. Det är enkelt att skala upp poolen i portalen eller från PowerShell. Den här övningen använder portalen.

  1. Ställ in $DemoScenario = 3, generera belastning med längre och mer frekventa toppar per databas för att öka intensiteten av den sammanställda belastningen på poolen utan att ändra toppbelastningen som krävs av varje databas.

  2. Tryck på F5 för att tillämpa en belastning på alla dina klientdatabaser.

  3. Gå till Pool1 i Azure-portalen.

Övervaka den ökade eDTU-användningen för poolen 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 poolen börjar nå maximal användning, och när belastningen ökar i det nya mönstret överbelastas poolen snabbt.

  1. Om du vill skala upp poolen klickar du på Konfigurera pool överst på sidan Pool1 .
  2. Justera inställningen Pool eDTU till 100. Ändringar av pool-eDTU:er, ändrar inte inställningarna per databas (som fortfarande är 50 eDTU max per databas). Du kan se inställningarna per databas till höger på sidan Konfigurera pool .
  3. Klicka på Spara för att skicka begäran om att skala poolen.

Gå tillbaka till Pool1>Översikt för att visa övervakningsdiagrammen. Övervaka effekten av att tillhandahålla poolen med fler resurser (men med få databaser 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). När du tittar på diagrammen, tänk på att 100% i det övre diagrammet nu representerar 100 eDTU:er, medan 100% i det lägre diagrammet fortfarande är 50 eDTU:er eftersom max per databas fortfarande är 50 eDTU:er.

Databaserna är online och fullt tillgängliga under hela processen. Under det sista ögonblicket när varje databas är redo att aktiveras med de nya pool-eDTU:erna, bryts alla aktiva anslutningar. Du ska alltid skriva programkod för att återförsöka brutna anslutningar, vilken då kommer att återansluta till databasen i den uppskalade poolen.

Belastningsutjämning mellan pooler

Som ett alternativ till att skala upp poolen, kan du skapa en andra pool och flytta databaserna till den för att balansera belastningen mellan de två poolerna. Det gör du genom att skapa den nya poolen på samma server som den första.

  1. Öppna servern tenants1-dpt-USER> i Azure-portalen<.

  2. Klicka på + Ny pool för att skapa en pool på den aktuella servern.

  3. I mallen Elastisk pool :

    1. Ange Namn till Pool2.

    2. Lämna prisnivån som standardpool.

    3. Klicka på konfigurera poolen,

    4. Ange Pool eDTU till 50 eDTU.

    5. Klicka på Lägg till databaser om du vill se en lista över databaser på servern som kan läggas till i Pool2.

    6. Välj 10 databaser för att flytta dem till den nya poolen och klicka sedan på Välj. Om du har kört lastgeneratorn vet tjänsten redan att din prestandaprofil kräver en större pool än standardstorleken på 50 eDTU och rekommenderar att du börjar med en 100 eDTU-inställning.

      recommendation

    7. I den här självstudien lämnar du standardvärdet på 50 eDTU:er och klickar på Välj igen.

    8. Välj OK för att skapa den nya poolen och flytta de valda databaserna till den.

Det tar några minuter att skapa poolen och flytta databaserna. När databaser flyttas förblir de online och fullt tillgängliga fram till sista stund, då alla öppna anslutningar stängs. Så länge du har viss logik för återförsök ansluter klienterna sedan till databasen i den nya poolen.

Bläddra till Pool2 (på servern tenants1-dpt-user><) för att öppna poolen och övervaka dess prestanda. Om du inte ser den väntar du på att etableringen av den nya poolen ska slutföras.

Nu ser du att resursanvändningen på Pool1 har minskat och att Pool2 nu läses in på liknande sätt.

Hantera prestanda för en enskild databas

Om en enskild databas i en pool har en ihållande hög belastning, beroende på poolkonfigurationen, kan den tendera att dominera resurserna i poolen och påverka andra databaser. Om aktiviteten sannolikt kommer att fortsätta under en tid kan databasen tillfälligt flyttas från poolen. På så sätt kan databasen ha de extra resurser den behöver och isolera den från de andra databaserna.

Den här övningen simulerar effekten av att Contosos konserthall upplever en hög belastning när biljetter börjar säljas för ett populärt evenemang.

  1. Öppna skriptet ...\Demo-PerformanceMonitoringAndManagement.ps1 i PowerShell ISE.

  2. Ange $DemoScenario = 5, Generera en normal belastning plus en hög belastning på en enskild klientorganisation (cirka 95 DTU).

  3. Ställ in $SingleTenantDatabaseName = contosoconcerthall

  4. Kör skriptet med F5.

  5. I Azure-portalen bläddrar du till listan över databaser på servern tenants1-dpt-user><.

  6. Klicka på contosoconcerthall-databasen .

  7. Klicka på poolen som contosoconcerthall finns i. Leta upp poolen i avsnittet Elastisk pool .

  8. Granska övervakningsdiagrammet för elastisk pool och leta efter den ökade eDTU-användningen för poolen. Efter någon minut sätter den högre belastningen in och du borde snabbt se att poolen når 100% användning.

  9. Granska övervakningsvisningen för elastisk databas, som visar de hetaste databaserna under den senaste timmen. Contosoconcerthall-databasen bör snart visas som en av de fem hetaste databaserna.

  10. Klicka på diagrammet Elastisk databasövervakningså öppnas sidan Databasresursanvändning där du kan övervaka någon av databaserna. På så sätt kan du isolera visningen för contosoconcerthall-databasen .

  11. I listan över databaser klickar du på contosoconcerthall.

  12. Klicka på Prisnivå (skalnings-DTU:er) för att öppna sidan Konfigurera prestanda där du kan ange en fristående beräkningsstorlek för databasen.

  13. Klicka på Standard-fliken för att öppna skalningsalternativen på standardnivån.

  14. Dra DTU-skjutreglaget till höger för att välja 100 DTU:er. Observera att detta motsvarar tjänstmålet S3.

  15. Klicka på Använd för att flytta databasen från poolen och göra den till en Standard S3-databas .

  16. När skalningen är klar övervakar du effekten på contosoconcerthall-databasen och Pool1 på den elastiska poolen och databasbladen.

När den höga belastningen på contosoconcerthall-databasen har minskat bör du omedelbart returnera den till poolen för att minska kostnaden. Om det är oklart när detta inträffar kan du ange en avisering för databasen som utlöses när DTU-användningen sjunker under maxgränsen per databas i poolen. Övrning 5 beskriver hur du flyttar en databas till en pool.

Andra mönster för prestandahantering

Förebyggande skalning I övningen ovan där du utforskade hur du skalar en isolerad databas visste du vilken databas du skulle leta efter. Om ledningen för Contoso Concert Hall hade informerat Wingtips om den förestående biljettförsäljningen kunde databasen ha flyttats ut ur poolen i förebyggande syfte. Annars hade det sannolikt behövts en avisering på poolen eller databasen för att upptäcka vad som hände. Du vill inte lära dig mer om detta från de andra klienterna i poolen som klagar på försämrad prestanda. Och om klienten kan förutse hur länge de behöver ytterligare resurser, kan du ställa in en Azure Automation-runbook för att flytta ut databasen från poolen och sedan tillbaka igen enligt ett definierat schema.

Klientskalning som självservice eftersom skalning är en aktivitet som enkelt kan anropas via hanterings-API:t, kan du enkelt bygga in möjligheten att skala klientdatabaser i ditt klientriktade program och erbjuda de som en funktion av din SaaS-tjänst. Exempelvis kan du låta klienter självhantera upp- och nedskalning, kanske kopplat direkt till sin fakturering!

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

I de fall där sammanställd klientanvändning följer förutsägbara mönster, kan du använda Azure Automation för att skala upp en pool efter ett schema. Skala exempelvis ned en pool efter 18.00 och upp igen innan 06.00 på veckodagar, när du vet att kraven på resursanvändning går ned.

Nästa steg

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

  • Simulerar användning på klientdatabaserna genom att köra en angiven belastningsgenerator
  • Övervakar klientdatabaserna när de svarar på belastningsökningar
  • Skalar upp den elastiska poolen i svar på den ökade databasbelastningen
  • Etablerar en andra elastisk pool för att belastningsutjämna databasaktiviteten

Guiden återställ en enskild klient

Ytterligare resurser