From 322a4e59eabae6aea29f7b56f165b0cd7a2a91d1 Mon Sep 17 00:00:00 2001 From: pashko Date: Tue, 25 Nov 2025 11:30:32 +0800 Subject: [PATCH] Update posgresql_diagnostic/diagnositc.sql --- posgresql_diagnostic/diagnositc.sql | 38 +++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/posgresql_diagnostic/diagnositc.sql b/posgresql_diagnostic/diagnositc.sql index 27c0d9a..c1044ee 100644 --- a/posgresql_diagnostic/diagnositc.sql +++ b/posgresql_diagnostic/diagnositc.sql @@ -55,3 +55,41 @@ FROM pg_stat_activity WHERE application_name LIKE '%DBeaver%' AND state = 'active'; + +-- Включить pg_stat_statements на всех узлах +CREATE EXTENSION IF NOT EXISTS pg_stat_statements; + +-- Топ медленных запросов по кластеру +SELECT query, calls, total_time, mean_time, rows +FROM pg_stat_statements +ORDER BY total_time DESC +LIMIT 10; + +-- Проверить распределение нагрузки +SELECT datname, usename, count(*) as connections +FROM pg_stat_activity +WHERE state = 'active' +GROUP BY datname, usename; + + +-- Блокирующие запросы +SELECT blocked_locks.pid AS blocked_pid, + blocking_locks.pid AS blocking_pid, + blocked_activity.query AS blocked_query, + blocking_activity.query AS blocking_query +FROM pg_catalog.pg_locks blocked_locks +JOIN pg_catalog.pg_locks blocking_locks + ON blocking_locks.locktype = blocked_locks.locktype + AND blocking_locks.DATABASE IS NOT DISTINCT FROM blocked_locks.DATABASE + AND blocking_locks.relation IS NOT DISTINCT FROM blocked_locks.relation + AND blocking_locks.page IS NOT DISTINCT FROM blocked_locks.page + AND blocking_locks.tuple IS NOT DISTINCT FROM blocked_locks.tuple + AND blocking_locks.virtualxid IS NOT DISTINCT FROM blocked_locks.virtualxid + AND blocking_locks.transactionid IS NOT DISTINCT FROM blocked_locks.transactionid + AND blocking_locks.classid IS NOT DISTINCT FROM blocked_locks.classid + AND blocking_locks.objid IS NOT DISTINCT FROM blocked_locks.objid + AND blocking_locks.objsubid IS NOT DISTINCT FROM blocked_locks.objsubid + AND blocking_locks.pid != blocked_locks.pid +JOIN pg_catalog.pg_stat_activity blocked_activity ON blocked_activity.pid = blocked_locks.pid +JOIN pg_catalog.pg_stat_activity blocking_activity ON blocking_activity.pid = blocking_locks.pid +WHERE NOT blocked_locks.granted;