Monitorování výkonu s využitím úložiště dotazů

PLATÍ PRO: Azure Database for PostgreSQL – Jednoúčelový server

Důležité

Jednoúčelový server Azure Database for PostgreSQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for PostgreSQL. Další informace o migraci na flexibilní server Azure Database for PostgreSQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for PostgreSQL?

Funkce Úložiště dotazů ve službě Azure Database for PostgreSQL poskytuje způsob, jak sledovat výkon dotazů v průběhu času. Úložiště dotazů zjednodušuje řešení potíží s výkonem tím, že vám pomůže rychle najít nejdéle běžící a nejvýkonnější dotazy náročné na prostředky. Úložiště dotazů automaticky zaznamenává historii dotazů a statistik modulu runtime a uchovává je pro vaši kontrolu. Odděluje data časovými intervaly, abyste viděli vzory využití databáze. Data pro všechny uživatele, databáze a dotazy se ukládají do databáze s názvem azure_sys v instanci Azure Database for PostgreSQL.

Důležité

Neupravujte databázi azure_sys ani její schémata. Tím zabráníte správnému fungování funkcí úložiště dotazů a souvisejících funkcí výkonu.

Povolení úložiště dotazů

Úložiště dotazů je funkce výslovného souhlasu, takže na serveru není ve výchozím nastavení aktivní. Úložiště je povolené nebo zakázáno globálně pro všechny databáze na daném serveru a nelze ho zapnout ani vypnout pro každou databázi.

Povolení úložiště dotazů pomocí webu Azure Portal

  1. Přihlaste se k webu Azure Portal a vyberte server Azure Database for PostgreSQL.
  2. V Nastavení části nabídky vyberte Parametry serveru.
  3. Vyhledejte pg_qs.query_capture_mode parametr.
  4. Nastavte hodnotu na TOP a Uložte.

Povolení statistik čekání v úložišti dotazů:

  1. Vyhledejte pgms_wait_sampling.query_capture_mode parametr.
  2. Nastavte hodnotu na ALL a Uložte.

Alternativně můžete tyto parametry nastavit pomocí Azure CLI.

az postgres server configuration set --name pg_qs.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value TOP
az postgres server configuration set --name pgms_wait_sampling.query_capture_mode --resource-group myresourcegroup --server mydemoserver --value ALL

Umožňuje až 20 minut první dávky dat pro uchování v databázi azure_sys.

Informace v úložišti dotazů

Úložiště dotazů má dvě úložiště:

  • Úložiště statistik modulu runtime pro zachování informací o statistikách provádění dotazů.
  • Statistika čekání ukládá informace o zachování statistik čekání.

Mezi běžné scénáře použití úložiště dotazů patří:

  • Určení počtu spuštění dotazu v daném časovém intervalu
  • Porovnání průměrné doby provádění dotazu v časových oknech a zobrazení velkých rozdílů
  • Identifikace nejdéle běžících dotazů za posledních X hodin
  • Identifikace nejčastějších N dotazů, které čekají na prostředky
  • Vysvětlení povahy čekání pro konkrétní dotaz

Aby se minimalizovalo využití místa, statistiky spouštění modulu runtime v úložišti statistik modulu runtime se agregují v rámci pevného konfigurovatelného časového intervalu. Informace v těchto úložištích jsou viditelné dotazováním zobrazení úložiště dotazů.

Informace o úložišti dotazů accessu

Data úložiště dotazů se ukládají do databáze azure_sys na serveru Postgres.

Následující dotaz vrátí informace o dotazech v úložišti dotazů:

SELECT * FROM query_store.qs_view; 

Nebo tento dotaz na statistiky čekání:

SELECT * FROM query_store.pgms_wait_sampling_view;

Hledání dotazů čekání

Typy událostí čekání kombinují různé události čekání do kontejnerů podle podobnosti. Úložiště dotazů poskytuje typ události čekání, konkrétní název události čekání a dotaz, který se týká. Schopnost korelovat tyto informace o čekání se statistikami modulu runtime dotazu znamená, že získáte hlubší přehled o tom, co přispívá k charakteristikám výkonu dotazů.

Tady je několik příkladů, jak můžete získat další přehled o úlohách pomocí statistik čekání v úložišti dotazů:

