Övervaka prestanda med Query Store

GÄLLER FÖR: Azure Database for PostgreSQL – enskild server

Viktigt!

Azure Database for PostgreSQL – enskild server är på väg att dras tillbaka. Vi rekommenderar starkt att du uppgraderar till Azure Database for PostgreSQL – flexibel server. Mer information om hur du migrerar till Azure Database for PostgreSQL – flexibel server finns i Vad händer med Azure Database for PostgreSQL – enskild server?.

Funktionen Query Store i Azure Database for PostgreSQL ger ett sätt att spåra frågeprestanda över tid. Query Store förenklar prestandafelsökningen genom att hjälpa dig att snabbt hitta de längsta och mest resursintensiva frågorna. Query Store samlar automatiskt in en historik över frågor och körningsstatistik, och den behåller dem för din granskning. Den separerar data efter tidsfönster så att du kan se databasanvändningsmönster. Data för alla användare, databaser och frågor lagras i en databas med namnet azure_sys i Azure Database for PostgreSQL-instansen.

Viktigt!

Ändra inte azure_sys-databasen eller dess scheman. Detta förhindrar att Query Store och relaterade prestandafunktioner fungerar korrekt.

Aktivera Query Store

Query Store är en opt-in-funktion, så den är inte aktiv som standard på en server. Arkivet är aktiverat eller inaktiverat globalt för alla databaser på en viss server och kan inte aktiveras eller inaktiveras per databas.

Aktivera Query Store med hjälp av Azure-portalen

  1. Logga in på Azure-portalen och välj din Azure Database for PostgreSQL-server.
  2. Välj Serverparametrar i avsnittet Inställningar på menyn.
  3. Sök efter parametern pg_qs.query_capture_mode .
  4. Ange värdet till TOP och Spara.

Så här aktiverar du väntestatistik i frågearkivet:

  1. Sök efter parametern pgms_wait_sampling.query_capture_mode .
  2. Ange värdet till ALL och Spara.

Du kan också ange dessa parametrar med hjälp av 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

Vänta 20 minuter för den första databatchen ska hinna sparas i databasen azure_sys.

Information i Query Store

Query Store har två butiker:

  • Ett körningsstatistiklager för att bevara information om frågekörningsstatistik.
  • Ett väntestatistikarkiv för att spara information om väntestatistik.

Vanliga scenarier för att använda Query Store är:

  • Fastställa hur många gånger en fråga kördes under ett angivet tidsfönster
  • Jämföra den genomsnittliga körningstiden för en fråga över tidsfönster för att se stora delta
  • Identifiera de frågor som körts längst under de senaste X timmarna
  • Identifiera de främsta N-frågorna som väntar på resurser
  • Förstå vänte natur för en viss fråga

För att minimera utrymmesanvändningen aggregeras körningsstatistiken i statistikarkivet för körning över ett fast, konfigurerbart tidsfönster. Informationen i dessa butiker visas genom att fråga frågearkivvyerna.

Åtkomst till Information om Query Store

Query Store-data lagras i azure_sys-databasen på Postgres-servern.

Följande fråga returnerar information om frågor i Query Store:

SELECT * FROM query_store.qs_view; 

Eller den här frågan för väntestatistik:

SELECT * FROM query_store.pgms_wait_sampling_view;

Söka efter väntefrågor

Väntehändelsetyper kombinerar olika väntehändelser i bucketar efter likhet. Query Store innehåller typen av väntehändelse, ett specifikt namn på väntehändelsen och frågan i fråga. Om du kan korrelera den här vänteinformationen med frågekörningsstatistiken kan du få en djupare förståelse för vad som bidrar till frågeprestandaegenskaper.

Här följer några exempel på hur du kan få mer insikter om din arbetsbelastning med hjälp av väntestatistiken i Query Store:

Observation Åtgärd
Väntetider med högt lås Kontrollera frågetexterna för de berörda frågorna och identifiera målentiteterna. Leta i Query Store efter andra frågor som ändrar samma entitet, som körs ofta och/eller har hög varaktighet. När du har identifierat dessa frågor kan du överväga att ändra programlogik för att förbättra samtidigheten eller använda en mindre restriktiv isoleringsnivå.
I/O-väntetider med hög buffert Hitta frågorna med ett stort antal fysiska läsningar i Query Store. Om de matchar frågorna med höga I/O-väntetider bör du överväga att införa ett index på den underliggande entiteten för att söka i stället för genomsökningar. Detta skulle minimera I/O-omkostnaderna för frågorna. Kontrollera prestanda Rekommendationer för servern i portalen för att se om det finns indexrekommendationer för den här servern som skulle optimera frågorna.
Väntetider med högt minne Hitta de vanligaste minneskrävande frågorna i Query Store. Dessa frågor fördröjer förmodligen ytterligare förlopp för de berörda frågorna. Kontrollera prestanda Rekommendationer för servern i portalen för att se om det finns indexrekommendationer som skulle optimera dessa frågor.

Konfigurationsalternativ

