“结果集锁表”通常出现在 数据库查询/游标(ResultSet)未正确关闭,或者 事务长时间未提交,导致数据库对查询涉及的数据/表加了锁,从而影响其他会话访问。
下面从 原因 → 解决方案 → 不同数据库示例 说明。
SELECT ... FOR UPDATEtry (Connection conn = ...;
Statement stmt = ...;
ResultSet rs = ...) {
// 使用结果集
} // 自动关闭
SELECT ... FOR UPDATE(除非必须)conn.setReadOnly(true);
commit() / rollback()避免一直卡死:
-- MySQL
SET innodb_lock_wait_timeout = 5;
SHOW PROCESSLIST;
KILL <id>;
conn.setAutoCommit(true);
SELECT * FROM v$locked_object;
ALTER SYSTEM KILL SESSION 'sid,serial#';
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
或加 WITH (NOLOCK)(谨慎)
✅ 小结果集
✅ 只读用只读连接
✅ 不在循环中查库
✅ 使用连接池(如 HikariCP)
✅ 监控慢查询和长事务
如果你能告诉我:
FOR UPDATE我可以直接给你针对性的代码级解决方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。