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
- Přihlaste se k webu Azure Portal a vyberte server Azure Database for PostgreSQL.
- V Nastavení části nabídky vyberte Parametry serveru.
- Vyhledejte
pg_qs.query_capture_mode
parametr. - Nastavte hodnotu na
TOP
a Uložte.
Povolení statistik čekání v úložišti dotazů:
- Vyhledejte
pgms_wait_sampling.query_capture_mode
parametr. - 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:
- Na portálu přejděte do diagnostického Nastavení v navigační nabídce vašeho serveru Postgres.
- Vyberte Přidat nastavení diagnostiky.
- Pojmenujte toto nastavení.
- Vyberte upřednostňovaný koncový bod (účet úložiště, centrum událostí, log analytics).
- Vyberte typy protokolů QueryStoreRuntimeStatistics a QueryStoreWaitStatistics.
- 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
- Přečtěte si další informace o scénářích, ve kterých může být zvlášť užitečné úložiště dotazů.
- Přečtěte si další informace o osvědčených postupech pro používání úložiště dotazů.