Megosztás a következőn keresztül:


Az Azure Database for PostgreSQL magas processzorhasználatá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 processzorkihasználtság kiváltó okát, valamint a rugalmas Azure Database for PostgreSQL-kiszolgáló használatakor a processzorkihasználtság szabályozására szolgáló lehetséges javítóműveleteket.

Ebben a cikkben a következőt fogja elsajátítani:

  • Hibaelhárítási útmutatók a kiváltó okok azonosításához és lekéréséhez.
  • A magas cpu-kihasználtság azonosítására szolgáló eszközök, például az Azure Metrics, a Query Store és a pg_stat_statements.
  • A kiváltó okok, például a hosszú ideig futó lekérdezések és a teljes kapcsolatok azonosítása.
  • A magas cpu-kihasználtság feloldása elemzési, kapcsolatkészletezési és vákuumozási táblák használatával.

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 processzorhasználat mérséklé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 cpu-kihasználtság azonosítására szolgáló eszközök

Fontolja meg ezeket az eszközöket a magas processzorkihasználtság azonosításához.

Azure-metrikák

Az Azure Metrics jó kiindulási pont a cpu-kihasználtság ellenőrzéséhez a meghatározott dátum és időszak alapján. A metrikák információt adnak arról az időtartamról, amely alatt a cpu-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 a processzorhasználattal, hogy megtudja, mikor okozott a számítási feladat magas processzorhasználatot. 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 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, hogy láthassa az időbeli használati mintákat. Az összes felhasználó, adatbázis és lekérdezés adatait egy azure_sys nevű adatbázisban tárolja a rugalmas Azure Database for PostgreSQL-kiszolgálópéldány. Részletes útmutatásért tekintse meg a Lekérdezéstárat.

pg_stat_statements

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

Átlagos vagy átlagos végrehajtási idő

A Postgres 13-at vagy újabb verzióit a következő utasítással tekintheti meg az első öt SQL-utasítást közép- vagy átlagos végrehajtási idő szerint:

SELECT userid::regrole, dbid, query, mean_exec_time
FROM pg_stat_statements
ORDER BY mean_exec_time
DESC LIMIT 5;

Teljes végrehajtási idő

Hajtsa végre az alábbi utasításokat az első öt SQL-utasítás teljes végrehajtási idő szerinti megtekintéséhez.

A Postgres 13-at vagy újabb verzióit az alábbi utasítással tekintheti meg az első öt SQL-utasítást a teljes végrehajtási idő alapján:

SELECT userid::regrole, dbid, query
FROM pg_stat_statements
ORDER BY total_exec_time
DESC LIMIT 5;

A kiváltó okok azonosítása

Ha a processzorhasználati szintek általában magasak, az alábbiak lehetnek a kiváltó okok:

Hosszú ideig futó tranzakciók

A hosszú ideig futó tranzakciók processzorerőforrásokat használhatnak, amelyek magas processzorkihasználtsághoz vezethetnek.

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;

Kapcsolatok és számkapcsolatok teljes száma állapot szerint

Az adatbázishoz való nagyszámú kapcsolat szintén egy másik probléma, amely a processzor- és memóriakihasználtság növeléséhez vezethet.

Az alábbi lekérdezés a kapcsolatok állapot szerinti számáról ad információt:

SELECT state, count(*)
FROM  pg_stat_activity
WHERE pid <> pg_backend_pid()
GROUP BY 1 ORDER BY 1;

Magas cpu-kihasználtság feloldása

A magas cpu-kihasználtság feloldásához használja az Elemzés magyarázata, a PG Bouncer, a kapcsolatkészletezés és a hosszú ideig futó tranzakciók leállítását.

Elemzés magyarázatának használata

Ha már ismeri a hosszú ideig futó lekérdezést, a EXPLAIN használatával tovább vizsgálhatja és finomhangolhatja a lekérdezést.
A EXPLAIN paranccsal kapcsolatos további információkért tekintse át a Magyarázó tervet.

PGBouncer és kapcsolatkészletezés

Olyan helyzetekben, amikor sok tétlen kapcsolat vagy sok kapcsolat van, amelyek a processzort használják, fontolja meg egy kapcsolatkészletező, például a PgBouncer használatát.

További részletek a PgBouncerről:

Kapcsolatkészletező

Ajánlott eljárások

A rugalmas Azure Database for PostgreSQL-kiszolgáló beépített kapcsolatkészletezési megoldásként kínálja a PgBouncert. További információ: PgBouncer

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

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

Egy munkamenet PID-jének 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), datname (adatbázis neve) stb. alapján is.

Miután megkapta a munkamenet PID-jét, a következő lekérdezéssel fejezheti be:

SELECT pg_terminate_backend(pid);

Vákuum- és táblázatstatisztikák monitorozása

A táblastatisztikák naprakészen tartása segít a lekérdezési teljesítmény javításában. Monitorozza, hogy a rendszeres automatikus helyreállítás folyamatban van-e.

Az alábbi lekérdezés segít azonosítani a porszívózandó táblákat:

select schemaname,relname,n_dead_tup,n_live_tup,last_vacuum,last_analyze,last_autovacuum,last_autoanalyze
from pg_stat_all_tables where n_live_tup > 0;

last_autovacuum az oszlopok pedig last_autoanalyze azt a dátumot és időt adják meg, amikor a táblázatot utoljára automatikusan elemezték vagy elemezték. Ha a táblákat nem porszívózzák rendszeresen, végezze el az autovacuum finomhangolását. Az autovacuum hibaelhárításával és hangolásával kapcsolatos további információkért tekintse meg az Autovacuum hibaelhárítását.

A rövid távú megoldás az lenne, ha manuális vákuumelemzést végeznénk a táblákon, ahol lassú lekérdezések láthatók:

vacuum analyze <table_name>;