ヘッダーをスキップ
Oracle® Call Interfaceプログラマーズ・ガイド
11g リリース2 (11.2)
E50264-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

C OCI関数のサーバー・ラウンドトリップ

この付録では、様々なOCIコール中に発生するサーバー・ラウンドトリップについて説明します。サーバー・ラウンドトリップ は、クライアントからサーバーに送信し、クライアントに戻るトリップとして定義されます。この情報は、プログラマがアプリケーションで特定の作業を実行するための最も効率的な方法を判断するのに役立ちます。

この付録では、次の項目について説明します。

サーバー・ラウンドトリップの概要

この付録では、様々なOCIコール中に発生するサーバー・ラウンドトリップについて説明します。この情報は、アプリケーションで特定の作業を実行するための最も効率的な方法を判断するのに役立ちます。

リレーショナル関数のラウンドトリップ

各OCIリレーショナル関数に必要なサーバー・ラウンドトリップ回数のリストを表C-1に示します。

表C-1 リレーショナル操作用のサーバー・ラウンドトリップ

関数 サーバー・ラウンドトリップ回数

OCIBreak()

1

OCIDBShutdown()

1

OCIDBStartup()

1

OCIEnvCreate()

0

OCIEnvInit()

0

OCIErrorGet()

0

OCIInitialize()

0

OCILdaToSvcCtx()

0

OCILogoff()

1

OCILogon()

1

OCILogon2()

接続プールまたはセッション・プール: OCISessionGet()と同じ

通常: 2 (認証とTAF状況に基づく)

OCIPasswordChange()

1

OCIPing()

1

OCIReset()

0

OCIServerAttach()

1

OCIServerDetach()

1

OCIServerVersion()

1

OCISessionBegin()

1

OCISessionEnd()

1

OCISessionGet()

セッション・プール: 0 (ログイン数の増分)。接続プール: 1から(1+ (増分 * ログイン数))。キャッシュ・ヒットに依存: 1 (ユーザー・セッションの場合)、オプションの増分 (1次セッションの場合)。

通常: 1ログイン

OCISessionPoolCreate()

sessMin*ログイン数

OCISessionPoolDestroy()

キャッシュ内のセッション数*ログオフ数

OCISessionRelease()

セッション・プーリング: 0。明示的セッションがフラグ・セットを破棄したときは例外。

通常: 1ログイン

OCIStmtExecute()

1

OCIStmtFetch()

0または1

OCIStmtFetch2()

プリフェッチで0。それ以外は1。

OCIStmtGetPieceInfo()

1

OCIStmtPrepare()

0

OCIStmtSetPieceInfo()

0

OCISvcCtxToLda()

0

OCITerminate()

1

OCITransCommit()

1

OCITransDetach()

1

OCITransForget()

1

OCITransPrepare()

1

OCItransRollback()

1

OCITransStart()

1

OCIUserCallbackGet()

0

OCIUserCallbackRegister()

0


LOB関数のラウンドトリップ

OCILobコールで発生するサーバー・ラウンドトリップ回数のリストを表C-2に示します。


注意:

ラウンドトリップの回数を最低限に抑えるために、LOBのデータ・インタフェースを使用できます。CLOB列の文字データまたはBLOB列のRAWデータをバインドまたは定義できます。


関連項目:


ラウンドトリップの回数が0または1のコールの場合、LOBバッファリングが有効であり、要求がクライアントで完了すれば、ラウンドトリップは発生しません。

表C-2 OCILobコール用のサーバー・ラウンドトリップ

関数 サーバー・ラウンドトリップ回数

OCILobAppend()

1

OCILobArrayRead()

1

OCILobArraywrite()

1

OCILobAssign()

0

OCILobCharSetForm()

0

OCILobCharSetId()

0

OCILobClose()

1

OCILobCopy()

1

OCILobCopy2()

1

OCILobCreateTemporary()

1

OCILobDisableBuffering()

0

OCILobEnableBuffering()

0

OCILobErase()

1

OCILobErase2()

1

OCILobFileClose()

1

OCILobFileCloseAll()

1

OCILobFileExists()

1

OCILobFileGetName()

0

OCILobFileIsOpen()

1

OCILobFileOpen()

1

OCILobFileSetName()

0

OCILobFlushBuffer()

このLOBのバッファにある変更ページごとに1

OCILobFreeTemporary()

1

OCILobGetChunkSize()

1

OCILobGetLength()

1

OCILobGetLength2()

1

OCILobGetStorageLimit()

1

OCILobIsEqual()

0

OCILobIsOpen()

1

OCILobIsTemporary()

0

OCILobLoadFromFile()

1

OCILobLoadFromFile2()

1

OCILobLocatorAssign()

ソース・ロケータまたは宛先ロケータのいずれかが一時LOBを参照している場合は1ラウンドトリップ

OCILobLocatorIsInit()

0

OCILobOpen()

1

OCILobRead()

0または1

OCILobRead2()

0または1

OCILobTrim()

1

OCILobTrim2()

1

OCILobWrite()

0または1

OCILobWrite2()

0または1

OCILobWriteAppend()

0または1

OCILobWriteAppend2()

0または1


オブジェクト関数およびキャッシュ関数のラウンドトリップ

