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
- Meld u aan bij Azure Portal en selecteer uw Azure Database for PostgreSQL-server.
- Selecteer Serverparameters in de sectie Instellingen van het menu.
- Zoek de
pg_qs.query_capture_mode
parameter. - Stel de waarde in op
TOP
en sla deze op.
Wachtstatistieken inschakelen in uw Query Store:
- Zoek de
pgms_wait_sampling.query_capture_mode
parameter. - 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 prestatieaanvelingen voor uw server in de portal om te zien of er indexaankopen zijn voor deze server die de query's zouden optimaliseren. |
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 prestatieaanvelingen 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 |
Functies
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:
- Ga in de portal naar Diagnostische instellingen in het navigatiemenu van uw Postgres-server.
- Selecteer Diagnostische instelling toevoegen.
- Geef deze instelling een naam.
- Selecteer uw voorkeurseindpunt (opslagaccount, Event Hub, Log Analytics).
- Selecteer de logboektypen QueryStoreRuntimeStatistics en QueryStoreWaitStatistics.
- 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
- Meer informatie over scenario's waarin Query Store vooral nuttig kan zijn.
- Meer informatie over aanbevolen procedures voor het gebruik van Query Store.