Pozorování Akce
Vysoké čekání zámků Zkontrolujte texty dotazů pro ovlivněné dotazy a identifikujte cílové entity. Vyhledejte v úložišti dotazů další dotazy, které upravují stejnou entitu, která se provádí často nebo mají vysokou dobu trvání. Po identifikaci těchto dotazů zvažte změnu logiky aplikace, aby se zlepšila souběžnost, nebo použijte méně omezující úroveň izolace.
Čekání vstupně-výstupních operací s vysokou vyrovnávací pamětí Vyhledejte dotazy s velkým počtem fyzických čtení v úložišti dotazů. Pokud odpovídají dotazům s velkými vstupně-výstupními čekáními, zvažte zavedení indexu u podkladové entity, aby se místo prohledávání hledaly. Tím se minimalizují režijní náklady na vstupně-výstupní operace dotazů. Zkontrolujte doporučení k výkonu serveru na portálu a zjistěte, jestli pro tento server existují doporučení indexu, která by optimalizovala dotazy.
Čekání s vysokým využitím paměti Vyhledejte dotazy s nejvyšším využitím paměti v úložišti dotazů. Tyto dotazy pravděpodobně zpozdí další průběh ovlivněných dotazů. Zkontrolujte doporučení k výkonu pro váš server na portálu a zjistěte, jestli existují doporučení indexu, která by tyto dotazy optimalizovala.

Možnosti konfigurace

Když je úložiště dotazů povolené, ukládá data v 15minutových oknech agregace až 500 jedinečných dotazů na okno.

Pro konfiguraci parametrů úložiště dotazů jsou k dispozici následující možnosti.

Parametr Popis Výchozí Rozsah
pg_qs.query_capture_mode Nastaví, které příkazy se sledují. Žádná none, top, all
pg_qs.max_query_text_length Nastaví maximální délku dotazu, kterou lze uložit. Delší dotazy budou zkráceny. 6000 100 - 10 tisíc
pg_qs.retention_period_in_days Nastaví dobu uchovávání. 7 1 - 30
pg_qs.track_utility Nastaví, jestli se sledují příkazy nástroje. on zapnuto, vypnuto

Následující možnosti se vztahují konkrétně na statistiky čekání.

Parametr Popis Výchozí Rozsah
pgms_wait_sampling.query_capture_mode Nastaví, které příkazy se sledují pro statistiky čekání. Žádná žádná, vše
Pgms_wait_sampling.history_period Nastavte frekvenci v milisekundách, ve kterých se vzorkují události čekání. 100 1-600000

Poznámka:

pg_qs.query_capture_mode nahrazuje režim pgms_wait_sampling.query_capture_mode. Pokud je pg_qs.query_capture_mode NONE, nastavení pgms_wait_sampling.query_capture_mode nemá žádný vliv.

K získání nebo nastavení jiné hodnoty parametru použijte Azure Portal nebo Azure CLI .

Zobrazení a funkce

K zobrazení a správě úložiště dotazů použijte následující zobrazení a funkce. Tato zobrazení může zobrazit kdokoli ve veřejné roli PostgreSQL k zobrazení dat v úložišti dotazů. Tato zobrazení jsou k dispozici pouze v databázi azure_sys .

Dotazy jsou normalizovány zobrazením jejich struktury po odebrání literálů a konstant. Pokud jsou dva dotazy s výjimkou hodnot literálů stejné, budou mít stejnou hodnotu hash.

query_store.qs_view

Toto zobrazení vrátí textová data dotazu v úložišti dotazů. Každý samostatný query_text má jeden řádek. Data nejsou k dispozici prostřednictvím části Inteligentní výkon na portálu, rozhraních API nebo rozhraní příkazového řádku, ale najdete je tak, že se připojíte k azure_sys a dotazujete se na query_store.query_text_view.

