アプリケーションで、TimesTen問合せオプティマイザによる実行計画の生成を変更できるようにします。フラグを設定して、様々なアクセス方法の使用を有効または無効にします。このコールによって加えられた変更は、文を準備するときに有効になります。影響を受けるのは、現在のトランザクションでこれから実行される、ODBC関数SQLPrepareおよびSQLExecDirectへのすべてのコール、またはJDBCメソッドConnection.prepareCallおよびStatement.executeへのすべてのコールです。オプティマイザのすべてのフラグは、トランザクションがコミットまたはロールバックされた時点でそれぞれのデフォルト値にリセットされます。AutoCommitがオンになっている状態でオプティマイザ・フラグを設定しても、各文は固有のトランザクション内で実行されるため、そのフラグは無視されます。
アクセス制御がTimesTenのインスタンスに対して有効である場合、このプロシージャには権限は必要ありません。
ttOptSetFlag ('optFlag', optVal)
ttOptSetFlagには、次のパラメータがあります。
オプティマイザ・フラグを設定する場合は、次の文字列を使用します。大文字と小文字は区別されません。
文字列AllFlags
は、すべてのオプティマイザ・フラグを示すために使用され、文字列Default
は、デフォルトのフラグを示すために使用されます。Default
には、GenPlan
フラグ以外のすべてのオプティマイザ・フラグが含まれます。
各フラグの値は1または0です。
たとえば、アプリケーションで、中間結果を格納する計画をオプティマイザが選択できないようにできます。
ttOptSetFlag ( 'TmpTable', 0 )
同様に、アプリケーションでMergeJoin
のプリファレンスを指定できます。
ttOptSetFlag ( 'NestedLoop', 0 )
2つ目の例では、マージ結合が不可能な場合(たとえば、マージ結合条件がない場合)、オプティマイザはネステッド・ループ・ジョインを選択できます。同様に、オプティマイザが、表スキャンを回避するアプリケーション・リクエストを満たすことができない場合もあります(Scan
フラグが0に設定されている場合)。
特定の処理が特定の計画手順で禁止されると指定すること、または特定の2つの表では必ず特定の結合方法が使用されると指定することはできません。同様に、特定の索引が使用されると指定すること、または特定の条件を評価するためにハッシュ索引が使用されると指定することもできません。各処理は、完全に許可されているか、完全に制限されているかのいずれかです。
コマンドが準備されている場合は、現在のオプティマイザ・フラグ、索引ヒントおよび結合順序はコマンドのコンパイル済形式の構造で保持され、システムによってそのコマンドが再準備されるときに使用されます。準備された文の例については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』のTimesTen問合せオプティマイザに関する説明を参照してください。
RowLock
およびTblLock
の両方が無効な場合、TimesTenでは行ロックが使用されます。RowLock
およびTblLock
の両方が有効な場合、TimesTenでは、パフォーマンスがより高い方のロック・スキームが使用されます。
TblLockの状態
|
RowLockの状態
|
オプティマイザへの影響
|
---|---|---|
無効 | 無効 | 行レベル・ロックを使用します。 |
有効 | 無効 | 表レベル・ロックを使用します。 |
無効 | 有効 | 行レベル・ロックを使用します。 |
有効 | 有効 | 行レベル・ロックまたは表レベル・ロックをオプティマイザが選択します。 |
問合せによって表の行の重要な部分がアクセスされる場合、またはその表に同時アクセスしているトランザクションの数が非常に少ない場合(あるいはその両方)に、表レベル・ロックは有効です。
ttOptSetFlagは結果を返しません。
CALL ttOptSetFlag ( 'TmpHash', 1 );
ttOptEstimateStats
ttOptGetFlag
ttOptGetOrder
ttOptSetColIntvlStats
ttOptSetOrder
ttOptSetTblStats
ttOptUpdateStats
ttOptUseIndex