ttOptSetFlag

このプロシージャは、トランザクションがコミットまたはロールバックされたときに、すべてのオプティマイザ・フラグをそれぞれのデフォルト値にリセットします。これにより、TimesTen問合せオプティマイザによる実行計画の生成が変更されます。フラグを設定して、様々なアクセス方法の使用を有効または無効にします。このコールによって加えられた変更は、文を準備するときに有効になり、それ以降に現在のトランザクションで実行される、ODBC関数SQLPrepareおよびSQLExecDirectへのすべてのコール、またはJDBCメソッドConnection.prepareCallおよびStatement.executeへのすべてのコールが影響を受けます。AutoCommitがオンのときにオプティマイザ・フラグセットされた場合、それらは無視されます。

必要な権限

このプロシージャには、権限は必要ありません。

TimesTen ScaleoutおよびTimesTen Classicでの使用

このプロシージャは、TimesTen Classicでサポートされています。

TimesTen Scaleoutアプリケーションでこの組込みプロシージャをコールできます。

TimesTen Scaleoutの場合、このプロシージャは、コール元の要素に対してローカルに実行されます。

関連ビュー

このプロシージャには、次の関連ビューがあります。

SYS.GV$OPT_FLAG

SYS.V$OPT_FLAG

構文

ttOptSetFlag('optFlag', optVal)

パラメータ

ttOptSetFlagには、次のパラメータがあります。

パラメータ 説明

optFlag

TT_CHAR (32) NOT NULL

オプティマイザ・フラグの名前。

optVal

TT_INTEGERNOT NULL

オプティマイザ・フラグの値。次の「オプティマイザ・フラグ」に記載されている場合を除き、通常、値は0 (無効/禁止)または1 (有効/許可)になります。

オプティマイザ・フラグ

オプティマイザ・フラグを設定する場合は、次の文字列を使用します。大文字と小文字は区別されません。

フラグ 説明

BranchAndBound

ブランチおよびバインドされた最適化を有効または無効にします。有効な場合、TimesTenによって、最適化プロセスの冒頭の0フェーズで、問合せ計画の最大コストが計算されます。無効な場合、TimesTenはこのコスト分析を実行しません。

DynamicLoadEnable

Oracle DatabaseからTimesTenの動的キャッシュ・グループへの単一キャッシュ・インスタンスの動的ロードを有効または無効にします。デフォルトでは、Oracle Databaseからのデータの動的ロードが有効になっています。

DynamicLoadErrorMode

動的ロード・エラー・モードを有効または無効にします。このモードにより、TimesTen動的キャッシュ・グループに対する透過的ロード処理が失敗した場合のエラー・メッセージの出力が制御されます。デフォルトでは無効です。

DynamicLoadMultiplePKs

Oracle Databaseからルート表のみを含むTimesTen動的キャッシュ・グループへの複数のキャッシュ・インスタンスの動的ロード(複数の主キーを指定)を有効または無効にします。デフォルトでは、Oracle Databaseからの複数の主キーを使用した複数のキャッシュ・インスタンスの動的ロードは有効になっています。

DynamicLoadRootTbl

Oracle Databaseからルート表のみを含むTimesTen動的キャッシュ・グループへの複数のキャッシュ・インスタンスの動的ロード(複数の主キーを指定しない)を有効または無効にします。デフォルトでは、Oracle Databaseからの複数のキャッシュ・インスタンスの動的ロードは無効になっています。

FirstRow

SELECTUPDATEまたはDELETEの最初の行の最適化を有効または無効にします。SQLキーワードのFIRSTがSQL文で使用された場合、これはオプティマイザ・ヒントより優先されます。キーワードFIRSTは、最初の行の最適化を有効にします。

ForceCompile

強制コンパイルを有効または無効にします。有効な場合、TimesTenは問合せを再コンパイルし、毎回、問合せ計画を再生成します。無効な場合、問合せ計画が使用可能な場合でも、TimesTenはコンパイルを実行しません。

GenPlan

残りのトランザクションでのPLAN表のエントリの作成を有効または無効にします。

例は、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「計画をシステムPLAN表に格納するようにTimesTenに指示する方法」を参照してください。

Hash

索引付けされた表スキャンで、既存のハッシュ索引の使用を有効または無効にします。

HashGb

ハッシュ・グループの使用を有効または無効にします。

IndexedOR

シリアライズ表スキャンを有効または無効にします。無効な場合、TimesTenはIN...リスト条件にシリアライズ表スキャンを使用し、それ以外の場合はOR条件に複数索引スキャンを使用します。

MergeJoin

マージ結合の使用を有効または無効にします。

NestedLoop

2つの表を結合する一般的な方法を示します。

NoRemRowIdOpt

RowIDの内部生成を有効または無効にします。有効な場合、最適化が目的でRowIDが内部的に生成されることはありません。無効な場合、行がSELECTリストにない場合でも、RowIDは内部的に生成されます。

PassThrough

TimesTen Cacheアプリケーションのパススルー・レベルを一時的に変更します。パススルー・レベルはいつでも設定が可能で、変更はただちに有効になります。このフラグでサポートされる値は次のとおりです。

0 (デフォルト) - SQL文はTimesTenに対してのみ実行されます。