När Query Store är aktiverat sparar det data i 15-minuters aggregeringsfönster, upp till 500 distinkta frågor per fönster.

Följande alternativ är tillgängliga för att konfigurera Query Store-parametrar.

Parameter Beskrivning Standard Intervall
pg_qs.query_capture_mode Anger vilka instruktioner som spåras. inget none, top, all
pg_qs.max_query_text_length Anger den maximala frågelängd som kan sparas. Längre frågor trunkeras. 6000 100–10 000
pg_qs.retention_period_in_days Anger kvarhållningsperioden. 7 1 - 30
pg_qs.track_utility Anger om verktygskommandon spåras on på, av

Följande alternativ gäller specifikt för väntestatistik.

Parameter Beskrivning Standard Intervall
pgms_wait_sampling.query_capture_mode Anger vilka instruktioner som spåras för väntestatistik. inget ingen, alla
Pgms_wait_sampling.history_period Ange frekvensen i millisekunder där väntehändelser samplas. 100 1-600000

Kommentar

pg_qs.query_capture_mode ersätter pgms_wait_sampling.query_capture_mode. Om pg_qs.query_capture_mode är NONE har inställningen pgms_wait_sampling.query_capture_mode ingen effekt.

Använd Azure-portalen eller Azure CLI för att hämta eller ange ett annat värde för en parameter.

Vyer och funktioner

Visa och hantera Query Store med hjälp av följande vyer och funktioner. Alla i den offentliga Rollen PostgreSQL kan använda dessa vyer för att se data i Query Store. Dessa vyer är endast tillgängliga i azure_sys-databasen.

Frågor normaliseras genom att titta på deras struktur när du har tagit bort literaler och konstanter. Om två frågor är identiska förutom literalvärden har de samma hash.

query_store.qs_view

Den här vyn returnerar frågetextdata i Query Store. Det finns en rad för varje distinkt query_text. Data är inte tillgängliga via avsnittet Intelligenta prestanda i portalen, API:er eller CLI – men du hittar dem genom att ansluta till azure_sys och fråga "query_store.query_texts_view".

Namn Typ Referenser Beskrivning
runtime_stats_entry_id bigint ID från tabellen runtime_stats_entries
user_id Oid pg_authid.oid OID för användare som körde -instruktionen
db_id Oid pg_database.oid OID för databasen där -instruktionen kördes
query_id bigint Intern hash-kod, beräknad från instruktionens parsningsträd
query_sql_text Varchar(10000) Text för en representativ instruktion. Olika frågor med samma struktur grupperas tillsammans. den här texten är texten för den första av frågorna i klustret.
plan_id bigint ID för planen som motsvarar den här frågan, inte tillgängligt ännu
start_time timestamp Frågor aggregeras efter tids bucketar – tidsintervallet för en bucket är som standard 15 minuter. Det här är starttiden som motsvarar tids bucketen för den här posten.
end_time timestamp Sluttid som motsvarar tids bucketen för den här posten.
Samtal bigint Antal gånger som frågan kördes
total_time dubbel precision Total körningstid för frågor i millisekunder
min_time dubbel precision Minsta körningstid för frågor i millisekunder
max_time dubbel precision Maximal körningstid för frågor i millisekunder
mean_time dubbel precision Genomsnittlig körningstid för frågor i millisekunder
stddev_time dubbel precision Standardavvikelse för frågekörningstiden i millisekunder
rader bigint Totalt antal rader som hämtats eller påverkats av -instruktionen
shared_blks_hit bigint Totalt antal delade blockcacheträffar av -instruktionen
shared_blks_read bigint Totalt antal delade block som lästs av -instruktionen
shared_blks_dirtied bigint Totalt antal delade block som smutsas in av -instruktionen
shared_blks_written bigint Totalt antal delade block som skrivits av -instruktionen
local_blks_hit bigint Totalt antal lokala blockcacheträffar av -instruktionen
local_blks_read bigint Totalt antal lokala block som lästs av -instruktionen
local_blks_dirtied bigint Totalt antal lokala block som smutsas in av -instruktionen
local_blks_written bigint Totalt antal lokala block som skrivits av -instruktionen
temp_blks_read bigint Totalt antal temporära block som lästs av -instruktionen
temp_blks_written bigint Totalt antal temporära block som skrivits av -instruktionen
blk_read_time dubbel precision Total tid som instruktionen spenderade på att läsa block, i millisekunder (om track_io_timing är aktiverad, annars noll)
blk_write_time dubbel precision Total tid som instruktionen spenderade på att skriva block i millisekunder (om track_io_timing är aktiverad, annars noll)

query_store.query_texts_view

Den här vyn returnerar frågetextdata i Query Store. Det finns en rad för varje distinkt query_text.

Namn Typ Beskrivning
query_text_id bigint ID för tabellen query_texts
query_sql_text Varchar(10000) Text för en representativ instruktion. Olika frågor med samma struktur grupperas tillsammans. den här texten är texten för den första av frågorna i klustret.

query_store.pgms_wait_sampling_view

