Oracle Rdbバージョン7.0以降、RMU Analyze Cardinalityコマンドは非推奨となり、Oracle Rdbの今後のバージョンで削除される可能性があります。現在、このコマンドで使用できる機能は、RMU Collect Optimizer_StatisticsコマンドおよびRMU Show Optimizer_Statisticsコマンドで使用できます。 また、RMU Analyze Cardinalityコマンドを使用して索引に関するカーディナリティ情報を更新すると、接頭辞カーディナリティ情報が収集されないため、パフォーマンスが低下する場合があります。 このため、RMU Analyze Cardinalityコマンドではなく、RMU Collect Optimizer_StatisticsおよびRMU Show Optimizer_Statisticsコマンドを使用することをお薦めします。 RMU Collect Optimizer_StatisticsおよびRMU Show Optimizer_Statisticsコマンドの詳細は、第1.15節および第1.62.6項を参照してください。 |
RDB$SYSTEMが読取り専用アクセスに設定されている場合、表および索引の実際のカーディナリティ値が、データベースのRDB$SYSTEM記憶領域に格納されているカーディナリティ値と異なることがあります。RDB$SYSTEMが読取り専用アクセスに設定された後、表および索引に行が追加または削除されると、これらの表および索引のカーディナリティ値は更新されません。
索引の場合、カーディナリティ値は、重複が許可されている索引に対する一意のエントリの数です。索引が一意の場合、Oracle Rdbでカーディナリティに0が格納され、かわりに表のカーディナリティが使用されます。表の場合、カーディナリティ値は、表内の行の数です。Oracle Rdbでは、索引および表のカーディナリティ値がオプティマイザの判断に影響します。表および索引の実際のカーディナリティ値が、格納されているカーディナリティ値と異なる場合、オプティマイザのパフォーマンスに悪影響を及ぼします。
SQL ALTER DATABASE文を使用して、データベースのRDB$SYSTEM記憶領域を読取り専用アクセスに設定すると、RDB$SYSTEM記憶領域のOracle Rdbシステム表も読取り専用アクセスに設定されます。Oracle Rdbシステム表が読取り専用アクセスに設定されると、次のようになります。
- 表および索引のカーディナリティに対する自動更新が無効になります。
- カーディナリティに対する手動変更は、オプティマイザに影響を及ぼしません。
- カーディナリティの更新に関連するI/Oは除外されます。
RMU Analyze Cardinalityコマンドを使用すると、次のことが行えます。
- 指定した表および索引の格納されているカーディナリティ値および実際のカーディナリティ値の表示。
- 指定した表および索引の格納されているカーディナリティ値の、実際の値または任意の値を使用した更新。格納されているカーディナリティ値は、実際のカーディナリティ値を使用して更新することをお薦めします。実際のカーディナリティ値以外の値を指定すると、データベース・パフォーマンスが低下する場合があります。
root-file-spec
情報を収集するデータベース・ルート・ファイルの名前。デフォルトのファイル拡張子は.rdbです。このパラメータは必須です。table-or-index-name[,...]
カーディナリティ情報を収集する表または索引の名前。デフォルトは、すべての表およびすべての有効な索引です。無効な索引に関する情報が必要な場合、これを名前で指定する必要があります。デフォルトを受け入れず、表名を指定した場合、RMU Analyze Cardinalityコマンドと指定した修飾子は、指定した表にのみ作用します。表に関連付けられた索引の表示または更新(Update修飾子が指定されている場合)は行われません。
このパラメータはオプションです。間接ファイル参照を使用できます。詳細は、第1.3節を参照してください。
Confirm
Noconfirm
更新機能を詳細に制御する場合、Confirm修飾子をUpdate修飾子とともに指定します。Confirm修飾子を指定すると、格納されているカーディナリティ値が実際のカーディナリティ値と異なる、選択された表または索引ごとに、更新を行うかどうかが確認されます。YES、NO、QUITまたは格納されているカーディナリティの代替値を返します。YESの指定は、格納されているカーディナリティ値を実際のカーディナリティ値で更新することを表します。NOの指定は、格納されているカーディナリティ値を更新しないことを表します。QUITを指定すると、RMU Analyze Cardinalityが強制終了し、格納されているカーディナリティに対して行った変更がロールバックされ、オペレーティング・システム・プロンプトに戻ります。代替値を指定すると、格納されているカーディナリティ値が代替値で更新されます。
Noconfirm修飾子を指定する場合、格納されているカーディナリティ値を、独自に選択した代替値で更新することはできません。そのかわり、実際のカーディナリティ値と異なっている、格納されているカーディナリティ値が、実際のカーディナリティ値で自動的に更新されます。
デフォルトはNoconfirm修飾子です。
ConfirmおよびNoconfirm修飾子が、Update修飾子を使用せずに指定された場合は意味がないため、無視されます。
Output=file-name
出力先のファイルの名前を指定します。デフォルトはSYS$OUTPUTです。ファイル名を指定した場合、デフォルトの出力ファイル・タイプは.lisです。Transaction_Type=option
分析操作に使用されるトランザクションのモードを指定できます。有効なオプションは次のとおりです。
- Automatic
- Read_Only
- Noread_Only
この修飾子を使用する場合、オプションを指定する必要があります。
この修飾子をどの形式でも指定しない場合、Transaction_Type=Automatic修飾子がデフォルトです。この修飾子は、分析操作に使用されるトランザクション・モードをOracle RMUで決定するよう指定します。データベース内の記憶領域(分析操作でアクセスされないものも含む)でスナップショットが無効の場合、分析操作に使用されるトランザクションは、読取り/書込みモードに設定されます。そうでない場合は、トランザクションは読取り専用モードに設定されます。
Transaction_Type=Read_Only修飾子は、分析操作に使用されるトランザクションを読取り専用モードに設定するよう指定します。トランザクション・タイプを明示的に読取り専用に指定する場合、データベース内のすべての記憶領域でスナップショットが有効である必要はありませんが、分析される記憶領域では有効である必要があります。そうでない場合、エラーが返され、分析操作は失敗します。
すべての記憶領域でスナップショットが有効になっておらず、スナップショットが有効な記憶領域でのみオブジェクトを分析する場合、このオプションを選択します。この場合、Transaction_Type=Read_Only修飾子を使用することによって、分析操作が行われ、データベースの他のユーザーに対しては最小限のロックが課されます。
Transaction_Type=Noread_Only修飾子は、分析操作に使用されるトランザクションを読取り/書込みモードに設定するよう指定します。読取り専用トランザクションで起こるスナップショット・ファイルの増大化を避け、読取り/書込みトランザクションで起こるロックの増加というコストを甘受できる場合、このオプションを選択します。
Update
Noupdate
表および索引の格納されているカーディナリティ値を更新する場合、Update修飾子を指定します。格納されているカーディナリティ値が実際のカーディナリティ値と異なる場合のみ、更新を行えます。カーディナリティ値を更新する場合、独自に選択した代替値ではなく、実際のカーディナリティ値で格納されているカーディナリティ値を更新することをお薦めします。実際のカーディナリティ値以外の値を指定すると、データベース・パフォーマンスが低下する場合があります。デフォルトはNoupdate修飾子です。Update修飾子を使用すると、RDB$SYSTEM記憶領域に読取り専用アクセスが指定されていても、指定した表および索引の格納されているカーディナリティ値を更新できます。RDB$SYSTEM記憶領域を読取り専用アクセスに設定している場合、Oracle RMUで、Update修飾子が指定されたRMU Analyze Cardinalityコマンドの実行時に読取り/書込みに設定されます。処理が完了すると、Oracle RMUで領域が読取り専用に再設定されます。
表または索引の格納されているカーディナリティ値の更新時、RDB$SYSTEM記憶領域が読取り専用に戻る前にシステム障害が起きた場合、SQL ALTER DATABASE文を使用して、データベースを読取り専用に手動で戻します。
ただし、領域を読取り専用に設定してある場合、Update修飾子で指定された更新処理は、データベースがオフラインまたは静止状態のときにのみ開始されます。
Update修飾子を含むRMU Analyze Cardinalityコマンドで表名パラメータを指定した場合、関連付けられた索引は更新されません。更新する各表および索引を指定するか、(表名および索引名を指定せずに)デフォルトを受け入れてすべての項目を更新する必要があります。
Update修飾子は、オフライン処理時または更新処理が頻繁でないときに使用することをお薦めします。現在のデータベース・アクティビティによるカーディナリティの変更時にこれを更新した場合、予測できない結果になることがあります。
指定した表および索引のみの格納されているカーディナリティ値および実際のカーディナリティ値を表示する場合、Noupdate修飾子を指定します。
- データベースに対してRMU Analyze Cardinalityコマンドを使用するには、データベースのルート・ファイルACLにRMU$ANALYZE権限を持っているか、OpenVMSのSYSPRVまたはBYPASS権限を持っている必要があります。
- 読取り専用RDB$SYSTEM記憶領域を更新するには、データベースに対するSQL ALTER権限を持っている必要があります。
- table-or-index-nameパラメータに、索引名でも表名でもある名前を指定した場合、RMU Analyze Cardinalityでは、指定された処理が表と索引の両方に行われます。
- 一意索引のカーディナリティをRMU Analyze Cardinalityコマンドを使用して変更できますが、いかなる影響も及ぼしません。(一意索引は一意キーのみを持ち、重複キーは持ちません。)一意索引と一意索引によって索引付けされる表のカーディナリティは同じであるため、一意索引のカーディナリティに関連する処理を行う際、Oracle Rdbでは表のカーディナリティ値が使用されます。Oracle Rdbでは、一意索引に対して格納されているカーディナリティ値は使用されず、行の格納または削除によるこの値の更新も行われません。
- RMU Analyze Cardinalityコマンドが、閉じたデータベースに発行されると、他のユーザーがデータベースにアタッチできない状態でコマンドが実行されます。
例1次のコマンドでは、mf_personnelサンプル・データベース内のすべての索引および表のカーディナリティに関する情報が得られます。
$ RMU/ANALYZE/CARDINALITY/NOUPDATE MF_PERSONNEL.RDB /OUTPUT=CARD.LIS
例2
次のコマンドでは、mf_personnelデータベース内のEMPLOYEES表のカーディナリティに関する情報が得られます。
$ RMU/ANALYZE/CARDINALITY/NOUPDATE MF_PERSONNEL.RDB EMPLOYEES - _$ /OUTPUT=EMP.LIS