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 で利用可能な例はありますか?