Oefening: Een gemigreerde database beveiligen, bewaken en afstemmen
U werkt als databaseontwikkelaar voor de AdventureWorks-organisatie. AdventureWorks verkoopt al meer dan tien jaar fietsen en fietsonderdelen rechtstreeks aan eindgebruikers en distributeurs. Hun systemen slaan gegevens op in een database die u eerder hebt gemigreerd naar Azure Database for PostgreSQL.
Nadat u de migratie hebt uitgevoerd, wilt u controleren of het systeem goed presteert. U besluit de Beschikbare Azure-hulpprogramma's te gebruiken om de server te bewaken. Om de kans op trage reactietijden te verlichten die worden veroorzaakt door conflicten en latentie, besluit u leesreplicatie te implementeren. U moet het resulterende systeem bewaken en de resultaten vergelijken met de flexibele serverarchitectuur.
In deze oefening voert u de volgende taken uit:
- Configureer metrische Gegevens van Azure voor uw Azure Database for PostgreSQL-service.
- Voer een voorbeeldtoepassing uit die meerdere gebruikers simuleert die query's uitvoeren op de database.
- Bekijk de metrische gegevens.
De omgeving instellen
Voer deze Azure CLI-opdrachten uit in Cloud Shell om een Azure-database voor PostgreSQL te maken, met een kopie van de adventureworks-database. Met de laatste opdrachten wordt de servernaam afgedrukt.
SERVERNAME="adventureworks$((10000 + RANDOM % 99999))"
PUBLICIP=$(wget http://ipecho.net/plain -O - -q)
git clone https://github.com/MicrosoftLearning/DP-070-Migrate-Open-Source-Workloads-to-Azure.git workshop
az postgres server create \
--resource-group <rgn>[sandbox resource group name]</rgn> \
--name $SERVERNAME \
--location westus \
--admin-user awadmin \
--admin-password Pa55w.rdDemo \
--version 10 \
--storage-size 5120
az postgres db create \
--name azureadventureworks \
--server-name $SERVERNAME \
--resource-group <rgn>[sandbox resource group name]</rgn>
az postgres server firewall-rule create \
--resource-group <rgn>[sandbox resource group name]</rgn> \
--server $SERVERNAME \
--name AllowMyIP \
--start-ip-address $PUBLICIP --end-ip-address $PUBLICIP
PGPASSWORD=Pa55w.rdDemo psql -h $SERVERNAME.postgres.database.azure.com -U awadmin@$SERVERNAME -d postgres -f workshop/migration_samples/setup/postgresql/adventureworks/create_user.sql
PGPASSWORD=Pa55w.rd psql -h $SERVERNAME.postgres.database.azure.com -U azureuser@$SERVERNAME -d azureadventureworks -f workshop/migration_samples/setup/postgresql/adventureworks/adventureworks.sql 2> /dev/null
echo "Your PostgreSQL server name is:\n"
echo $SERVERNAME.postgres.database.azure.com
Metrische Gegevens van Azure configureren voor uw Azure Database for PostgreSQL-service
Open in een webbrowser een nieuw tabblad en navigeer naar Azure Portal.
Selecteer Alle resources in Azure Portal.
Selecteer de naam van de Azure Database for PostgreSQL-server die begint met adventureworks.
Selecteer Metrische gegevens onder Bewaking.
Voeg op de grafiekpagina de volgende metrische gegevens toe:
Eigenschappen Weergegeven als Bereik adventureworks[nnn] Metrische naamruimte Metrische standaardgegevens van PostgreSQL-server Metric Actieve Verbinding maken ions Statistische functie Avg Met deze metrische waarde wordt het gemiddelde aantal verbindingen weergegeven dat elke minuut met de server is gemaakt.
Selecteer Metrische gegevens toevoegen en voeg de volgende metrische waarde toe:
Eigenschappen Weergegeven als Bereik adventureworks[nnn] Metrische naamruimte Metrische standaardgegevens van PostgreSQL-server Metric CPU-percentage Statistische functie Avg Selecteer Metrische gegevens toevoegen en voeg de volgende metrische waarde toe:
Eigenschappen Weergegeven als Bereik adventureworks[nnn] Metrische naamruimte Metrische standaardgegevens van PostgreSQL-server Metric Geheugenpercentage Statistische functie Avg Selecteer Metrische gegevens toevoegen en voeg de volgende metrische waarde toe:
Eigenschappen Weergegeven als Bereik adventureworks[nnn] Metrische naamruimte Metrische standaardgegevens van PostgreSQL-server Metric IO-percentage Statistische functie Avg Deze laatste drie metrische gegevens laten zien hoe resources worden gebruikt door de testtoepassing.
Stel het tijdsbereik voor de grafiek in op Afgelopen 30 minuten.
Selecteer Vastmaken aan dashboard en selecteer Vervolgens Vastmaken.
Een voorbeeldtoepassing uitvoeren waarmee meerdere gebruikers query's uitvoeren op de database
Selecteer in Azure Portal, op de pagina voor uw Azure Database for PostgreSQL-server, onder Instellingen, Verbinding maken ion Strings. Kopieer de verbindingsreeks voor ADO.NET naar het klembord.
Ga naar de map ~/workshop/migration_samples/code/postgresql/AdventureWorksSoakTest .
cd ~/workshop/migration_samples/code/postgresql/AdventureWorksSoakTest
Open het App.config-bestand met behulp van de code-editor:
code App.config
Vervang de waarde van Database door azureadworks en vervang ConectionString0 door de verbindingsreeks van het klembord. Wijzig de gebruikers-id in azureuser@adventureworks[nnn] en stel het wachtwoord in op Pa55w.rd. Het voltooide bestand moet er ongeveer uitzien als in het onderstaande voorbeeld:
<?xml version="1.0" encoding="utf-8" ?> <configuration> <appSettings> <add key="ConnectionString0" value="Server=adventureworks101.postgres.database.azure.com;Database=azureadventureworks;Port=5432;User Id=azureuser@adventureworks101;Password=Pa55w.rd;Ssl Mode=Require;" /> <add key="ConnectionString1" value="INSERT CONNECTION STRING HERE" /> <add key="ConnectionString2" value="INSERT CONNECTION STRING HERE" /> <add key="NumClients" value="100" /> <add key="NumReplicas" value="1"/> </appSettings> </configuration>
Notitie
Negeer de instellingen Verbinding maken ionString1 en Verbinding maken ionString2 voorlopig. U werkt deze items later in het lab bij.
Sla de wijzigingen op en sluit de editor.
Voer bij de Cloud Shell-prompt de volgende opdracht uit om de app te bouwen en uit te voeren:
dotnet run
Wanneer de app wordt gestart, wordt er een aantal threads weergegeven, waarbij elke thread een gebruiker simuleert. De threads voeren een lus uit en voeren een reeks query's uit. U ziet berichten zoals de berichten die hieronder worden weergegeven:
Client 48 : SELECT * FROM purchasing.vendor Response time: 630 ms Client 48 : SELECT * FROM sales.specialoffer Response time: 702 ms Client 43 : SELECT * FROM purchasing.vendor Response time: 190 ms Client 57 : SELECT * FROM sales.salesorderdetail Client 68 : SELECT * FROM production.vproductanddescription Response time: 51960 ms Client 55 : SELECT * FROM production.vproductanddescription Response time: 160212 ms Client 59 : SELECT * FROM person.person Response time: 186026 ms Response time: 2191 ms Client 37 : SELECT * FROM person.person Response time: 168710 ms
Laat de app actief terwijl u de volgende stappen uitvoert.
De metrische gegevens weergeven
Ga terug naar Azure Portal.
Selecteer Dashboard in het linkerdeelvenster.
U ziet nu de grafiek met de metrische gegevens voor uw Azure Database for PostgreSQL-service.
Selecteer de grafiek om deze te openen in het deelvenster Metrische gegevens .
Sta toe dat de app enkele minuten kan worden uitgevoerd (hoe langer des te beter). Wanneer de tijd is verstreken, moeten de metrische gegevens in de grafiek lijken op het patroon dat wordt geïllustreerd in de volgende afbeelding:
In deze grafiek worden de volgende punten gemarkeerd:
- De CPU wordt uitgevoerd op volledige capaciteit; het gebruik bereikt 100% zeer snel.
- Het aantal verbindingen neemt langzaam toe. De voorbeeldtoepassing is ontworpen om 101 clients snel achter elkaar te starten, maar de server kan slechts enkele verbindingen tegelijk openen. Het aantal verbindingen dat bij elke stap in de grafiek wordt toegevoegd, wordt kleiner en de tijd tussen 'stappen' neemt toe. Na ongeveer 45 minuten kon het systeem slechts 70 clientverbindingen tot stand brengen.
- Het geheugengebruik neemt in de loop van de tijd consistent toe.
- I/O-gebruik ligt dicht bij nul. Alle gegevens die door de clienttoepassingen zijn vereist, worden momenteel in de cache opgeslagen in het geheugen.
Als u de toepassing lang genoeg laat werken, ziet u dat verbindingen mislukken, met de foutberichten die worden weergegeven in de volgende afbeelding.
Druk in Cloud Shell op Enter om de toepassing te stoppen.
De server configureren voor het verzamelen van queryprestatiesgegevens
Selecteer serverparameters in Azure Portal op de pagina voor uw Azure Database for PostgreSQL-server, onder Instellingen.
Stel op de pagina Serverparameters de volgende parameters in op de waarden die zijn opgegeven in de onderstaande tabel.
Parameter Weergegeven als pg_qs.max_query_text_length 6000 pg_qs.query_capture_mode ALL pg_qs.replace_parameter_placeholders OP pg_qs.retention_period_in_days 7 pg_qs.track_utility OP pg_stat_statements.track ALL pgms_wait_sampling.history_period 100 pgms_wait_sampling.query_capture_mode ALL Selecteer Opslaan.
De query's onderzoeken die door de toepassing worden uitgevoerd met Behulp van Query Store
Ga terug naar Cloud Shell en start de voorbeeld-app opnieuw:
dotnet run
Laat de app 5 minuten of zo worden uitgevoerd voordat u doorgaat.
Laat de app actief en schakel over naar Azure Portal
Selecteer op de pagina voor uw Azure Database for PostgreSQL-server, onder Intelligente prestaties, Query Performance Insight.
Stel op de pagina Query Performance Insight op het tabblad Langlopende query's het aantal query's in op 10, stel Geselecteerd op gemiddelde in en stel de periode in op Afgelopen 6 uur.
Selecteer boven de grafiek inzoomen (het vergrootglaspictogram met het +-teken) om in te zoomen op de meest recente gegevens.
Afhankelijk van hoe lang u de toepassing hebt laten uitvoeren, ziet u een grafiek die vergelijkbaar is met de grafiek die hieronder wordt weergegeven. Query Store voegt de statistieken voor query's elke 15 minuten samen, dus elke balk toont de relatieve tijd die wordt verbruikt door elke query in elke periode van 15 minuten:
Beweeg de muisaanwijzer over elke balk om de statistieken voor de query's in die periode weer te geven. De drie query's die door het systeem worden uitgevoerd, zijn:
SELECT * FROM sales.salesorderdetail SELECT * FROM sales.salesorderheader SELECT * FROM person.person
Deze informatie is handig voor een beheerder die een systeem bewaakt. Als u inzicht hebt in de query's die worden uitgevoerd door gebruikers en apps, kunt u inzicht krijgen in de workloads die worden uitgevoerd en kunt u mogelijk aanbevelingen doen aan toepassingsontwikkelaars over hoe ze hun code kunnen verbeteren. Is het bijvoorbeeld echt nodig dat een toepassing alle 121.000 rijen uit de tabel sales.salesorderdetail ophaalt?
Bekijk eventuele wachttijden die optreden met Behulp van Query Store
Selecteer het tabblad Wachtstatistieken .
Stel de periode in op Afgelopen 6 uur, stel Groeperen op in op Gebeurtenis en stel het maximum aantal groepen in op 5.
Net als bij het tabblad Langlopende query's worden de gegevens elke 15 minuten samengevoegd. In de onderstaande tabel ziet u dat het systeem het onderwerp is geweest van twee soorten wachtgebeurtenis:
- Client: ClientWrite. Deze wacht gebeurtenis treedt op wanneer de server gegevens (resultaten) terug schrijft naar de client. Het geeft geen wachttijden aan die zijn gemaakt tijdens het schrijven naar de database.
- Client: ClientRead. Deze wacht gebeurtenis treedt op wanneer de server wacht op het lezen van gegevens (queryaanvragen of andere opdrachten) van een client. Het is niet gekoppeld aan de tijd die is besteed aan het lezen van de database.
Notitie
Lees- en schrijfbewerkingen naar de database worden aangegeven door IO-gebeurtenissen in plaats van client-gebeurtenissen . Voor de voorbeeldtoepassing worden geen IO-wachttijden uitgevoerd omdat alle gegevens die nodig zijn, in de cache worden opgeslagen in het geheugen na de eerste leesbewerking. Als uit de metrische gegevens blijkt dat het geheugen laag was, ziet u waarschijnlijk dat er IO-wachtgebeurtenissen optreden.
Ga terug naar Cloud Shell en druk op Enter om de voorbeeldtoepassing te stoppen.
Replica's toevoegen aan de Azure Database for PostgreSQL-service
Selecteer Replicatie in Azure Portal op de pagina voor uw Azure Database for PostgreSQL-server, onder Instellingen.
Selecteer + Replica toevoegen op de pagina Replicatie.
Typ op de pagina PostgreSQL-server in het vak Servernaam adventureworks[nnn]-replica1 en selecteer VERVOLGENS OK.
Wanneer de eerste replica is gemaakt (dit duurt enkele minuten), herhaalt u de vorige stap en voegt u een andere replica toe met de naam adventureworks[nnn]-replica2.
Wacht totdat de status van beide replica's verandert van Implementeren naar Beschikbaar voordat u doorgaat.
De replica's configureren om clienttoegang in te schakelen
- Selecteer de naam van de replica adventureworks[nnn]-replica1 . U gaat naar de pagina voor de azure Database for PostgreSQL-pagina voor deze replica.
- Selecteer Verbinding maken ion-beveiliging onder Instellingen.
- Stel op de pagina Verbinding maken ionbeveiliging toegang tot Azure-services toestaan in op AAN en selecteer Opslaan. Met deze instelling kunnen toepassingen die u uitvoert met behulp van Cloud Shell toegang krijgen tot de server.
- Wanneer de instelling is opgeslagen, herhaalt u de vorige stappen en geeft u Azure-services toegang tot de replica adventureworks[nnn]-replica2 .
Elke server opnieuw opstarten
Notitie
Voor het configureren van replicatie hoeft u geen server opnieuw op te starten. Het doel van deze taak is om geheugen en eventuele overbodige verbindingen van elke server te wissen, zodat de metrische gegevens die worden verzameld bij het opnieuw uitvoeren van de toepassing schoon zijn.
- Ga naar de pagina voor de adventureworks[nnn] -server.
- Selecteer Opnieuw opstarten op de pagina Overzicht.
- Selecteer Ja in het dialoogvenster Server opnieuw opstarten.
- Wacht tot de server opnieuw is opgestart voordat u doorgaat.
- Start volgens dezelfde procedure de servers adventureworks[nnn]-replica1 en adventureworks[nnn]-replica2 opnieuw.
De voorbeeldtoepassing opnieuw configureren voor het gebruik van de replica's
Bewerk in Cloud Shell het App.config-bestand.
code App.config
Voeg de verbindingsreeksen toe voor de instellingen Verbinding maken ionString1 en Verbinding maken ionString2. Deze waarden moeten hetzelfde zijn als die van Verbinding maken ionString0, maar door de tekst adventureworks[nnn] vervangen door adventureworks[nnn]-replica1 en adventureworks[nnn]-replica2 in de elementen Server en Gebruikers-id.
Stel de instelling NumReplicas in op 3.
Het bestand App.config moet er nu ongeveer als volgt uitzien:
<configuration> <appSettings> <add key="ConnectionString0" value="Server=adventureworks101.postgres.database.azure.com;Database=azureadventureworks;Port=5432;User Id=azureuser@adventureworks101;Password=Pa55w.rd;Ssl Mode=Require;" /> <add key="ConnectionString1" value="Server=adventureworks101-replica1.postgres.database.azure.com;Database=azureadventureworks;Port=5432;User Id=azureuser@adventureworks101-replica1;Password=Pa55w.rd;Ssl Mode=Require;" /> <add key="ConnectionString2" value="Server=adventureworks101-replica2.postgres.database.azure.com;Database=azureadventureworks;Port=5432;User Id=azureuser@adventureworks101-replica2;Password=Pa55w.rd;Ssl Mode=Require;" /> <add key="NumClients" value="100" /> <add key="NumReplicas" value="3"/> </appSettings> </configuration>
Sla het bestand op en sluit de editor.
Start de app opnieuw:
dotnet run
De toepassing wordt uitgevoerd zoals voorheen. Deze keer worden de aanvragen echter verdeeld over de drie servers.
Sta toe dat de app enkele minuten kan worden uitgevoerd voordat u doorgaat.
De app bewaken en de verschillen in de metrische prestatiegegevens bekijken
Laat de app actief en ga terug naar Azure Portal.
Selecteer Dashboard in het linkerdeelvenster.
Selecteer de grafiek om deze te openen in het deelvenster Metrische gegevens .
Houd er rekening mee dat in deze grafiek de metrische gegevens worden weergegeven voor de adventureworks*[nnn]*-server, maar niet voor de replica's. De belasting voor elke replica moet veel hetzelfde zijn.
In de voorbeeldgrafiek ziet u de metrische gegevens die zijn verzameld voor de toepassing gedurende een periode van 30 minuten, vanaf het opstarten. In de grafiek ziet u dat het CPU-gebruik nog steeds hoog was, maar dat het geheugengebruik lager was. Bovendien had het systeem na ongeveer 25 minuten verbindingen tot stand gebracht voor meer dan 30 verbindingen. Dit lijkt misschien geen gunstige vergelijking met de vorige configuratie, die 70 verbindingen na 45 minuten ondersteunde. De workload was nu echter verdeeld over drie servers, die allemaal op hetzelfde niveau werden uitgevoerd, en alle 101 verbindingen waren tot stand gebracht. Bovendien kon het systeem actief blijven zonder dat er verbindingsfouten zijn gerapporteerd.
U kunt het probleem van CPU-gebruik oplossen door omhoog te schalen naar een hogere prijscategorie met meer CPU-kernen. Het voorbeeldsysteem dat in dit lab wordt gebruikt, wordt uitgevoerd met behulp van de Basic-prijscategorie met 2 kerngeheugens. Als u overgaat naar de prijscategorie Algemeen gebruik , krijgt u maximaal 64 kernen.
Ga terug naar Cloud Shell en druk op Enter om de app te stoppen.
U hebt nu gezien hoe u serveractiviteiten kunt bewaken met behulp van de hulpprogramma's die beschikbaar zijn in Azure Portal. U hebt ook geleerd hoe u replicatie configureert en hebt gezien hoe het maken van alleen-lezen replica's de workload kan distribueren in leesintensieve gegevensscenario's.