Prestaties bewaken met Query Store

VAN TOEPASSING OP: Azure Database for PostgreSQL - enkele server

Belangrijk

Azure Database for PostgreSQL - Enkele server bevindt zich op het buitengebruikstellingspad. We raden u ten zeerste aan om een upgrade uit te voeren naar Azure Database for PostgreSQL - Flexible Server. Zie Wat gebeurt er met Azure Database for PostgreSQL Enkele server voor meer informatie over migreren naar Azure Database for PostgreSQL - Flexible Server.

De functie Query Store in Azure Database for PostgreSQL biedt een manier om queryprestaties in de loop van de tijd bij te houden. Query Store vereenvoudigt het oplossen van problemen met prestaties, omdat u snel de langstlopende en meest tijdrovende query's kunt vinden. Query Store legt automatisch een geschiedenis van query's en runtimestatistieken vast en behoudt deze voor uw beoordeling. Hiermee worden gegevens gescheiden door tijdvensters, zodat u databasegebruikspatronen kunt zien. Gegevens voor alle gebruikers, databases en query's worden opgeslagen in een database met de naam azure_sys in het Azure Database for PostgreSQL-exemplaar.

Belangrijk

Wijzig de azure_sys database of de bijbehorende schema's niet. Als u dit doet, werken Query Store en gerelateerde prestatiefuncties niet goed.

Query Store inschakelen

Query Store is een opt-in-functie, dus deze is niet standaard actief op een server. Het archief is globaal ingeschakeld of uitgeschakeld voor alle databases op een bepaalde server en kan niet per database worden ingeschakeld of uitgeschakeld.

Query Store inschakelen met behulp van Azure Portal

  1. Meld u aan bij Azure Portal en selecteer uw Azure Database for PostgreSQL-server.
  2. Selecteer Serverparameters in de sectie Instellingen van het menu.
  3. Zoek de pg_qs.query_capture_mode parameter.
  4. Stel de waarde in op TOP en sla deze op.

Wachtstatistieken inschakelen in uw Query Store:

  1. Zoek de pgms_wait_sampling.query_capture_mode parameter.
  2. Stel de waarde in op ALL en sla deze op.

U kunt deze parameters ook instellen met behulp van de 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

Wacht 20 minuten tot de eerste batch met gegevens is vastgelegd in database azure_sys.

Informatie in Query Store

Query Store heeft twee winkels:

  • Een runtimestatistiekenarchief voor het persistent maken van de gegevens van de queryuitvoeringsstatistieken.
  • Een wachtstatistiekenarchief voor persistente informatie over wachtstatistieken.

Veelvoorkomende scenario's voor het gebruik van Query Store zijn:

  • Bepalen hoe vaak een query is uitgevoerd in een bepaald tijdvenster
  • De gemiddelde uitvoeringstijd van een query in tijdvensters vergelijken met grote verschillen
  • Langstlopende query's in de afgelopen X uur identificeren
  • Belangrijkste N-query's identificeren die wachten op resources
  • Inzicht in de wachtaard voor een bepaalde query

Om het ruimtegebruik te minimaliseren, worden de uitvoeringsstatistieken van runtime in het archief met runtimestatistieken geaggregeerd in een vast, configureerbaar tijdvenster. De informatie in deze winkels is zichtbaar door een query uit te voeren op de querystoreweergaven.

Query Store-gegevens openen

Query Store-gegevens worden opgeslagen in de azure_sys-database op uw Postgres-server.

De volgende query retourneert informatie over query's in Query Store:

SELECT * FROM query_store.qs_view; 

Of deze query voor wachtstatistieken:

SELECT * FROM query_store.pgms_wait_sampling_view;

Wachtende query's zoeken

Wachtgebeurtenissen combineren verschillende wachtgebeurtenissen in buckets op gelijkenis. Query Store biedt het wacht-gebeurtenistype, de specifieke naam van de wacht gebeurtenis en de betreffende query. Als u deze wachtinformatie kunt correleren met de statistieken van de queryruntime, krijgt u meer inzicht in wat bijdraagt aan de prestatiekenmerken van query's.

Hier volgen enkele voorbeelden van hoe u meer inzicht krijgt in uw workload met behulp van de wachtstatistieken in Query Store:

