Ř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>;
Související obsah
- Řešení potíží s vysokým využitím paměti na flexibilním serveru Azure Database for PostgreSQL
- Řešení potíží s vysokým využitím IOPS na flexibilním serveru Azure Database for PostgreSQL
- Řešení potíží a identifikace pomalých dotazů na flexibilním serveru Azure Database for PostgreSQL
- Parametry serveru na flexibilním serveru Azure Database for PostgreSQL
- Automatické ladění na flexibilním serveru Azure Database for PostgreSQL