Název Typ Odkazy Popis
runtime_stats_entry_id bigint ID z tabulky runtime_stats_entries
user_id Oid pg_authid.oid Identifikátor uživatele, který příkaz spustil
Db_id Oid pg_database.oid Identifikátor databáze, ve které byl příkaz proveden
query_id bigint Interní hashovací kód vypočítaný ze stromu analýzy příkazu
query_sql_text Varchar(10000) Text reprezentativního příkazu Různé dotazy se stejnou strukturou jsou seskupené dohromady; tento text je text pro první z dotazů v clusteru.
plan_id bigint ID plánu, který odpovídá tomuto dotazu, ještě není k dispozici
start_time časové razítko Dotazy se agregují podle časových intervalů – časové rozpětí kontejneru je ve výchozím nastavení 15 minut. Toto je počáteční čas odpovídající časovému intervalu pro tuto položku.
end_time časové razítko Koncový čas odpovídající časovému intervalu pro tuto položku.
Volání bigint Počet spuštění dotazu
total_time dvojitá přesnost Celková doba provádění dotazů v milisekundách
min_time dvojitá přesnost Minimální doba provádění dotazů v milisekundách
max_time dvojitá přesnost Maximální doba provádění dotazů v milisekundách
mean_time dvojitá přesnost Střední doba provádění dotazů v milisekundách
stddev_time dvojitá přesnost Směrodatná odchylka doby provádění dotazu v milisekundách
řádky bigint Celkový počet řádků načtených nebo ovlivněných příkazem
shared_blks_hit bigint Celkový počet přístupů sdílené mezipaměti bloků příkazem
shared_blks_read bigint Celkový počet sdílených bloků přečtených příkazem
shared_blks_dirtied bigint Celkový počet sdílených bloků zašpiněných příkazem
shared_blks_written bigint Celkový počet sdílených bloků zapsaných příkazem
local_blks_hit bigint Celkový počet přístupů do místní mezipaměti bloků příkazem
local_blks_read bigint Celkový počet místních bloků přečtených příkazem
local_blks_dirtied bigint Celkový počet místních bloků zašpiněných příkazem
local_blks_written bigint Celkový počet místních bloků zapsaných příkazem
temp_blks_read bigint Celkový počet dočasných bloků přečtených příkazem
temp_blks_written bigint Celkový počet dočasných bloků zapsaných příkazem
blk_read_time dvojitá přesnost Celkový čas strávený čtením bloků v milisekundách (pokud je povolená track_io_timing, jinak nula)
blk_write_time dvojitá přesnost Celkový čas strávený zápisem bloků v milisekundách (pokud je povolená track_io_timing, jinak nula)

query_store.query_text_view

Toto zobrazení vrátí textová data dotazu v úložišti dotazů. Každý samostatný query_text má jeden řádek.

Název Typ Popis
query_text_id bigint ID tabulky query_texts
query_sql_text Varchar(10000) Text reprezentativního příkazu Různé dotazy se stejnou strukturou jsou seskupené dohromady; tento text je text pro první z dotazů v clusteru.

query_store.pgms_wait_sampling_view

Toto zobrazení vrátí textová data dotazu v úložišti dotazů. Každý samostatný query_text má jeden řádek. Data nejsou k dispozici prostřednictvím části Inteligentní výkon na portálu, rozhraních API nebo rozhraní příkazového řádku, ale najdete je tak, že se připojíte k azure_sys a dotazujete se na query_store.query_text_view.

Název Typ Odkazy Popis
user_id Oid pg_authid.oid Identifikátor uživatele, který příkaz spustil
Db_id Oid pg_database.oid Identifikátor databáze, ve které byl příkaz proveden
query_id bigint Interní hashovací kód vypočítaný ze stromu analýzy příkazu
Event_type text Typ události, pro kterou back-end čeká
event text Název události čekání, pokud back-end právě čeká
Volání Celé číslo Počet zachycených událostí

Functions

Query_store.qs_reset() vrátí void.

qs_reset zahodí všechny statistiky shromážděné doposud úložištěm dotazů. Tuto funkci může spustit jenom role správce serveru.

Query_store.staging_data_reset() vrátí void.

staging_data_reset zahodí všechny statistiky shromážděné v paměti úložištěm dotazů (to znamená data v paměti, která ještě nebyla vyprázdněna do databáze). Tuto funkci může spustit jenom role správce serveru.

Azure Monitor

