Share via


Az Azure Database for PostgreSQL magas IOPS-kihasználtságának hibaelhárítása – rugalmas kiszolgáló

A következőkre vonatkozik: Azure Database for PostgreSQL – Rugalmas kiszolgáló

Ez a cikk bemutatja, hogyan azonosíthatja gyorsan a magas IOPS-kihasználtság (bemeneti/kimeneti műveletek másodpercenkénti) használatának alapvető okát, és javító műveleteket biztosít az IOPS-kihasználtság szabályozásához rugalmas Azure Database for PostgreSQL-kiszolgáló használatakor.

Ebben a cikkben az alábbiakkal ismerkedhet meg:

  • Hibaelhárítási útmutatók a kiváltó okok azonosításához és lekéréséhez.
  • Az eszközökkel azonosíthatja a magas bemeneti/kimeneti (I/O-) kihasználtságot, például az Azure Metricst, a Query Store-t és a pg_stat_statements.
  • Azonosíthatja a kiváltó okokat, például a hosszú ideig futó lekérdezéseket, az ellenőrzőpontok időzítését, a zavaró autovacuum démonfolyamatot és a magas tárterület-kihasználtságot.
  • A magas I/O-kihasználtság feloldása az Elemzés magyarázata, az Ellenőrzőponttal kapcsolatos kiszolgálóparaméterek finomhangolása és az autovacuum démon hangolása segítségével.

Hibaelhárítási útmutatók

A rugalmas Azure Database for PostgreSQL-kiszolgálóportálon elérhető szolgáltatás hibaelhárítási útmutatók segítségével megtalálhatja a lehetséges kiváltó okot és javaslatokat a magas IOPS-kihasználtság csökkentésére. A hibaelhárítási útmutatók használatához kövesse a beállítási hibaelhárítási útmutatókat.

A magas I/O-kihasználtság azonosítására szolgáló eszközök

A magas I/O-kihasználtság azonosításához vegye figyelembe az alábbi eszközöket.

Azure-metrikák

Az Azure Metrics jó kiindulási pont egy meghatározott dátum és időszak I/O-kihasználtságának ellenőrzéséhez. A metrikák információt adnak arról az időről, amely alatt az I/O-kihasználtság magas. Hasonlítsa össze az írási IP-címek, az olvasási IP-címek, az olvasási átviteli sebesség és az írási átviteli sebesség grafikonjait, és állapítsa meg, hogy a számítási feladat mikor okoz magas I/O-kihasználtságot. A proaktív monitorozáshoz konfigurálhatja a metrikákra vonatkozó riasztásokat. Részletes útmutatásért tekintse meg az Azure Metricst.

Lekérdezéstár

A Lekérdezéstár funkció automatikusan rögzíti a lekérdezések és a futtatókörnyezet statisztikáinak előzményeit, és megőrzi őket a felülvizsgálathoz. Idő szerint szeleteli az adatokat az időbeli használati minták megtekintéséhez. Az összes felhasználó, adatbázis és lekérdezés adatait egy azure_sys nevű adatbázis tárolja a rugalmas Azure Database for PostgreSQL-kiszolgálópéldányban. Részletes útmutatást a Teljesítmény monitorozása a Lekérdezéstárban című témakörben talál.

Az alábbi utasítással megtekintheti az első öt, I/O-t használó SQL-utasítást:

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

A pg_stat_statements bővítmény

A pg_stat_statements bővítmény segít azonosítani a kiszolgálón I/O-t használó lekérdezéseket.

Az alábbi utasítással megtekintheti az első öt, I/O-t használó SQL-utasítást:

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

Feljegyzés

Ha lekérdezéstárat vagy pg_stat_statements használ blk_read_time és blk_write_time kitöltendő oszlopokhoz, engedélyeznie kell a kiszolgálóparamétert track_io_timing. További információkért tekintse át a track_io_timingkiszolgáló paramétereit.

A kiváltó okok azonosítása

Ha az I/O-használat szintje általában magas, a következők lehetnek a kiváltó okok:

Hosszú ideig futó tranzakciók

A hosszú ideig futó tranzakciók I/O-t használhatnak, ami magas I/O-kihasználtságot eredményezhet.

A következő lekérdezés segít azonosítani a leghosszabb ideig futó kapcsolatokat:

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;

Ellenőrzőpont időzítése