Den här vyn returnerar frågetextdata i Query Store. Det finns en rad för varje distinkt query_text. Data är inte tillgängliga via avsnittet Intelligenta prestanda i portalen, API:er eller CLI – men du hittar dem genom att ansluta till azure_sys och fråga "query_store.query_texts_view".

Namn Typ Referenser Beskrivning
user_id Oid pg_authid.oid OID för användare som körde -instruktionen
db_id Oid pg_database.oid OID för databasen där -instruktionen kördes
query_id bigint Intern hash-kod, beräknad från instruktionens parsningsträd
event_type text Den typ av händelse som serverdelen väntar på
händelse text Namnet på väntehändelsen om serverdelen väntar
Samtal Integer Antal av samma händelse som registrerats

Functions

Query_store.qs_reset() returnerar void

qs_reset tar bort all statistik som hittills samlats in av Query Store. Den här funktionen kan bara köras av serveradministratörsrollen.

Query_store.staging_data_reset() returnerar void

staging_data_reset tar bort all statistik som samlats in i minnet av Query Store (d.v.s. de data i minnet som ännu inte har rensats till databasen). Den här funktionen kan bara köras av serveradministratörsrollen.

Azure Monitor

Azure Database for PostgreSQL är integrerat med Diagnostikinställningar för Azure Monitor. Med diagnostikinställningar kan du skicka dina Postgres-loggar i JSON-format till Azure Monitor-loggar för analys och aviseringar, Event Hubs för strömning och Azure Storage för arkivering.

Viktigt!

Den här diagnostikfunktionen för är endast tillgänglig på prisnivåerna Generell användning och Minnesoptimerad.

Konfigurera diagnostikinställningar

Du kan aktivera diagnostikinställningar för Postgres-servern med hjälp av Azure-portalen, CLI, REST API och PowerShell. Loggkategorierna som ska konfigureras är QueryStoreRuntimeStatistics och QueryStoreWaitStatistics.

Så här aktiverar du resursloggar med hjälp av Azure-portalen:

  1. I portalen går du till Diagnostik Inställningar i navigeringsmenyn på Postgres-servern.
  2. Välj Lägg till diagnostikinställning.
  3. Namnge den här inställningen.
  4. Välj önskad slutpunkt (lagringskonto, händelsehubb, log analytics).
  5. Välj loggtyperna QueryStoreRuntimeStatistics och QueryStoreWaitStatistics.
  6. Spara inställningen.

Om du vill aktivera den här inställningen med hjälp av PowerShell, CLI eller REST API går du till artikeln diagnostikinställningar.

JSON-loggformat

I följande tabeller beskrivs fälten för de två loggtyperna. Beroende på vilken slutpunkt du väljer kan de fält som ingår och i vilken ordning de visas variera.

QueryStoreRuntimeStatistics

Fält Beskrivning
TimeGenerated [UTC] Tidsstämpel när loggen registrerades i UTC
ResourceId Postgres-serverns Azure-resurs-URI
Kategori QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Postgres-servernamn
runtime_stats_entry_id_s ID från tabellen runtime_stats_entries
user_id_s OID för användare som körde -instruktionen
db_id_s OID för databasen där -instruktionen kördes
query_id_s Intern hash-kod, beräknad från instruktionens parsningsträd
end_time_s Sluttid som motsvarar tids bucketen för den här posten
calls_s Antal gånger som frågan kördes
total_time_s Total körningstid för frågor i millisekunder
min_time_s Minsta körningstid för frågor i millisekunder
max_time_s Maximal körningstid för frågor i millisekunder
mean_time_s Genomsnittlig körningstid för frågor i millisekunder
ResourceGroup Resursgruppen
SubscriptionId Ditt prenumerations-ID
ResourceProvider Microsoft.DBForPostgreSQL
Resurs Postgres-servernamn
ResourceType Servers

QueryStoreWaitStatistics

Fält Beskrivning
TimeGenerated [UTC] Tidsstämpel när loggen registrerades i UTC
ResourceId Postgres-serverns Azure-resurs-URI
Kategori QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s OID för användare som körde -instruktionen
db_id_s OID för databasen där -instruktionen kördes
query_id_s Intern hashkod för frågan
calls_s Antal av samma händelse som registrerats
event_type_s Den typ av händelse som serverdelen väntar på
event_s Namnet på väntehändelsen om serverdelen väntar
start_time_t Händelsestarttid
end_time_s Händelsesluttid
LogicalServerName_s Postgres-servernamn
ResourceGroup Resursgruppen
SubscriptionId Ditt prenumerations-ID
ResourceProvider Microsoft.DBForPostgreSQL
Resurs Postgres-servernamn
ResourceType Servers

Begränsningar och kända problem

  • Om en PostgreSQL-server har parametern default_transaction_read_only på kan inte Query Store samla in data.
  • Funktionen Query Store kan avbrytas om den stöter på långa Unicode-frågor (>= 6 000 byte).
  • Läsrepliker replikerar Query Store-data från den primära servern. Det innebär att frågearkivet för en läsreplik inte innehåller statistik om frågor som körs på läsrepliken.

Nästa steg