Observatie Actie
Hoge vergrendelingswachttijden Controleer de queryteksten voor de betrokken query's en identificeer de doelentiteiten. Zoek in Query Store naar andere query's die dezelfde entiteit wijzigen, die regelmatig wordt uitgevoerd en/of een hoge duur hebben. Nadat u deze query's hebt geïdentificeerd, kunt u overwegen de toepassingslogica te wijzigen om gelijktijdigheid te verbeteren of een minder beperkend isolatieniveau te gebruiken.
IO-wachttijden met hoge buffer Zoek de query's met een groot aantal fysieke leesbewerkingen in Query Store. Als ze overeenkomen met de query's met hoge IO-wachttijden, kunt u overwegen om een index op de onderliggende entiteit te introduceren om te zoeken in plaats van scans. Hierdoor wordt de IO-overhead van de query's geminimaliseerd. Controleer de prestatie-Aanbevelingen voor uw server in de portal om te zien of er indexaankopen zijn voor deze server waarmee de query's worden geoptimaliseerd.
Wachttijden met hoog geheugen Zoek de query's die het meest veel geheugen verbruiken in Query Store. Deze query's vertragen waarschijnlijk verdere voortgang van de betrokken query's. Controleer de prestatie-Aanbevelingen voor uw server in de portal om te zien of er indexaankopen zijn die deze query's zouden optimaliseren.

Configuratieopties

Wanneer Query Store is ingeschakeld, worden gegevens opgeslagen in aggregatievensters van 15 minuten, maximaal 500 afzonderlijke query's per venster.

De volgende opties zijn beschikbaar voor het configureren van Query Store-parameters.

Parameter Beschrijving Standaard Bereik
pg_qs.query_capture_mode Hiermee stelt u in welke instructies worden bijgehouden. Geen none, top, all
pg_qs.max_query_text_length Hiermee stelt u de maximale querylengte in die kan worden opgeslagen. Langere query's worden afgekapt. 6000 100 - 10K
pg_qs.retention_period_in_days Hiermee stelt u de bewaarperiode in. 7 1 - 30
pg_qs.track_utility Hiermee stelt u in of hulpprogrammaopdrachten worden bijgehouden op aan, uit

De volgende opties zijn specifiek van toepassing op wachtstatistieken.

Parameter Beschrijving Standaard Bereik
pgms_wait_sampling.query_capture_mode Hiermee stelt u in welke instructies worden bijgehouden voor wachtstatistieken. Geen geen, alle
Pgms_wait_sampling.history_period Stel de frequentie in milliseconden in waarop wachtgebeurtenissen worden bemonsterd. 100 1-600000

Notitie

pg_qs.query_capture_mode vervangt pgms_wait_sampling.query_capture_mode. Als pg_qs.query_capture_mode NONE is, heeft de instelling pgms_wait_sampling.query_capture_mode geen effect.

Gebruik Azure Portal of Azure CLI om een andere waarde voor een parameter op te halen of in te stellen.

Weergaven en functies

Query Store weergeven en beheren met behulp van de volgende weergaven en functies. Iedereen in de openbare PostgreSQL-rol kan deze weergaven gebruiken om de gegevens in Query Store te bekijken. Deze weergaven zijn alleen beschikbaar in de azure_sys-database .

Query's worden genormaliseerd door de structuur te bekijken na het verwijderen van letterlijke en constanten. Als twee query's identiek zijn, met uitzondering van letterlijke waarden, hebben ze dezelfde hash.

query_store.qs_view

Deze weergave retourneert querytekstgegevens in Query Store. Er is één rij voor elke afzonderlijke query_text. De gegevens zijn niet beschikbaar via de sectie Intelligente prestaties in de portal, API's of de CLI. U kunt deze echter vinden door verbinding te maken met azure_sys en query's uit te voeren op 'query_store.query_texts_view'.