1 - TimesTen以外の1つ以上の表を参照していないかぎり、INSERTUPDATEおよびDELETE文はTimesTenに対して実行されます。TimesTen以外の1つ以上の表を参照している場合は、Oracle Databaseに渡されます。DDL文はTimesTenに対して実行されます。その他の文がTimesTenで構文エラーを生成する場合、またはその他の文で参照されている1つ以上の表がTimesTenに存在しない場合に、その他の文はOracle Databaseに渡されます。

2 - 読取り専用キャッシュ・グループまたはREADONLYキャッシュ表属性を持つユーザー管理キャッシュ・グループの表に対して実行されたINSERT文、UPDATE文およびDELETE文は、Oracle Databaseに渡されます。その他のキャッシュ・グループ・タイプに対するパススルー動作は、PassThrough=1と同じです。

3 : すべての文がOracleデータベースにパススルーされます。

Range

索引付けされた表スキャンで、既存の範囲索引の使用を有効または無効にします。

Rowid

Row IDの使用を有効または無効にします。

RowLock

オプティマイザによる行ロックの使用を許可または禁止します。

Scan

全表スキャンを示します。

ShowJoinOrder

オプティマイザ・スキャンでの表の結合順序を表示します。

TblLock

オプティマイザによる表ロックの使用を有効または無効にします。

TmpHash

一時的なハッシュ・スキャンの使用を有効または無効にします。これは、文の評価で使用するために実行時に作成される索引です。索引の作成には時間がかかりますが、結合条件を評価する場合の時間を節約できます。

TmpRange

一時的な範囲スキャンを実行します。また、マージ結合で値をソートするためにも使用できます。索引の作成には時間がかかりますが、結合条件を評価する場合の時間を節約できます。

TmpTable

中間結果を一時表に格納します。この処理は、結合問合せでの条件の評価を繰り返し実行することを回避したり、結合における中間結果のスキャンを単に高速化するために選択されることもあります。

UseBoyerMooreStringSearch

Boyer-Moore文字列検索アルゴリズムを有効または無効にします。有効な場合、Boyer-Moore文字列検索アルゴリズムが有効になります。これによって、LIKE演算子のパフォーマンスを改善できます。

さらに文字列AllFlagsをすべてのオプティマイザ・フラグを参照するために使用し、文字列Defaultをデフォルトのフラグを参照するために使用できます。Defaultには、GenPlanフラグ以外のすべてのオプティマイザ・フラグが含まれます。

フラグの説明

各フラグの値は1または0です。

  • 1の場合、処理は有効

  • 0の場合、必要時以外、処理は無効

GenPlan以外のすべての初期フラグ値は1です(すべての処理が許可されます)。

たとえば、アプリケーションで、中間結果を格納する計画をオプティマイザが選択できないようにできます。

ttOptSetFlag ( 'TmpTable', 0 )

同様に、アプリケーションでMergeJoinのプリファレンスを指定できます。

ttOptSetFlag ( 'MergeJoin', 0 )

2つ目の例では、マージ結合が不可能な場合(たとえば、マージ結合条件がない場合)、オプティマイザはネステッド・ループ・ジョインを選択できます。同様に、オプティマイザが、表スキャンを回避するアプリケーション・リクエストを満たすことができない場合もあります(Scanフラグが0に設定されている場合)。

特定の処理が特定の計画ステップで禁止されると指定すること、または特定の2つの表では必ず特定の結合方法が使用されると指定することはできません。同様に、特定の索引が使用されると指定すること、または特定の条件を評価するためにハッシュ索引が使用されると指定することもできません。各処理は、完全に許可されているか、完全に制限されているかのいずれかです。

コマンドが準備されている場合は、現在のオプティマイザ・フラグ、索引ヒントおよび結合順序はコマンドのコンパイル済形式の構造で保持され、システムによってそのコマンドが再準備されるときに使用されます。再準備された文の例については、『Oracle TimesTen In-Memory Databaseオペレーション・ガイド』「TimesTen問合せオプティマイザ」を参照してください。

DynamicLoadMultiplePKsDynamicLoadRootTblの両方が有効な場合、DynamicLoadMultiplePKsが優先されます。

RowLock およびTblLockの両方が無効な場合、TimesTenでは行ロックが使用されます。RowLockおよびTblLockの両方が有効な場合、TimesTenでは、パフォーマンスがより高い方のロック・スキームが使用されます。

TblLockの状態 RowLockの状態 オプティマイザへの影響

無効

無効

行レベル・ロックの使用。

有効

無効

表レベル・ロックの使用。

無効

有効

行レベル・ロックの使用。

有効

有効

行レベル・ロックまたは表レベル・ロックをオプティマイザが選択します。

通常、問合せによって表の行の重要な部分がアクセスされる場合、またはその表に同時アクセスしているトランザクションの数が非常に少ない場合に、表レベル・ロックは有効です。

結果セット

ttOptSetFlagは結果を返しません。

CALL ttOptSetFlag ('TmpHash', 1);

ノート:

結合の順序は、特定のSQL文の中で文レベル・オプティマイザ・ヒントを使用して設定することもできます。詳細は、『Oracle TimesTen In-Memory Database SQLリファレンス』「文レベルのオプティマイザ・ヒント」を参照してください。特にヒントの各スタイルの動作については、オプティマイザ・ヒントの表を参照してください。