本帖最后由 loukcn 于 2012-03-13 16:30:29 编辑

解决方案 »

  1.   

    貌似设置超时的问题上,统一的不是很好,给具体问题具体分析了.
    尝试一下DriverManager.setLoginTimeout();
      

  2.   

    其实是和AS400的数据库连接,是基于3千万条以上的记录数,加上条件直接在400上查询都得将近一个小时左右,要是通过JDBC访问数据库,400会等不到结果就把连接给掐了。按照之前在网上查询的结果说是发送虚查询来保持连接,但是没人说怎么做到。所以求助来了。
      

  3.   


    说明你的程序查询有问题啊,从3000万条数据里查100条数据,如果数据库表索引、优化做的好,sql写的没问题,应该就是几秒的事情........
      

  4.   

    可能是我解释的不明确,是从超过3000万的数据量里按照某个字段group by,再把某个字段sum,最终得到成100来条汇总结果,这3000万条记录是得挨个过一遍看是否符合where条件的
      

  5.   

    再补充一下,有个开源的ETL工具 kettle 就能保持和400的连接直到等到结果返回,不知道是怎么实现的
      

  6.   

    而且我觉得像其他大型数据库也会有这种情况的发生,一条sql下去,3、4个小时才能出来结果
      

  7.   

    那只能说明你的sql语句没优化好,造成全局查询了
    正常情况下索引设计,sql语句优化的话,也不会太慢
      

  8.   

    问题结决了,应该是和服务器的物理连接连接长时间等待时被路由器给断了连接。我就加了个进程每隔120000ms 就ping 一下目的服务器,保持物理连接始终处于活动状态。