本帖最后由 huangjingxun 于 2011-04-14 14:18:09 编辑

解决方案 »

  1.   

    问题就是存储过程只有短短的几句话,我也发出来了,实在不知道还能怎么优化了,用PLSQL来反复跑存储过程没有出现越来越慢的情况,但用JDBC就会越来越慢。
    我把调用存储过程的接口发出来大家看看吧,就这么简单的几句:
    public void execProcedure() {    try {
          statement = odb.getConnection().prepareCall(sql);      if (null == statement)
            System.exit(-1);      statement.setString(1, dataType);
          statement.setInt(2, serverType);
          statement.setInt(3, syncMode);
          statement.setString(4, userServerIP);
          statement.setInt(5, userServerPort);
          statement.setString(6, userServerName);
          statement.setString(7, userServerPassword);
          statement.setString(8, filePathName);
          statement.setString(9, fileName);
          statement.setInt(10, fileLength);
          statement.setString(11, device);
          statement.setTimestamp(12, new
    java.sql.Timestamp(System.currentTimeMillis()));
          statement.setString(13, enteruser);
          statement.setString(14, note);
          statement.setString(15, index1);
          statement.setString(16, index2);
          statement.setString(17, index3);
          statement.setString(18, index4);
          statement.setString(19, fileGroup);
          statement.setString(20, fileGroupId);
          statement.registerOutParameter(21, java.sql.Types.NUMERIC);
          statement.registerOutParameter(22, java.sql.Types.VARCHAR);
          long Time = System.currentTimeMillis();
          statement.execute();
          System.out.print(new DecimalFormat("0.000").format((double) (System
              .currentTimeMillis() - Time) / 1000)
              + " ");
          ret = statement.getInt(21);
          jobID = statement.getString(22);
        } catch (SQLException e) {
          // TODO: handle exception
          e.printStackTrace();
        } finally {
          if (statement != null)
            try {
              statement.close();
              statement = null;
            } catch (SQLException e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
            }
        }
      }
      

  2.   

    哦,还要补充下,不管是跑1次存储过程,新创建一个statement;还是用一个statement一直跑,都会越来越慢,真是困惑了。我猜想难道JDBC驱动有BUG?
      

  3.   

    经过大量测试,发现是用了oracle10G RAC就有这情况,不用RAC一切正常,不知可有难兄难弟?