研究背景:在加解密近5000w数据量的过程中,取消加解密时,能够立即回滚
通过jdbc进行close释放资源慢的原因
public void close() throws SQLException {
if (!this.closed) {
try {
if (!this.getConnection().isClosed()) {
while(true) {
if (this.next()) {
continue;
}
}
}
} finally {
this.closed = true;
this.statement = null;
}
}
}
调用close()时,会进行遍历整个结果集,使游标置于末尾,才会进行关闭。
如果查询语句返回的结果集中数据量巨大,则整个关闭过程就会延迟4-8分钟。
通过杀死连接的方式,达到快速释放资源
// 查询所有连接
SHOW PROCESSLIST;
// 查询当前连接的ID
SELECT CONNECTION_ID();
// 杀死ID为12的连接
KILL 12;
总结
面对大数据量下,无法立即释放资源的情况下,可以采用该方式。
除此之外,按照规范,应该通过JDBC的方法进行释放,保证连接使用的安全性。