6

C++ で OCCI を使用して、Oracle からデータを取得しています。コードはうまく機能しますが、パフォーマンスが低下していることに気付きました。これは、rset->next() 反復で一部の計算に時間がかかるために発生します。この遅延の影響は、Oracle 接続プールで 1 つの接続がビジー状態になることです。同時に要求が同じ計算を要求する場合、プール内のおそらくすべての接続が BUSY になります。

     Statement *stmt = conn->createStatement (sqlQuery);

      ResultSet *rset = stmt->executeQuery ();
      while (rset->next ())
      {
        //Slow computation takes time
        compute()
      }

      stmt->closeResultSet (rset);

      conn->terminateStatement (stmt);
      env->terminateConnection (conn);

だから私の質問は: コピー後に接続を閉じ、接続を解放した後に計算を行うために、Occi::ResultSet を (共有ポインターを使用して) コピーできますか?

go_to_oracle( ResultSet &result) {
 Statement *stmt = conn->createStatement (sqlQuery);

  ResultSet *rset = stmt->executeQuery ();

  copy_rset_to_result;


  stmt->closeResultSet (rset);

  conn->terminateStatement (stmt);
  env->terminateConnection (conn);
}

my_method() {

 ResultSet *result = NULL
 go_to_oracle(result);
 //here connection is closed, but we have the data
 compute(result) // do this without have connection occupied

}

GitHub で利用可能な例はありますか?

4

2 に答える 2