オブジェクト関数およびキャッシュ関数に必要なサーバー・ラウンドトリップ回数のリストを表C-3に示します。これらの値では、キャッシュがウォームな状態であると想定しています。つまり、アプリケーションで必要な型記述子オブジェクトがすでにロードされているということです。

表C-3 オブジェクト関数およびキャッシュ関数用のサーバー・ラウンドトリップ

関数 サーバー・ラウンドトリップ回数

OCICacheFlush()

1

OCICacheFree()

0

OCICacheRefresh()

1

OCICacheUnmark()

0

OCICacheUnpin()

0

OCIObjectArrayPin()

1

OCIObjectCopy()

0

OCIObjectExists()

0

OCIObjectFlush()

1

OCIObjectFree()

0

OCIObjectGetInd()

0

OCIObjectGetObjectRef()

0

OCIObjectGetTypeRef()

0

OCIObjectIsDirty()

0

OCIObjectIsLocked()

0

OCIObjectLock()

1

OCIObjectMarkDelete()

0

OCIObjectMarkDeleteByRef()

0

OCIObjectMarkUpdate()

0

OCIObjectNew()

0

OCIObjectPin()

1。必要なオブジェクトがすでにキャッシュにある場合は0。

OCIObjectPinCountReset()

0

OCIObjectPinTable()

1

OCIObjectRefresh()

1

OCIObjectUnmark()

0

OCIObjectUnmarkByRef()

0

OCIObjectUnpin()

0


記述操作のラウンドトリップ

OCIDescribeAny()OCIAttrGet()およびOCIParamGet()に必要なサーバー・ラウンドトリップ回数のリストを表C-4に示します。

表C-4 記述操作用のサーバー・ラウンドトリップ

関数 サーバー・ラウンドトリップ回数

OCIAttrGet()

型オブジェクトがオブジェクト・キャッシュにない場合は、型を記述するために2ラウンドトリップ。

各コレクション要素、各型属性、メソッドまたはメソッド引数記述子につき1ラウンドトリップ。 コレクション要素、型属性またはメソッド引数に対してOCI_ATTR_TYPE_NAMEまたはOCI_ATTR_SCHEMA_NAMEを使用している場合は、さらに1ラウンドトリップ。

最初のOCIAttrGet()コールの後で、オブジェクト・キャッシュに記述されるすべての型オブジェクトがすでにある場合は0。

OCIDescribeAny()

型記述子オブジェクトのREF取得のために1ラウンドトリップ。

OCIParamGet()

0


データ型マッピング関数および操作関数のラウンドトリップ

データ型マッピング関数および操作関数のラウンドトリップ回数のリストを表C-5に示します。表内のアスタリスクは、特定の接頭辞を持つすべての関数のサーバー・ラウンドトリップ回数が同じになることを示します。たとえば、OCINumberAdd()OCINumberPower()およびOCINumberFromText()では、サーバー・ラウンドトリップはすべて0となります。

表C-5 データ型の操作関数用のサーバー・ラウンドトリップ

関数 サーバー・ラウンドトリップ回数

OCIColl*()

0。コレクションがキャッシュにロードされていない場合は1。

OCIDate*()

0

OCIIter*()

0。コレクションがキャッシュにロードされていない場合は1。

OCINumber*()

0

OCIRaw*()

0

OCIRef*()

0

OCIString*()

0

OCITable*()

0。ネストした表がキャッシュにロードされていない場合は1。


任意型関数および任意データ関数のラウンドトリップ

任意型関数および任意データ関数に必要なサーバー・ラウンドトリップ回数のリストを表C-6に示します。リストされていない関数は、ラウンドトリップを生成しません。

表C-6 任意型関数および任意データ関数のサーバー・ラウンドトリップ

関数 サーバー・ラウンドトリップ回数

OCIAnyDataAttrGet()

0。型情報がキャッシュにロードされていない場合は1。

OCIAnyDataAttrSet()

0。型情報がキャッシュにロードされていない場合は1。

OCIAnyDataCollGetElem()

0。型情報がキャッシュにロードされていない場合は1。


その他のローカル関数

ローカルであるため、サーバー・ラウンドトリップが不要な関数のリストを表C-7に示します。

表C-7 ローカルに処理される関数

ローカル関数名 注意

OCIAttrGet()

オブジェクト型を記述すると、このコールは、型記述子オブジェクトをフェッチするためにラウンドトリップを1回行います。

OCIAttrSet()

 


OCIBindArrayOfStruct()

 


OCIDefineArrayOfStruct()

 


OCIBindByName()

 


OCIBindByPos()

 


OCIBindDynamic()

 


OCIBindObject()

 


OCIDefineByPos()

 


OCIDefineDynamic()

 


OCIDefineObject()

 


OCIDescriptorAlloc()

 


OCIDescriptorFree()

 


OCIEnvCreate()

 


OCIEnvInit()

 


OCIErrorGet()

 


OCIHandleAlloc()

 


OCIHandleFree()

 


OCILdaToSvcCtx()

 


OCIStmtGetBindInfo()

 


OCIStmtPrepare()

 


OCIStmtRelease()


OCIStmtPrepare2()


OCISvcCtxToLda()