數(shù)據(jù)庫(kù)操作超時(shí)常見(jiàn)原因:
- 連接數(shù)超過(guò)負(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ù)名稱(chēng)';
-- 方式二:
SELECT
sum(numbackends)
FROM
pg_stat_database
WHERE
datname = '數(shù)據(jù)庫(kù)名稱(chēng)';
如果發(fā)現(xiàn)活躍連接數(shù)很小,繼續(xù)查看活躍連接數(shù)里邊有沒(méi)有鎖表的
SELECT * FROM pg_stat_activity WHERE datname = '數(shù)據(jù)庫(kù)名字';

image.png
發(fā)現(xiàn)有很多 state 為 idle in transaction (aborted) 記錄,這種情況一般是開(kāi)啟事務(wù)后,并沒(méi)有提交或回滾操作。
殺死無(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;