Delen via


Problemen met hoog IOPS-gebruik voor Azure Database for PostgreSQL - Flexible Server oplossen

VAN TOEPASSING OP: Azure Database for PostgreSQL - Flexibele server

In dit artikel wordt beschreven hoe u snel de hoofdoorzaak van hoog IOPS-gebruik (invoer-/uitvoerbewerkingen per seconde) kunt identificeren en herstelacties kunt uitvoeren om het IOPS-gebruik te beheren wanneer u een flexibele Server van Azure Database for PostgreSQL gebruikt.

In dit artikel leert u het volgende:

  • Informatie over probleemoplossingsgidsen voor het identificeren en verkrijgen van aanbevelingen om de hoofdoorzaken te beperken.
  • Hulpprogramma's gebruiken om hoog I/O-gebruik (input/output) te identificeren, zoals Metrische gegevens van Azure, Query Store en pg_stat_statements.
  • Identificeer de hoofdoorzaken, zoals langlopende query's, tijdsinstellingen voor controlepunten, een verstorend autovacuum-daemonproces en een hoog opslaggebruik.
  • Los hoog I/O-gebruik op met behulp van Uitleg analyseren, controlepuntgerelateerde serverparameters afstemmen en de autovacuum-daemon afstemmen.

Handleidingen voor probleemoplossing

Met behulp van de handleidingen voor het oplossen van problemen met functies die beschikbaar zijn in de flexibele Server-portal van Azure Database for PostgreSQL, vindt u de mogelijke hoofdoorzaak en aanbevelingen voor het scenario voor het beperken van een hoog IOPS-gebruik. Volg de handleidingen voor probleemoplossing om deze te gebruiken. Volg de handleidingen voor het oplossen van problemen met setups.

Hulpprogramma's voor het identificeren van hoog I/O-gebruik

Overweeg de volgende hulpprogramma's om een hoog I/O-gebruik te identificeren.

Metrische gegevens van Azure

Azure Metrics is een goed startpunt om het I/O-gebruik voor een gedefinieerde datum en periode te controleren. Metrische gegevens geven informatie over de tijd waarin het I/O-gebruik hoog is. Vergelijk de grafieken van SCHRIJF-IOPS, LEES-IOPS, Leesdoorvoer en Schrijfdoorvoer om te achterhalen wanneer de werkbelasting een hoog I/O-gebruik veroorzaakt. Voor proactieve bewaking kunt u waarschuwingen voor de metrische gegevens configureren. Zie Metrische gegevens van Azure voor stapsgewijze instructies.

Query Store

De functie Query Store legt automatisch de geschiedenis van query's en runtimestatistieken vast en bewaart deze voor uw beoordeling. Hiermee worden de gegevens gesegmenteerd op tijd om tijdelijke gebruikspatronen te zien. Gegevens voor alle gebruikers, databases en query's worden opgeslagen in een database met de naam azure_sys in het flexibele serverexemplaren van Azure Database for PostgreSQL. Zie Prestaties bewaken met Query Store voor stapsgewijze instructies.

Gebruik de volgende instructie om de vijf belangrijkste SQL-instructies weer te geven die I/O verbruiken:

select * from query_store.qs_view qv where is_system_query is FALSE
order by blk_read_time + blk_write_time  desc limit 5;

De pg_stat_statements-extensie

De pg_stat_statements extensie helpt bij het identificeren van query's die I/O verbruiken op de server.

Gebruik de volgende instructie om de vijf belangrijkste SQL-instructies weer te geven die I/O verbruiken:

SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY blk_read_time + blk_write_time desc
LIMIT 5;

Notitie

Wanneer u querystore of pg_stat_statements gebruikt voor kolommen blk_read_time en blk_write_time die moeten worden ingevuld, moet u de serverparameter track_io_timinginschakelen. Raadpleeg serverparameters voor meer informatie overtrack_io_timing.

Hoofdoorzaken identificeren

Als het I/O-verbruik hoog is in het algemeen, kan het volgende de hoofdoorzaken zijn:

Langlopende transacties

Langlopende transacties kunnen I/O verbruiken, wat kan leiden tot een hoog I/O-gebruik.

De volgende query helpt bij het identificeren van verbindingen die voor de langste tijd worden uitgevoerd:

SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;

Tijdsinstellingen voor controlepunten

Hoge I/O kan ook worden gezien in scenario's waarin een controlepunt te vaak plaatsvindt. Een manier om dit te identificeren is door het logboekbestand van azure Database for PostgreSQL flexibele server te controleren op de volgende logboektekst: 'LOG: controlepunten treden te vaak op.'