Naam Type Naslaginformatie Beschrijving
runtime_stats_entry_id bigint Id uit de runtime_stats_entries tabel
user_id oid pg_authid.oid OID van de gebruiker die de instructie heeft uitgevoerd
db_id oid pg_database.oid OID van database waarin de instructie is uitgevoerd
query_id bigint Interne hashcode, berekend op basis van de parseringsstructuur van de instructie
query_sql_text Varchar(10000) Tekst van een representatieve verklaring. Verschillende query's met dezelfde structuur worden samen geclusterd; deze tekst is de tekst voor de eerste van de query's in het cluster.
plan_id bigint Id van het plan dat overeenkomt met deze query, nog niet beschikbaar
begintijd timestamp Query's worden geaggregeerd per tijdbucket. De tijdsduur van een bucket is standaard 15 minuten. Dit is de begintijd die overeenkomt met de tijdsbucket voor deze vermelding.
end_time timestamp Eindtijd die overeenkomt met de tijdsbucket voor deze vermelding.
Oproepen bigint Aantal keren dat de query is uitgevoerd
total_time dubbele precisie Totale uitvoeringstijd van query's, in milliseconden
min_time dubbele precisie Minimale uitvoeringstijd van query's, in milliseconden
max_time dubbele precisie Maximale uitvoeringstijd van query's, in milliseconden
mean_time dubbele precisie Gemiddelde uitvoeringstijd van query's, in milliseconden
stddev_time dubbele precisie Standaarddeviatie van de uitvoeringstijd van de query, in milliseconden
rijen bigint Totaal aantal rijen dat is opgehaald of beïnvloed door de instructie
shared_blks_hit bigint Totaal aantal gedeelde blokcachetreffers door de instructie
shared_blks_read bigint Totaal aantal gedeelde blokken gelezen door de instructie
shared_blks_dirtied bigint Totaal aantal gedeelde blokken dat door de instructie wordt bevuild
shared_blks_written bigint Totaal aantal gedeelde blokken dat is geschreven door de instructie
local_blks_hit bigint Totaal aantal lokale blokcachetreffers door de instructie
local_blks_read bigint Totaal aantal lokale blokken gelezen door de instructie
local_blks_dirtied bigint Totaal aantal lokale blokken dat door de instructie wordt veroorzaakt
local_blks_written bigint Totaal aantal lokale blokken dat is geschreven door de instructie
temp_blks_read bigint Totaal aantal tijdelijke blokken dat door de instructie is gelezen
temp_blks_written bigint Totaal aantal tijdelijke blokken dat is geschreven door de instructie
blk_read_time dubbele precisie Totale tijd die de instructie heeft besteed aan leesblokken, in milliseconden (als track_io_timing is ingeschakeld, anders nul)
blk_write_time dubbele precisie Totale tijd die de instructie heeft besteed aan het schrijven van blokken, in milliseconden (als track_io_timing is ingeschakeld, anders nul)

query_store.query_texts_view

Deze weergave retourneert querytekstgegevens in Query Store. Er is één rij voor elke afzonderlijke query_text.

Naam Type Beschrijving
query_text_id bigint Id voor de query_texts tabel
query_sql_text Varchar(10000) Tekst van een representatieve verklaring. Verschillende query's met dezelfde structuur worden samen geclusterd; deze tekst is de tekst voor de eerste van de query's in het cluster.

query_store.pgms_wait_sampling_view

Deze weergave retourneert querytekstgegevens in Query Store. Er is één rij voor elke afzonderlijke query_text. De gegevens zijn niet beschikbaar via de sectie Intelligente prestaties in de portal, API's of de CLI. U kunt deze echter vinden door verbinding te maken met azure_sys en query's uit te voeren op 'query_store.query_texts_view'.

Naam Type Naslaginformatie Beschrijving
user_id oid pg_authid.oid OID van de gebruiker die de instructie heeft uitgevoerd
db_id oid pg_database.oid OID van database waarin de instructie is uitgevoerd
query_id bigint Interne hashcode, berekend op basis van de parseringsstructuur van de instructie
event_type sms verzenden Het type gebeurtenis waarvoor de back-end wacht
gebeurtenis sms verzenden De naam van de wacht gebeurtenis als de back-end momenteel wacht
Oproepen Geheel getal Het aantal vastgelegde gebeurtenissen

Functions

Query_store.qs_reset() retourneert een ongeldige waarde

qs_reset verwijdert alle statistieken die tot nu toe zijn verzameld door Query Store. Deze functie kan alleen worden uitgevoerd door de serverbeheerdersrol.

Query_store.staging_data_reset() retourneert een ongeldige waarde

staging_data_reset verwijdert alle statistieken die zijn verzameld in het geheugen door Query Store (dat wil gezegd, de gegevens in het geheugen die nog niet zijn leeggemaakt naar de database). Deze functie kan alleen worden uitgevoerd door de serverbeheerdersrol.

Azure Monitor

Azure Database for PostgreSQL is geïntegreerd met diagnostische instellingen van Azure Monitor. Met diagnostische instellingen kunt u uw Postgres-logboeken in JSON-indeling verzenden naar Azure Monitor-logboeken voor analyse en waarschuwingen, Event Hubs voor streaming en Azure Storage voor archivering.

