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


Magas processzorhasználat hibaelhárítása az Azure Database for PostgreSQL-ben

Ez a cikk a magas processzorhasználat kiváltó okának azonosítását ismerteti. Az Azure Database for PostgreSQL használata esetén lehetséges szervizelési műveleteket is biztosít a processzorkihasználtság szabályozásához.

Ebben a cikkben a következőt ismerheti meg:

  • 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 lekérdezéstár é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 a EXPLAIN ANALYZE, a kapcsolatkészletezés és a vákuumtáblák használatával.

Hibaelhárítási útmutatók

A hibaelhárítási útmutatók segítségével azonosíthatja a magas processzorhasználat valószínű kiváltó okát, és elolvashatja a talált probléma megoldására vonatkozó javaslatokat.

A hibaelhárítási útmutatók beállításának és használatának megismeréséhez 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 az eszközök alábbi listájának használatát a magas processzorhasználat azonosításához.

Azure-metrikák

Az Azure Metrics jó kiindulási pont a cpu-kihasználtság adott időszakra történő ellenőrzéséhez. A metrikák információt nyújtanak a cpu-kihasználtság magas időszakában felhasznált erőforrásokról. Hasonlítsa össze az írási IP-címek, az olvasási IP-címek, az olvasási sebesség bájt/mp és az írási átviteli sebesség bájt/másodperc diagramjait a PROCESSZOR százalékával, és állapítsa meg, hogy a számítási feladat mikor okozott 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 azokat a felülvizsgálathoz. Idő szerint szeleteli az adatokat, így időbeli használati minták láthatók. Az összes felhasználó, adatbázis és lekérdezés adatait egy rugalmas Azure Database for PostgreSQL-kiszolgálópéldányban elnevezett azure_sys adatbázisban tárolja a rendszer.

A lekérdezéstár korrelálhatja a várakozási események adatait a lekérdezések futási idejének statisztikáival. A lekérdezéstár használatával azonosíthatja azokat a lekérdezéseket, amelyek nagy processzorhasználattal rendelkeznek az érdeklődési időszak alatt.

További információ: lekérdezéstár.

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. A bővítményről további információt a dokumentációjában talál.

Á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 teljes száma és kapcsolatok száma állapot szerint

Az adatbázishoz való nagy számú kapcsolat a processzor- és memóriakihasználtság növeléséhez is 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 state
ORDER BY state ASC;

Magas cpu-kihasználtság feloldása

Használja a EXPLAIN ANALYZE szolgáltatást, fontolja meg a beépített PgBouncer kapcsolatkészletező használatát, és állítsa le a hosszú ideig futó tranzakciókat a magas cpu-kihasználtság feloldásához.

A EXPLAIN ANALYZE használata

Ha már ismeri a több processzort használó lekérdezéseket, a EXPLAIN ANALYZE használatával tovább vizsgálhatja és finomhangolhatja őket.

A EXPLAIN ANALYZE paranccsal kapcsolatos további információkért tekintse át a dokumentációját.

PgBouncer, egy beépített kapcsolatkészletező

Olyan helyzetekben, amikor sok rövid életű kapcsolat vagy sok kapcsolat marad tétlen az életük nagy részében, fontolja meg egy kapcsolatkészletező használatát, például a PgBouncert.

A PgBouncerrel kapcsolatos további információkért lásd a kapcsolatkészletezőt és a PostgreSQL-sel kapcsolatos ajánlott eljárásokat

Az Azure Database for PostgreSQL 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.

A munkamenet PID-jének leállításához az alábbi lekérdezéssel kell megkeresnie 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>;