A magas I/O olyan helyzetekben is látható, amikor túl gyakran történik ellenőrzőpont. Ennek azonosításához ellenőrizze a rugalmas Azure Database for PostgreSQL-kiszolgáló naplófájlt a következő naplószöveghez: "LOG: ellenőrzőpontok túl gyakran fordulnak elő."

Azt is megvizsgálhatja, hogy hogyan menthetők az időbélyeggel rendelkező időszakos pillanatképek pg_stat_bgwriter . A mentett pillanatképek használatával kiszámíthatja az ellenőrzőpontok átlagos időközét, a kért ellenőrzőpontok számát és az időzított ellenőrzőpontok számát.

Zavaró autovacuum démonfolyamat

Futtassa a következő lekérdezést az autovacuum figyeléséhez:

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;

A lekérdezés segítségével ellenőrizheti, hogy az adatbázis táblái milyen gyakran vannak porszívózva.

  • last_autovacuum: Az a dátum és idő, amikor az utolsó autovacuum futott a táblán.
  • autovacuum_count: Az a szám, amikor a táblázatot kiporszívózták.
  • autoanalyze_count: A táblázat elemzésének hányszoros száma.

A magas I/O-kihasználtsággal kapcsolatos probléma elhárítása

A magas I/O-kihasználtság feloldásához az alábbi három módszer bármelyikét használhatja.

A EXPLAIN ANALYZE parancs

Miután azonosította a magas I/O-t használó lekérdezést, használja EXPLAIN ANALYZE a lekérdezés további vizsgálatához és finomhangolásához. A paranccsal kapcsolatos további információkért EXPLAIN ANALYZE tekintse át a EXPLAIN tervet.

Hosszú ideig futó tranzakciók leállása

Lehetőségként fontolóra vehet egy hosszú ideig futó tranzakciót.

A munkamenet folyamatazonosítójának (PID) leállításához az alábbi lekérdezéssel kell észlelnie a PID-t:

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;

Szűrhet más tulajdonságok, például usename (felhasználónév) vagy datname (adatbázisnév) alapján is.

Miután létrehozta a munkamenet PID-jét, az alábbi lekérdezéssel megszakíthatja azt:

SELECT pg_terminate_backend(pid);

Kiszolgálóparaméterek finomhangolása

Ha azt tapasztalja, hogy az ellenőrzőpont túl gyakran történik, növelje a kiszolgálóparamétert, amíg a max_wal_size legtöbb ellenőrzőpont időalapú nem lesz a kérés helyett. Végül a 90 százaléknak vagy többnek időalapúnak kell lennie, és a két ellenőrzőpont közötti intervallumnak közel kell lennie a checkpoint_timeout kiszolgálón beállított értékhez.

  • max_wal_size: A csúcsidő jó alkalom egy érték eléréséhez max_wal_size . Ha értéket szeretne kapni, tegye a következőket:

    1. Futtassa a következő lekérdezést az aktuális WAL LSN lekéréséhez, majd jegyezze fel az eredményt:

      select pg_current_wal_lsn();
      
    2. Várjon néhány checkpoint_timeout másodpercig. Futtassa a következő lekérdezést az aktuális WAL LSN lekéréséhez, majd jegyezze fel az eredményt:

      select pg_current_wal_lsn();
      
    3. Futtassa a következő lekérdezést, amely a két eredményt használja a különbség ellenőrzéséhez gigabájtban (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: Az ajánlott eljárás az érték 0,9 értékre beállítása. Például egy 5 perces 0,9 checkpoint_timeout érték azt jelzi, hogy az ellenőrzőpont kitöltésének célja 270 másodperc (0,9*300 másodperc). A 0,9 érték viszonylag konzisztens I/O-terhelést biztosít. Az agresszív érték checkpoint_completion_target megnövelheti a kiszolgáló I/O-terhelését.

  • checkpoint_timeout: A kiszolgálón beállított alapértelmezett értékből növelheti checkpoint_timeout az értéket. Az érték növelése során vegye figyelembe, hogy a növelésével az összeomlási helyreállítás ideje is nő.

Az autovacuum hangolása a fennakadások csökkentése érdekében

Az autovacuum túl zavaró helyzetekben történő figyeléséről és hangolásáról további információt az Autovacuum hangolásának áttekintésében talál.

A tárterület növelése

A tárterület növelése segít, ha több IOPS-t ad hozzá a kiszolgálóhoz. A tárolással és a társított IOPS-sel kapcsolatos további információkért tekintse át a számítási és tárolási lehetőségeket.