美文网首页
探究关闭JtdsResultSet耗时长的问题

探究关闭JtdsResultSet耗时长的问题

作者: 血色彼岸花_703d | 来源:发表于2018-12-21 17:22 被阅读0次

    问题描述

    做项目时,偶然碰到的一次关闭ResultSet时特别慢,经过一些列排除,仅当我对SqlServer操作时出现的问题。因为连接Sqlserver使用的是Jtds驱动,主要是为了设置网络超时间,官方的Sqlserver是无法设置的。使用PrepareStatement进行查询,返回结果是ResultSet,此次查询的数据量很大,大概3000万条数据,在未对结果集中的数据进行遍历时,因为业务场景中另一部分出现问题,现在需要关闭ResultSet,此时调用close()方法。按照正常的情况,Resultset会立即被释放,并不会消耗很长时间,但由于使用的是jtds驱动,会调用ResultSet的子类JtdsResultSet中的close()方法。

    JtdsResultSet.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;
            }
        }
    }
    

    从上述代码中可以看出当JtdsResultSet.close()时,会遍历剩余的所有结果集,这需要耗费相当多的时间和资源进行处理,显然这种设计缺陷性很大,而且与官方对关闭ResultSet的解释有所冲突。

    总结

    目前暂无特别好的方法来处理这种因jtds驱动所引发的ResultSet关闭耗时的问题,期待官方解决,或者不使用jtds驱动。

    相关文章

      网友评论

          本文标题:探究关闭JtdsResultSet耗时长的问题

          本文链接:https://www.haomeiwen.com/subject/pelvkqtx.html