Ö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
- Logga in på Azure-portalen och välj din Azure Database for PostgreSQL-server.
- Välj Serverparametrar i avsnittet Inställningar på menyn.
- Sök efter parametern
pg_qs.query_capture_mode
. - Ange värdet till
TOP
och Spara.
Så här aktiverar du väntestatistik i frågearkivet:
- Sök efter parametern
pgms_wait_sampling.query_capture_mode
. - 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:
- I portalen går du till Diagnostik Inställningar i navigeringsmenyn på Postgres-servern.
- Välj Lägg till diagnostikinställning.
- Namnge den här inställningen.
- Välj önskad slutpunkt (lagringskonto, händelsehubb, log analytics).
- Välj loggtyperna QueryStoreRuntimeStatistics och QueryStoreWaitStatistics.
- 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
- Läs mer om scenarier där Query Store kan vara särskilt användbart.
- Läs mer om metodtips för att använda Query Store.