Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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>;
Kapcsolódó tartalom
- Az Azure Database for PostgreSQL magas memóriahasználatának hibaelhárítása.
- Az Azure Database for PostgreSQL magas IOPS-kihasználtságának hibaelhárítása.
- Lassan futó lekérdezések hibaelhárítása és azonosítása az Azure Database for PostgreSQL-ben.
- Kiszolgálóparaméterek az Azure Database for PostgreSQL-ben.
- Autovacuum-hangolás az Azure Database for PostgreSQL-ben.