Belangrijk

Deze diagnostische functie is alleen beschikbaar in de prijscategorieën Algemeen gebruik en Geoptimaliseerd voor geheugen.

Diagnostische instellingen configureren

U kunt diagnostische instellingen voor uw Postgres-server inschakelen met behulp van Azure Portal, CLI, REST API en PowerShell. De logboekcategorieën die moeten worden geconfigureerd, zijn QueryStoreRuntimeStatistics en QueryStoreWaitStatistics.

Resourcelogboeken inschakelen met behulp van Azure Portal:

  1. Ga in de portal naar Diagnostische Instellingen in het navigatiemenu van uw Postgres-server.
  2. Selecteer Diagnostische instelling toevoegen.
  3. Geef deze instelling een naam.
  4. Selecteer uw voorkeurseindpunt (opslagaccount, Event Hub, Log Analytics).
  5. Selecteer de logboektypen QueryStoreRuntimeStatistics en QueryStoreWaitStatistics.
  6. Sla uw instelling op.

Als u deze instelling wilt inschakelen met behulp van PowerShell, CLI of REST API, gaat u naar het artikel met diagnostische instellingen.

JSON-logboekindeling

In de volgende tabellen worden de velden voor de twee logboektypen beschreven. Afhankelijk van het uitvoereindpunt dat u kiest, kunnen de velden die zijn opgenomen en de volgorde waarin ze worden weergegeven, variëren.

QueryStoreRuntimeStatistics

Veld Beschrijving
TimeGenerated [UTC] Tijdstempel waarop het logboek is vastgelegd in UTC
ResourceId De Azure-resource-URI van de Postgres-server
Categorie QueryStoreRuntimeStatistics
OperationName QueryStoreRuntimeStatisticsEvent
LogicalServerName_s Postgres-servernaam
runtime_stats_entry_id_s Id uit de runtime_stats_entries tabel
user_id_s OID van de gebruiker die de instructie heeft uitgevoerd
db_id_s OID van database waarin de instructie is uitgevoerd
query_id_s Interne hashcode, berekend op basis van de parseringsstructuur van de instructie
end_time_s Eindtijd die overeenkomt met de tijdsbucket voor deze vermelding
calls_s Aantal keren dat de query is uitgevoerd
total_time_s Totale uitvoeringstijd van query's, in milliseconden
min_time_s Minimale uitvoeringstijd van query's, in milliseconden
max_time_s Maximale uitvoeringstijd van query's, in milliseconden
mean_time_s Gemiddelde uitvoeringstijd van query's, in milliseconden
ResourceGroup De resourcegroep
SubscriptionId Uw abonnements-id
ResourceProvider Microsoft.DBForPostgreSQL
Bron Postgres-servernaam
ResourceType Servers

QueryStoreWaitStatistics

Veld Beschrijving
TimeGenerated [UTC] Tijdstempel waarop het logboek is vastgelegd in UTC
ResourceId De Azure-resource-URI van de Postgres-server
Categorie QueryStoreWaitStatistics
OperationName QueryStoreWaitEvent
user_id_s OID van de gebruiker die de instructie heeft uitgevoerd
db_id_s OID van database waarin de instructie is uitgevoerd
query_id_s Interne hashcode van de query
calls_s Het aantal vastgelegde gebeurtenissen
event_type_s Het type gebeurtenis waarvoor de back-end wacht
event_s De naam van de wacht gebeurtenis als de back-end momenteel wacht
start_time_t Begintijd van gebeurtenis
end_time_s Eindtijd van gebeurtenis
LogicalServerName_s Postgres-servernaam
ResourceGroup De resourcegroep
SubscriptionId Uw abonnements-id
ResourceProvider Microsoft.DBForPostgreSQL
Bron Postgres-servernaam
ResourceType Servers

Beperkingen en bekende problemen

  • Als een PostgreSQL-server de parameter default_transaction_read_only heeft ingeschakeld, kan Query Store geen gegevens vastleggen.
  • Query Store-functionaliteit kan worden onderbroken als er lange Unicode-query's worden uitgevoerd (>= 6000 bytes).
  • Leesreplica's repliceren Query Store-gegevens van de primaire server. Dit betekent dat de Query Store van een leesreplica geen statistieken biedt over query's die worden uitgevoerd op de leesreplica.

Volgende stappen