數(shù)據(jù)庫(kù)操作超時(shí)常見原因:
- 連接數(shù)超過負(fù)荷
- 鎖表
注意:以下SQL適用postgres數(shù)據(jù)庫(kù)
查看數(shù)據(jù)庫(kù)最大連接數(shù)
SHOW max_connections;
查看活躍連接數(shù)的SQL:
-- 方式一:
SELECT
count(*)
FROM
pg_stat_activity
WHERE
datname = '數(shù)據(jù)庫(kù)名稱';
-- 方式二:
SELECT
sum(numbackends)
FROM
pg_stat_database
WHERE
datname = '數(shù)據(jù)庫(kù)名稱';
如果發(fā)現(xiàn)活躍連接數(shù)很小盹愚,繼續(xù)查看活躍連接數(shù)里邊有沒有鎖表的
SELECT * FROM pg_stat_activity WHERE datname = '數(shù)據(jù)庫(kù)名字';
image.png
發(fā)現(xiàn)有很多 state 為 idle in transaction (aborted) 記錄,這種情況一般是開啟事務(wù)后石景,并沒有提交或回滾操作。
殺死無(wú)效的連接(包括鎖表的連接)
select pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='tiku' and "state"='idle in transaction (aborted)';
查看鎖表的情況
select relation::regclass, * from pg_locks where not granted;