Služba Azure Database for PostgreSQL je integrovaná s nastavením diagnostiky služby Azure Monitor. Nastavení diagnostiky umožňuje odesílat protokoly Postgres ve formátu JSON do protokolů služby Azure Monitor pro analýzy a upozorňování, službu Event Hubs pro streamování a Službu Azure Storage pro archivaci.

Důležité

Tato diagnostická funkce je k dispozici pouze v cenových úrovních Pro obecné účely a Optimalizováno pro paměť.

Konfigurace nastavení diagnostiky

Nastavení diagnostiky pro server Postgres můžete povolit pomocí webu Azure Portal, rozhraní příkazového řádku, rozhraní REST API a PowerShellu. Kategorie protokolů, které se mají konfigurovat, jsou QueryStoreRuntimeStatistics a QueryStoreWaitStatistics.

Povolení protokolů prostředků pomocí webu Azure Portal:

  1. Na portálu přejděte do diagnostického Nastavení v navigační nabídce vašeho serveru Postgres.
  2. Vyberte Přidat nastavení diagnostiky.
  3. Pojmenujte toto nastavení.
  4. Vyberte upřednostňovaný koncový bod (účet úložiště, centrum událostí, log analytics).
  5. Vyberte typy protokolů QueryStoreRuntimeStatistics a QueryStoreWaitStatistics.
  6. Uložte nastavení.

Pokud chcete toto nastavení povolit pomocí PowerShellu, rozhraní příkazového řádku nebo rozhraní REST API, navštivte článek o nastavení diagnostiky.

Formát protokolu JSON

Následující tabulky popisují pole pro tyto dva typy protokolů. V závislosti na zvoleném výstupním koncovém bodu se můžou pole a pořadí, ve kterém se zobrazují, lišit.

QueryStoreRuntimeStatistics

Pole Popis
TimeGenerated [UTC] Časové razítko, kdy se protokol zaznamenal v UTC
ResourceId Identifikátor URI prostředku Azure serveru Postgres
Kategorie QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Název serveru Postgres
runtime_stats_entry_id_s ID z tabulky runtime_stats_entries
user_id_s Identifikátor uživatele, který příkaz spustil
db_id_s Identifikátor databáze, ve které byl příkaz proveden
query_id_s Interní hashovací kód vypočítaný ze stromu analýzy příkazu
end_time_s Koncový čas odpovídající časovému intervalu pro tuto položku
calls_s Počet spuštění dotazu
total_time_s Celková doba provádění dotazů v milisekundách
min_time_s Minimální doba provádění dotazů v milisekundách
max_time_s Maximální doba provádění dotazů v milisekundách
mean_time_s Střední doba provádění dotazů v milisekundách
ResourceGroup Skupina prostředků
SubscriptionId ID vašeho předplatného
ResourceProvider Microsoft.DBForPostgreSQL
Prostředek Název serveru Postgres
ResourceType Servers

QueryStoreWaitStatistics

Pole Popis
TimeGenerated [UTC] Časové razítko, kdy se protokol zaznamenal v UTC
ResourceId Identifikátor URI prostředku Azure serveru Postgres
Kategorie QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s Identifikátor uživatele, který příkaz spustil
db_id_s Identifikátor databáze, ve které byl příkaz proveden
query_id_s Interní kód hash dotazu
calls_s Počet zachycených událostí
event_type_s Typ události, pro kterou back-end čeká
event_s Název události čekání, pokud back-end právě čeká
start_time_t Čas zahájení události
end_time_s Čas ukončení události
LogicalServerName_s Název serveru Postgres
ResourceGroup Skupina prostředků
SubscriptionId ID vašeho předplatného
ResourceProvider Microsoft.DBForPostgreSQL
Prostředek Název serveru Postgres
ResourceType Servers

Omezení a známé problémy

  • Pokud má server PostgreSQL parametr default_transaction_read_only, úložiště dotazů nemůže zachytit data.
  • Funkce úložiště dotazů může být přerušena, pokud narazí na dlouhé dotazy Unicode (>= 6 000 bajtů).
  • Repliky pro čtení replikují data úložiště dotazů z primárního serveru. To znamená, že úložiště dotazů repliky pro čtení neposkytuje statistiky o dotazech spuštěných v replice pro čtení.

Další kroky