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_timing
kiszolgá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éhezmax_wal_size
. Ha értéket szeretne kapni, tegye a következőket: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();
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();
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,9checkpoint_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ékcheckpoint_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övelheticheckpoint_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.