数据库操作超时常见原因:
- 连接数超过负荷
- 锁表
注意:以下SQL适用postgres数据库
查看数据库最大连接数
SHOW max_connections;
查看活跃连接数的SQL:
-- 方式一:
SELECT
count(*)
FROM
pg_stat_activity
WHERE
datname = '数据库名称';
-- 方式二:
SELECT
sum(numbackends)
FROM
pg_stat_database
WHERE
datname = '数据库名称';
如果发现活跃连接数很小,继续查看活跃连接数里边有没有锁表的
SELECT * FROM pg_stat_activity WHERE datname = '数据库名字';
image.png
发现有很多 state 为 idle in transaction (aborted) 记录,这种情况一般是开启事务后,并没有提交或回滚操作。
杀死无效的连接(包括锁表的连接)
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;
网友评论