U kunt dit ook onderzoeken met behulp van een benadering waarbij periodieke momentopnamen van pg_stat_bgwriter met een tijdstempel worden opgeslagen. Met behulp van de opgeslagen momentopnamen kunt u het gemiddelde controlepuntinterval, het aantal aangevraagde controlepunten en het aantal getimede controlepunten berekenen.

Verstorend autovacuum-daemonproces

Voer de volgende query uit om autovacuum te bewaken:

SELECT schemaname, relname, n_dead_tup, n_live_tup, autovacuum_count, last_vacuum, last_autovacuum, last_autoanalyze, autovacuum_count, autoanalyze_count FROM pg_stat_all_tables WHERE n_live_tup > 0;

De query wordt gebruikt om te controleren hoe vaak de tabellen in de database worden leeggemaakt.

  • last_autovacuum: De datum en tijd waarop de laatste autovacuum op de tabel werd uitgevoerd.
  • autovacuum_count: Het aantal keren dat de tafel is leeggezogen.
  • autoanalyze_count: Het aantal keren dat de tabel is geanalyseerd.

Hoog I/O-gebruik oplossen

Als u een hoog I/O-gebruik wilt oplossen, kunt u een van de volgende drie methoden gebruiken.

De EXPLAIN ANALYZE opdracht

Nadat u de query hebt geïdentificeerd die hoge I/O verbruikt, gebruikt EXPLAIN ANALYZE u deze om de query verder te onderzoeken en af te stemmen. Raadpleeg het EXPLAIN-plan voor meer informatie over de EXPLAIN ANALYZE opdracht.

Langlopende transacties beëindigen

U kunt overwegen om een langlopende transactie als optie te beëindigen.

Als u de proces-id (PID) van een sessie wilt beëindigen, moet u de PID detecteren met behulp van de volgende query:

SELECT pid, usename, datname, query, now() - xact_start as duration
FROM pg_stat_activity
WHERE pid <> pg_backend_pid() and state IN ('idle in transaction', 'active')
ORDER BY duration DESC;

U kunt ook filteren op andere eigenschappen, zoals usename (gebruikersnaam) of datname (databasenaam).

Nadat u de PID van de sessie hebt, kunt u deze beëindigen met behulp van de volgende query:

SELECT pg_terminate_backend(pid);

Serverparameters afstemmen

Als u merkt dat het controlepunt te vaak plaatsvindt, verhoogt u de serverparameter totdat de max_wal_size meeste controlepunten tijdgestuurd zijn in plaats van aangevraagd. Uiteindelijk moet 90 procent of meer tijd zijn gebaseerd en moet het interval tussen twee controlepunten dicht bij de checkpoint_timeout waarde liggen die is ingesteld op de server.

  • max_wal_size: Piekuren zijn een goed moment om een max_wal_size waarde te bereiken. Ga als volgt te werk om een waarde te verkrijgen:

    1. Voer de volgende query uit om de huidige WAL LSN op te halen en noteer het resultaat:

      select pg_current_wal_lsn();
      
    2. Wacht een checkpoint_timeout aantal seconden. Voer de volgende query uit om de huidige WAL LSN op te halen en noteer het resultaat:

      select pg_current_wal_lsn();
      
    3. Voer de volgende query uit, die gebruikmaakt van de twee resultaten, om het verschil te controleren in gigabytes (GB):

      select round (pg_wal_lsn_diff ('LSN value when run second time', 'LSN value when run first time')/1024/1024/1024,2) WAL_CHANGE_GB;
      
  • checkpoint_completion_target: Een goede gewoonte is om de waarde in te stellen op 0,9. Een voorbeeld: een waarde van 0,9 voor een checkpoint_timeout van 5 minuten geeft aan dat het doel voor het voltooien van een controlepunt 270 seconden is (0,9*300 seconden). Een waarde van 0,9 biedt een redelijk consistente I/O-belasting. Een agressieve waarde van checkpoint_completion_target kan leiden tot een verhoogde I/O-belasting op de server.

  • checkpoint_timeout: U kunt de checkpoint_timeout waarde verhogen van de standaardwaarde die is ingesteld op de server. Wanneer u de waarde verhoogt, moet u er rekening mee houden dat het verhogen ervan ook de tijd voor crashherstel zou verhogen.

Autovacuum afstemmen om onderbrekingen te verminderen

Raadpleeg Autovacuum-afstemming voor meer informatie over het bewaken en afstemmen in scenario's waarbij autovacuum te verstoren is.

Vergroot de opslag

Het verhogen van de opslag helpt wanneer u meer IOPS toevoegt aan de server. Raadpleeg compute- en opslagopties voor meer informatie over opslag en bijbehorende IOPS.