Sdílet prostřednictvím


Řešení potíží s vysokým využitím procesoru na flexibilním serveru Azure Database for PostgreSQL

PLATÍ PRO: Flexibilní server Azure Database for PostgreSQL

Tento článek popisuje, jak identifikovat původní příčinu vysokého využití procesoru. Poskytuje také možné nápravné akce pro řízení využití procesoru při použití flexibilního serveru Azure Database for PostgreSQL.

V tomto článku se dozvíte:

  • O průvodcích odstraňováním potíží s identifikací a získáním doporučení ke zmírnění původních příčin
  • Informace o nástrojích pro identifikaci vysokého využití procesoru, jako jsou metriky Azure, úložiště dotazů a pg_stat_statements
  • Jak identifikovat původní příčiny, jako jsou dlouhotrvající dotazy a celková připojení.
  • Jak vyřešit vysoké využití procesoru pomocí funkce EXPLAIN ANALYZE, sdružování připojení a vakuových tabulek.

Průvodce řešením potíží

Pomocí průvodců odstraňováním potíží můžete identifikovat pravděpodobnou hlavní příčinu scénáře vysokého využití procesoru a přečíst si doporučení ke zmírnění zjištěného problému.

Pokud chcete zjistit, jak nastavit a používat průvodce odstraňováním potíží, postupujte podle průvodců odstraňováním potíží s nastavením.

Nástroje pro identifikaci vysokého využití procesoru

Zvažte použití následujícího seznamu nástrojů k identifikaci vysokého využití procesoru.

Metriky Azure

Metriky Azure jsou dobrým výchozím bodem pro kontrolu využití procesoru v určitém období. Metriky poskytují informace o prostředcích využívaných během období, ve kterém je vysoké využití procesoru. Porovnejte grafy vstupně-výstupních operací zápisu, vstupně-výstupních operací čtení, bajtů propustnosti čtení/s a bajty propustnosti zápisu za sekundu s procentem procesoru a zjistěte časy, kdy úloha způsobila vysoké využití procesoru.

Proaktivní monitorování můžete nakonfigurovat upozornění na metriky. Podrobné pokyny najdete v tématu Metriky Azure.

Úložiště dotazů

Úložiště dotazů automaticky zaznamenává historii dotazů a statistik modulu runtime a uchovává je pro vaši kontrolu. Data se rozkryjí podle času, abyste viděli vzory dočasného použití. Data pro všechny uživatele, databáze a dotazy se ukládají do databáze pojmenované azure_sys v instanci flexibilního serveru Azure Database for PostgreSQL.

Úložiště dotazů může korelovat informace o událostech čekání se statistikami doby běhu dotazu. Úložiště dotazů slouží k identifikaci dotazů s vysokou spotřebou procesoru během období zájmu.

Další informace najdete v úložišti dotazů.

pg_stat_statements

Toto pg_stat_statements rozšíření pomáhá identifikovat dotazy, které spotřebovávají čas na serveru. Další informace o tomto rozšíření najdete v jeho dokumentaci.

Střední nebo průměrná doba provádění

Pro Postgres verze 13 a vyšší použijte následující příkaz k zobrazení prvních pěti příkazů SQL průměrem nebo průměrnou dobou provádění:

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

Celková doba provádění

Spuštěním následujících příkazů zobrazte prvních pět příkazů SQL podle celkové doby provádění.

Pro Postgres verze 13 a vyšší použijte následující příkaz k zobrazení prvních pěti příkazů SQL podle celkové doby provádění:

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

Identifikace původních příčin

Pokud jsou úrovně spotřeby procesoru obecně vysoké, můžou být hlavní příčiny následující:

Dlouhotrvající transakce

Dlouhotrvající transakce můžou využívat prostředky procesoru, které můžou vést k vysokému využití procesoru.

Následující dotaz pomáhá identifikovat připojení spuštěná po nejdelší dobu:

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;

Celkový počet připojení a počet připojení podle stavu

Velký počet připojení k databázi může také vést ke zvýšení využití procesoru a paměti.

Následující dotaz poskytuje informace o počtu připojení podle stavu:

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

Řešení vysokého využití procesoru

Použijte funkci EXPLAIN ANALYZE, zvažte použití integrovaného nástroje pro sdružování připojení PgBouncer a ukončete dlouhotrvající transakce, abyste vyřešili vysoké využití procesoru.

Použití funkce EXPLAIN ANALYZE

Jakmile znáte dotazy, které spotřebovávají více procesoru, použijte funkci EXPLAIN ANALYZE k dalšímu zkoumání a jejich ladění.

Další informace o příkazu EXPLAIN ANALYZE najdete v jeho dokumentaci.

PgBouncer, integrovaný nástroj pro sdružování připojení

V situacích, kdy existuje mnoho krátkodobých připojení nebo mnoho připojení, která zůstávají nečinná pro většinu svého života, zvažte použití nástroje pro sdružování připojení, jako je PgBouncer.

Další informace o nástroji PgBouncer najdete v tématu o sdružování připojení a o osvědčených postupech pro zpracování připojení pomocí PostgreSQL.

Flexibilní server Azure Database for PostgreSQL nabízí PgBouncer jako integrované řešení sdružování připojení. Další informace naleznete v tématu PgBouncer.

Ukončení dlouhotrvajících transakcí

Můžete zvážit zabití dlouhotrvající transakce jako možnosti.

Pokud chcete ukončit identifikátor PID relace, musíte najít jeho PID pomocí následujícího dotazu:

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;

Můžete také filtrovat podle jiných vlastností, jako usename je (uživatelské jméno), datname (název databáze) atd.

Jakmile budete mít PID relace, můžete ho ukončit pomocí následujícího dotazu:

SELECT pg_terminate_backend(pid);

Monitorování statistik vakua a tabulek

Udržování statistik tabulek v aktualizovaném stavu pomáhá zlepšit výkon dotazů. Monitorujte, jestli se provádí pravidelné automatické úklidy.

Následující dotaz pomáhá identifikovat tabulky, které potřebují úklid:

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 sloupce last_autoanalyze poskytují datum a čas posledního automatického úklidu nebo analýzy tabulky. Pokud se tabulky pravidelně nevysávají, proveďte kroky k ladění automatického úklidu.

Další informace o řešení potíží s automatickým úklidem a ladění najdete v tématu Řešení potíží s automatickým úklidem.

Krátkodobé řešení by mělo provést ruční vakuovou analýzu tabulek, ve kterých se zobrazují pomalé dotazy:

VACUUM ANALYZE <table>;