|
Multi-threaded applications |
Top Previous Next |
|
マルチスレッドアプリケーションでは、複数のスレッドがデータベースにアクセスするかもしれません。時にユーザーがアプリケーションを使っているバックグラウンドで処理を行う必要があります。マルチスレッドはアプリケーションのクライアント、ネットワークそしてサーバーのリソース使用を最適化するために使われます。最後にマルチスレッドはもしアプリケーションがサーバー上で長く走っているクエリーをブレイクするために必要となります。 マルチスレッドアプリケーションのために基本的に2つの設定があります: マルチスレッド、シングルーセッションデータベースアクセス この場合、複数のスレッドはひとつのTOracleSession に同時にアクセスします。データーベースサーバーは一度に特定のセッションに対してひとつのリクエストしか扱えないので、全てのデータベースアクセスは順番に並べられなければなりません。これはTOracleSession.ThreadSafe プロパティをtrueに設定することで実現されます。結果として、全てのスレッドはデータベースにアクセスする時にお互いをブロックします。この設定はもしスレッドがネットワークとサーバー処理の合計に比較して多量のクライアント処理を行う時にのみ意味をなします。 セッション管理はこの設定内では特別な配慮が必要です。ログオン・ログオフし、トランザクション制御やセッション制御命令をするスレッドは、これらのアクションを同期させるために他のスレッド管理している必要があります。 マルチスレッド、マルチーセッションデータベースアクセス この場合、それぞれのスレッドはそれぞれに専用のTOracleSessionを使います。 クライアント、ネットワークそしてサーバーはこれらのスレッドに対して並行に処理を行えます。これによりリソース使用は最適化され、アプリケーションはブロックしません。特別なプロパティを設定する必要はなく、セッション管理は(クリア)空いています。これは明らかにマルチスレッドアプリケーションに対してより好まれる設定ですが、常に使えるとは限りません。 どちらの設定に対しても、TOracleQuery, TOraclePackage とTOracleDataSetへのアクセスは常に単一のスレッドに制限されます。 あらゆる実行中のクエリーは、TOracleSession.BreakExecutionメソッドを呼び出すことで中断されます。これによって、セッション内の現在実行中のクエリーに対して"ORA-01013, user requested cancel of current operation"例外を起こします。BreakExecutionは全てのバージョンのPersonal Oracleで動くとは限らないことに注意してください。 |