SQLWorkbench-J事务连接未关闭,Redshift查询锁表问题咨询
解决SQLWorkbench-J连接Redshift时的自动事务锁表问题
我之前用SQLWorkbench-J操作Redshift时也碰到过一模一样的锁表问题,那种频繁被阻塞的滋味真的太闹心了!结合自己踩坑的经验和工具配置,给你两个直接有效的解决方案:
一、禁用自动添加BEGIN语句
这是从根源上解决问题的办法:
- 打开SQLWorkbench-J的Preferences(偏好设置),导航到
SQL Execution>Transactions选项卡 - 找到
Auto-start transactions for data changes这个复选框,把它取消勾选这个设置原本是为了自动把数据变更语句(INSERT/UPDATE/DELETE)包裹在事务里,但它会误触发到SELECT这类只读语句,导致不必要的事务开启,进而引发锁表
- 额外建议:开启
Execute each statement in its own transaction选项,这样每条语句执行后都会自动提交,彻底避免事务挂起占用锁资源的情况
二、配置自动提交(等效自动添加END TRANSACTION)
如果不想完全禁用自动事务开启,也可以通过自动提交让事务自动结束:
- 在SQLWorkbench-J主界面的工具栏里,找到Auto Commit按钮(一般是带对勾的图标),点击开启
- 或者在偏好设置的
SQL Execution板块,找到Auto commit by default选项并设置为开启状态
开启后,每条语句执行完成后都会自动执行COMMIT;(和END TRANSACTION效果一致),不会让事务一直占着锁不放
针对Redshift的额外提醒
Redshift的快照隔离机制对只读查询很友好,只要事务及时提交,SELECT语句不会持有表锁。所以建议只读查询保持在自动提交模式下运行,只有在需要批量执行数据变更时,再手动写BEGIN开启事务,完成后手动COMMIT即可。
内容的提问来源于stack exchange,提问作者subhahan shaik
相关产品推荐
相关产品推荐

