C OCI関数のサーバー・ラウンドトリップ
この付録では、様々なOCIコール中に発生するサーバー・ラウンドトリップについて説明します。
この情報は、プログラマがアプリケーションで特定の作業を実行するための最も効率的な方法を判断するのに役立ちます。サーバー・ラウンドトリップ は、クライアントからサーバーに送信し、クライアントに戻るトリップとして定義されます。
-
配列のデータ操作言語(DML)の機能拡張
-
コミット要求を実行に対応付けてラウンドトリップを減らす機能
-
透過的プリフェッチ・バッファを使用して問合せを最適化し、ラウンドトリップを減らす機能
関連項目:
-
サーバー・ラウンドトリップを減らすためのヒントの概要およびより具体的な情報は、「OCIでのSQL文の使用を参照してください。
-
大量のデータを更新または挿入する場合に、データベースへのラウンドトリップの回数を大幅に削減するには、「OCI配列インタフェース」を参照してください。
-
サーバー・ラウンドトリップを最小限にするには、「プリフェッチ・カウントの設定について」を参照してください。
この付録には、次の項が含まれます。
C.1 リレーショナル関数のラウンドトリップ
各OCIリレーショナル関数のサーバー・ラウンドトリップの回数について説明します。
各OCIリレーショナル関数に必要なサーバー・ラウンドトリップ回数のリストを表C-1に示します。
表C-1 リレーショナル操作用のサーバー・ラウンドトリップ
関数 | サーバー・ラウンドトリップ回数 |
---|---|
|
1 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
1 |
|
接続プールまたはセッション・プール: OCISessionGet()と同じ 通常: 2 (認証とTAF状況に基づく) |
|
1 |
|
1 |
|
0 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
セッション・プール: 0 (ログイン数の増分)。接続プール: 1から(1+ (増分 * ログイン数))。キャッシュ・ヒットに依存: 1 (ユーザー・セッションの場合)、オプションの増分 (1次セッションの場合)。 通常: 1ログイン |
|
sessMin*ログイン数 |
|
キャッシュ内のセッション数*ログオフ数 |
|
セッション・プーリング: 0。明示的セッションがフラグ・セットを破棄したときは例外。 通常: 1ログイン |
|
1 |
|
0または1 |
|
プリフェッチで0。それ以外は1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
0 |
|
0 |
C.2 LOB関数のラウンドトリップ
各OCI LOB関数のサーバー・ラウンドトリップ回数について説明します。
OCILob
コールで発生するサーバー・ラウンドトリップ回数のリストを表C-2に示します。
ノート:
ラウンドトリップの回数を最低限に抑えるために、LOBのデータ・インタフェースを使用できます。CLOB
列の文字データまたはBLOB
列のRAW
データをバインドまたは定義できます。
ラウンドトリップの回数が0または1のコールの場合、LOBバッファリングが有効であり、要求がクライアントで完了すれば、ラウンドトリップは発生しません。
表C-2 OCILobコール用のサーバー・ラウンドトリップ
関数 | サーバー・ラウンドトリップ回数 |
---|---|
|
1 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
|
1 |
|
1 |
|
1 |
|
1 |
|
0 |
|
0 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
0 |
|
1 |
|
1 |
|
0 |
|
このLOBのバッファにある変更ページごとに1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
1 |
|
0 |
|
1 |
|
0 |
|
1 |
|
1 |
|
ソース・ロケータまたは宛先ロケータのいずれかが一時LOBを参照している場合は1ラウンドトリップ |
|
0 |
|
1 |
|
0または1 |
|
0または1 |
|
1 |
|
1 |
|
0または1 |
|
0または1 |
|
0または1 |
|
0または1 |
関連項目:
-
INSERT
文およびUPDATE
文の使用方法および使用例は、「LOBデータのバインドについて」を参照してください - LOBデータの定義について
(
SELECT
文の使用方法および使用例)
C.3 オブジェクト関数およびキャッシュ関数のラウンドトリップ
各OCIオブジェクト関数およびキャッシュ関数のサーバー・ラウンドトリップ回数について説明します。
オブジェクト関数およびキャッシュ関数に必要なサーバー・ラウンドトリップ回数のリストを表C-3に示します。これらの値では、キャッシュがウォームな状態であると想定しています。つまり、アプリケーションで必要な型記述子オブジェクトがすでにロードされているということです。
表C-3 オブジェクト関数およびキャッシュ関数用のサーバー・ラウンドトリップ
関数 | サーバー・ラウンドトリップ回数 |
---|---|
|
1 |
|
0 |
|
1 |
|
0 |
|
0 |
|
1 |
|
0 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1 |
|
0 |
|
0 |
|
0 |
|
0 |
|
1。必要なオブジェクトがすでにキャッシュにある場合は0。 |
|
0 |
|
1 |
|
1 |
|
0 |
|
0 |
|
0 |
C.4 記述操作のラウンドトリップ
各OCI操作関数のサーバー・ラウンドトリップ回数について説明します。
OCIDescribeAny()
、OCIAttrGet()
およびOCIParamGet()
に必要なサーバー・ラウンドトリップ回数のリストを表C-4に示します。
表C-4 記述操作用のサーバー・ラウンドトリップ
関数 | サーバー・ラウンドトリップ回数 |
---|---|
|
型オブジェクトがオブジェクト・キャッシュにない場合は、型を記述するために2ラウンドトリップ。 各コレクション要素、各型属性、メソッドまたはメソッド引数記述子につき1ラウンドトリップ。 コレクション要素、型属性またはメソッド引数に対して 最初の |
|
型記述子オブジェクトの |
|
0 |
C.5 データ型マッピング関数および操作関数のラウンドトリップ
各OCIデータ型マッピング関数および操作関数のサーバー・ラウンドトリップ回数について説明します。
データ型マッピング関数および操作関数のラウンドトリップ回数のリストを表C-5に示します。表内のアスタリスクは、特定の接頭辞を持つすべての関数のサーバー・ラウンドトリップ回数が同じになることを示します。たとえば、OCINumberAdd()
、OCINumberPower()
およびOCINumberFromText()
では、サーバー・ラウンドトリップはすべて0となります。
表C-5 データ型の操作関数用のサーバー・ラウンドトリップ
関数 | サーバー・ラウンドトリップ回数 |
---|---|
|
0。コレクションがキャッシュにロードされていない場合は1。 |
|
0 |
|
0。コレクションがキャッシュにロードされていない場合は1。 |
|
0 |
|
0 |
|
0 |
|
0 |
|
0。ネストした表がキャッシュにロードされていない場合は1。 |
C.6 任意型関数および任意データ関数のラウンドトリップ
各OCI任意型関数および任意データ関数のサーバー・ラウンドトリップ回数について説明します。
任意型関数および任意データ関数に必要なサーバー・ラウンドトリップ回数のリストを表C-6に示します。リストされていない関数は、ラウンドトリップを生成しません。
表C-6 任意型関数および任意データ関数のサーバー・ラウンドトリップ
関数 | サーバー・ラウンドトリップ回数 |
---|---|
|
0。型情報がキャッシュにロードされていない場合は1。 |
|
0。型情報がキャッシュにロードされていない場合は1。 |
|
0。型情報がキャッシュにロードされていない場合は1。 |
C.7 その他のローカル関数
OCIのその他のローカル関数それぞれのサーバー・ラウンドトリップ回数について説明します。
ローカルであるため、サーバー・ラウンドトリップが不要な関数のリストを表C-7に示します。
表C-7 ローカルに処理される関数
ローカル関数名 | ノート |
---|---|
|
オブジェクト型を記述すると、このコールは、型記述子オブジェクトをフェッチするためにラウンドトリップを1回行います。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|