Cvičení: Ochrana, monitorování a ladění migrované databáze
Pracujete jako vývojář databáze pro organizaci AdventureWorks. AdventureWorks prodává jízdní kola a jízdní díly přímo koncovým spotřebitelům a distributorům po dobu více než deset let. Jejich systémy ukládají informace do databáze, kterou jste dříve migrovali do Služby Azure Database for PostgreSQL.
Po provedení migrace chcete zajistit, že systém funguje dobře. Rozhodnete se použít nástroje Azure, které jsou k dispozici pro monitorování serveru. Pokud chcete zmírnit možnost pomalé doby odezvy způsobené kolizemi a latencí, rozhodnete se implementovat replikaci pro čtení. Potřebujete monitorovat výsledný systém a porovnat výsledky s architekturou flexibilního serveru.
V tomto cvičení provedete následující úlohy:
- Nakonfigurujte metriky Azure pro službu Azure Database for PostgreSQL.
- Spusťte ukázkovou aplikaci, která simuluje více uživatelů dotazující se na databázi.
- Prohlédněte si metriky.
Nastavení prostředí
Spuštěním těchto příkazů Azure CLI v Cloud Shellu vytvořte databázi Azure database for PostgreSQL s kopií databáze adventureworks. Poslední příkazy vytisknou název serveru.
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
Konfigurace metrik Azure pro službu Azure Database for PostgreSQL
Ve webovém prohlížeči otevřete novou kartu a přejděte na web Azure Portal.
Na webu Azure Portal vyberte Všechny prostředky.
Vyberte název serveru Azure Database for PostgreSQL počínaje adventureworks.
V oblasti Monitorování vyberte Metriky.
Na stránce grafu přidejte následující metriku:
Vlastnost Hodnota Obor adventureworks[nnn] Obor názvů metriky Standardní metriky serveru PostgreSQL Metrika Aktivní Připojení iony Agregace Průměrná Tato metrika zobrazuje průměrný počet připojení provedených k serveru každou minutu.
Vyberte Přidat metriku a přidejte následující metriku:
Vlastnost Hodnota Obor adventureworks[nnn] Obor názvů metriky Standardní metriky serveru PostgreSQL Metrika Procento procesoru Agregace Průměrná Vyberte Přidat metriku a přidejte následující metriku:
Vlastnost Hodnota Obor adventureworks[nnn] Obor názvů metriky Standardní metriky serveru PostgreSQL Metrika Procento paměti Agregace Průměrná Vyberte Přidat metriku a přidejte následující metriku:
Vlastnost Hodnota Obor adventureworks[nnn] Obor názvů metriky Standardní metriky serveru PostgreSQL Metrika Procento vstupně-výstupních operací Agregace Průměrná Tyto poslední tři metriky ukazují, jak testovací aplikace spotřebovává prostředky.
Nastavte časový rozsah grafu na Posledních 30 minut.
Vyberte Připnout na řídicí panel a pak vyberte Připnout.
Spuštění ukázkové aplikace, která simuluje více uživatelů dotazující se na databázi
Na webu Azure Portal na stránce vašeho serveru Azure Database for PostgreSQL v části Nastavení vyberte Připojení ionOvé řetězce. Zkopírujte do schránky připojovací řetězec pro ADO.NET.
Přejděte do složky ~/workshop/migration_samples/code/postgresql/AdventureWorksSoakTest .
cd ~/workshop/migration_samples/code/postgresql/AdventureWorksSoakTest
Otevřete soubor App.config pomocí editoru kódu:
code App.config
Nahraďte hodnotu Database azureadventureworks a nahraďte ConectionString0 připojovací řetězec ze schránky. Změňte ID uživatele na azureuser@adventureworks[nnn] a nastavte heslo na Pa55w.rd. Dokončený soubor by měl vypadat podobně jako v následujícím příkladu:
<?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>
Poznámka:
Prozatím ignorujte nastavení Připojení ionString1 a Připojení ionString2. Tyto položky budete aktualizovat později v testovacím prostředí.
Uložte změny a zavřete editor.
Na příkazovém řádku Cloud Shellu spusťte následující příkaz, který sestaví a spustí aplikaci:
dotnet run
Když se aplikace spustí, vytvoří několik vláken, přičemž každé vlákno simuluje uživatele. Vlákna provádějí smyčku se spuštěnou řadou dotazů. Zobrazí se například zprávy, které se zobrazují níže:
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
Během provádění dalších kroků nechte aplikaci spuštěnou.
Zobrazení metrik
Vraťte se na Azure Portal.
V levém podokně vyberte Řídicí panel.
Měl by se zobrazit graf zobrazující metriky pro vaši službu Azure Database for PostgreSQL.
Výběrem grafu ho otevřete v podokně Metriky .
Nechte aplikaci běžet několik minut (čím déle je to lepší). Po uplynutí času by se metriky v grafu měly podobat vzoru znázorněnému na následujícím obrázku:
Tento graf zvýrazňuje následující body:
- Procesor běží v plné kapacitě; Využití dosahuje velmi rychle 100 %.
- Pomalu roste počet připojení. Ukázková aplikace je navržená tak, aby spustila 101 klientů v rychlém sledu, ale server se může vypořádat pouze s otevřením několika připojení najednou. Počet připojení přidaných v jednotlivých "krocích" v grafu se zmenšuje a čas mezi "kroky" se zvyšuje. Po přibližně 45 minutách byl systém schopný navázat pouze 70 klientských připojení.
- Využití paměti se v průběhu času konzistentně zvyšuje.
- Využití vstupně-výstupních operací se blíží nule. Všechna data požadovaná klientskými aplikacemi jsou aktuálně uložená v mezipaměti.
Pokud aplikaci necháte dostatečně dlouhou, zobrazí se připojení, která začínají selhávat, s chybovými zprávami zobrazenými na následujícím obrázku.
V Cloud Shellu stisknutím klávesy Enter aplikaci zastavte.
Konfigurace serveru pro shromažďování dat o výkonu dotazů
Na webu Azure Portal na stránce vašeho serveru Azure Database for PostgreSQL v části Nastavení vyberte Parametry serveru.
Na stránce Parametry serveru nastavte následující parametry na hodnoty uvedené v následující tabulce.
Parametr Hodnota pg_qs.max_query_text_length 6000 pg_qs.query_capture_mode ALL pg_qs.replace_parameter_placeholders NA pg_qs.retention_period_in_days 7 pg_qs.track_utility NA pg_stat_statements.track ALL pgms_wait_sampling.history_period 100 pgms_wait_sampling.query_capture_mode ALL Zvolte Uložit.
Prozkoumání dotazů spuštěných aplikací pomocí úložiště dotazů
Vraťte se do Cloud Shellu a restartujte ukázkovou aplikaci:
dotnet run
Než budete pokračovat, nechte aplikaci běžet po dobu 5 minut nebo tak.
Nechte aplikaci spuštěnou a přepněte na web Azure Portal.
Na stránce vašeho serveru Azure Database for PostgreSQL v části Inteligentní výkon vyberte Query Performance Insight.
Na stránce Query Performance Insight na kartě Dlouhotrvající dotazy nastavte počet dotazů na hodnotu 10, nastavte hodnotu Vybráno na průměr a nastavte časové období na posledních 6 hodin.
Nad grafem vyberte Lupa (ikona lupy se znaménkem +) několikrát, abyste se vrátili k nejnovějším datům.
V závislosti na tom, jak dlouho necháte aplikaci běžet, uvidíte graf podobný následujícímu grafu. Úložiště dotazů agreguje statistiky pro dotazy každých 15 minut, takže každý pruh zobrazuje relativní čas spotřebovaný jednotlivými dotazy v každém 15minutovém období:
Najeďte myší na jednotlivé pruhy a zobrazte statistiky pro dotazy v daném časovém období. Tři dotazy, které systém tráví většinu času prováděním, jsou:
SELECT * FROM sales.salesorderdetail SELECT * FROM sales.salesorderheader SELECT * FROM person.person
Tyto informace jsou užitečné pro správce, který monitoruje systém. Díky přehledu o dotazech, které uživatelé a aplikace provozují, můžete porozumět úlohám, které provádějí, a případně poskytnout vývojářům aplikací doporučení, jak mohou zlepšit svůj kód. Je třeba, aby aplikace načetla všech 121 000+ řádků z tabulky sales.salesorderdetail ?
Prozkoumání všech čekání, ke kterým dochází, pomocí úložiště dotazů
Vyberte kartu Statistika čekání.
Nastavte časové období na posledních 6 hodin, nastavte seskupit podle na Událost a nastavte maximální počet skupin na 5.
Stejně jako na kartě Dlouhotrvající dotazy se data agregují každých 15 minut. Tabulka pod grafem ukazuje, že systém byl předmětem dvou typů událostí čekání:
- Klient: ClientWrite. K této události čekání dochází, když server zapisuje data (výsledky) zpět do klienta. Nezoznačuje čekání vzniklé při zápisu do databáze.
- Klient: ClientRead. K této události čekání dochází v případě, že server čeká na čtení dat (dotazování požadavků nebo jiných příkazů) z klienta. Není spojený s časem stráveným čtením z databáze.
Poznámka:
Čtení a zápisy do databáze jsou označené vstupně-výstupními událostmi místo událostí klienta. Ukázková aplikace nečeká žádné vstupně-výstupní operace, protože všechna data, která vyžaduje, jsou uložená v mezipaměti po prvním čtení. Pokud metriky ukázaly, že paměť je nízká, pravděpodobně se začnou objevovat události čekání vstupně-výstupních operací.
Vraťte se do Cloud Shellu a stisknutím klávesy Enter zastavte ukázkovou aplikaci.
Přidání replik do služby Azure Database for PostgreSQL
Na webu Azure Portal na stránce vašeho serveru Azure Database for PostgreSQL v části Nastavení vyberte Replikace.
Na stránce Replikace vyberte + Přidat repliku.
Na stránce serveru PostgreSQL zadejte do pole Název serveru adventureworks[nnn]-replica1 a pak vyberte OK.
Po vytvoření první repliky (bude trvat několik minut), zopakujte předchozí krok a přidejte další repliku s názvem adventureworks[nnn]-replica2.
Než budete pokračovat, počkejte, až se stav obou replik změní z nasazení do dostupné .
Konfigurace replik pro povolení klientského přístupu
- Vyberte název repliky adventureworks[nnn]-replica1 . Přejdete na stránku pro stránku Azure Database for PostgreSQL pro tuto repliku.
- V části Nastavení vyberte zabezpečení Připojení.
- Na stránce zabezpečení Připojení ion nastavte Možnost Povolit přístup ke službám Azure na ZAPNUTO a pak vyberte Uložit. Toto nastavení umožňuje aplikacím, které spouštíte pomocí Cloud Shellu, přístup k serveru.
- Po uložení nastavení opakujte předchozí kroky a povolte službám Azure přístup k replikě adventureworks[nnn]-replica2 .
Restartujte každý server.
Poznámka:
Konfigurace replikace nevyžaduje restartování serveru. Účelem této úlohy je vymazat paměť a všechna nadbytečná připojení z každého serveru, aby byly metriky shromážděné při opětovném spuštění aplikace čisté.
- Přejděte na stránku pro server adventureworks[nnn].
- Na stránce Přehled vyberte Restartovat.
- V dialogovém okně Restartovat server vyberte Ano.
- Než budete pokračovat, počkejte, než se server restartuje.
- Podle stejného postupu restartujte servery adventureworks[nnn]-replica1 a adventureworks[nnn]-replica2 .
Překonfigurujte ukázkovou aplikaci tak, aby používala repliky.
V Cloud Shellu upravte soubor App.config.
code App.config
Přidejte připojovací řetězce pro nastavení Připojení ionString1 a Připojení ionString2. Tyto hodnoty by měly být stejné jako hodnoty Připojení ionString0, ale s textem adventureworks[nnn] nahrazeny adventureworks[nnn]-replica1 a adventureworks[nnn]-replica2 v elementech Server a ID uživatele.
Nastavte nastavení NumReplicas na hodnotu 3.
Soubor App.config by teď měl vypadat nějak takto:
<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>
Uložte soubor a zavřete editor.
Spusťte aplikaci znovu:
dotnet run
Aplikace se spustí jako předtím. Tentokrát se však požadavky distribuují napříč třemi servery.
Než budete pokračovat, nechte aplikaci běžet několik minut.
Monitorování aplikace a sledování rozdílů v metrikách výkonu
Nechte aplikaci spuštěnou a vraťte se na web Azure Portal.
V levém podokně vyberte Řídicí panel.
Výběrem grafu ho otevřete v podokně Metriky .
Nezapomeňte, že tento graf zobrazuje metriky pro server adventureworks*[nnn]*, ale ne repliky. Zatížení každé repliky by mělo být velmi stejné.
Ukázkový graf znázorňuje metriky shromážděné pro aplikaci za 30 minut od spuštění. Graf ukazuje, že využití procesoru bylo stále vysoké, ale využití paměti bylo nižší. Systém navíc po přibližně 25 minutách navazoval připojení pro více než 30 připojení. Nemusí to vypadat jako příznivé porovnání s předchozí konfigurací, která podporovala 70 připojení po 45 minutách. Úloha se ale teď rozprostřela mezi tři servery, které fungovaly na stejné úrovni a všechna 101 připojení byla vytvořena. Systém navíc dokázal pokračovat v provozu, aniž by hlásil selhání připojení.
Problém s využitím procesoru můžete vyřešit vertikálním navýšením kapacity na vyšší cenovou úroveň s větším počtem jader procesoru. Ukázkový systém použitý v tomto testovacím prostředí běží s cenovou úrovní Basic se 2 jádry. Přechod na cenovou úroveň Pro obecné účely vám poskytne až 64 jader.
Vraťte se do Cloud Shellu a stisknutím klávesy Enter aplikaci zastavte.
Teď jste viděli, jak monitorovat aktivitu serveru pomocí nástrojů dostupných na webu Azure Portal. Dozvěděli jste se také, jak nakonfigurovat replikaci a jak vytváření replik jen pro čtení dokáže distribuovat úlohy ve scénářích s daty náročnými na čtení.