RMU Analyze Indexesコマンドによって、索引構造を分析する保守ツールが提供され、この統計情報の表示が書式を整えられて生成されます。情報は、記憶領域に関するもの、論理領域に関するものまたは記憶領域のページ範囲に関するものが選択的に表示されます。RMU Analyze Indexesコマンドを使用して、ソート索引(ランク付きソートを含む)およびハッシュ索引の構造を分析できます。次に、RMU Analyze Indexコマンドからのサンプル出力を示します。
$ RMU/ANALYZE/INDEXES MF_PERSONNEL.RDB JH_EMPLOYEE_ID_RANKED ---------------------------------------------------------------------------- Indices for database - RDBVMS_DISK1:[DB]MF_PERSONNEL.RDB; ---------------------------------------------------------------------------- Index JH_EMPLOYEE_ID_RANKED for relation JOB_HISTORY duplicates allowed Max Level: 3, Nodes: 34, Used/Avail: 8693/13532 (64%), Keys: 133, Records: 0 Duplicate nodes:0, Used/Avail: 0/0 (0%), Keys: 100, Maps: 100, Records:4113 Total Comp/Uncomp IKEY Size: 600/798, Compression Ratio: .75 ----------------------------------------------------------------------------
統計表示のデータには、次の情報が含まれています。
- 出力の最初の行は、分析された索引を含むデータベースを示します。
- 出力の2行目は、次のことを示します。
- 索引がハッシュ索引であることを示します。この例では、索引はハッシュされていないため、「hashed」という語は表示されません。
- 索引名
- 重複が許可されているかどうか。
- 出力の3行目は、次のことを示します。
- Max Level
索引の最大レベル数。- Nodes
索引内のノードの総数。- Used/Avail (%)
索引によって使用されているバイト数/使用可能なバイト数。(索引によって使用されている領域の割合。)- Keys
データ・レコードを直接ポイントするdbkeysと、重複ノードをポイントするキーとの合計。- Records
Keys(前述の項目)が直接ポイントするデータ・レコードの数。
- 出力の4行目は、次のことを示します。
- Duplicate nodes
ハッシュ索引およびランクなしソート索引の場合、これは、索引内の重複ノードの数です。ランク付きソート索引の場合、これは、オーバーフロー・ノードの数です。ランク付きソート索引では、Oracle Rdbはバイト単位のビットマップ圧縮を使用して重複を圧縮します。重複をポイントするdbkeysのリストが圧縮され、そのリストが索引キー・ノードに格納されます。重複の圧縮リストが1つの索引キー・ノードに収まらない場合、Oracle Rdbでオーバーフロー・ノードが作成されます。このオーバーフロー・ノードには、dbkeyのビットマップ圧縮リストと、次のオーバーフロー・ノードへのポインタが含まれます。このため、ランク付きソート索引では、重複をポイントするdbkeyの圧縮リストが1つのノードに収まる場合、重複ノード・カウント(オーバーフロー・ノード)はゼロ(0)です。- Used/Avail (%)
重複ノードによって使用されているバイト数/重複ノードで使用可能なバイト数。(索引の重複ノード内で使用されている領域の割合。)ランク付きソート索引では、重複ノードの数がゼロの場合、この値はゼロ(0)です。- Keys
重複ノードをポイントする、あるいは索引内の重複ノード・チェーンの始まりをポイントするdbkeyの総数。- Maps(索引がランク付きソート索引の場合にのみ表示)
重複索引キー・データ・レコードdbkeyを示すためにランク付きソート索引によって使用されている重複キー・データ・レコード・ビットマップの数。- Records
重複ノードによってポイントされるデータ・レコードの総数。索引がランク付きソート索引の場合、Recordsは、重複ビットマップによってポイントされるデータ・レコードの数を示します。
- 出力の5行目(索引が圧縮されている場合にのみ表示)は、次のことを示します。
- Total Comp/Uncomp IKEY Size
圧縮リーフ索引キーの総バイト・カウント(レベル1ノードのみ)/索引が圧縮されていない場合に必要な総バイト・カウント- Compression ratio
Total Comp/Uncompを計算した比率。圧縮比率が1.0より大きい場合、圧縮された索引キーが、圧縮されていない索引キーより多くの領域を占めていることを表します。
RMU Analyze Indexesおよび索引キーの表示の詳細は、『Oracle Rdb7 Guide to Database Performance and Tuning』を参照してください。
root-file-spec
情報を収集するデータベース・ルート・ファイルのファイル指定。デフォルトのファイル拡張子は.rdbです。このパラメータは必須です。index-name[,...]
情報を収集する索引の名前。デフォルトはすべての有効な索引です。無効な索引に関する情報が必要な場合、これを名前で指定する必要があります。このパラメータはオプションです。間接ファイル参照を使用できます。詳細は、第1.3節を参照してください。索引名の指定に、ワイルドカード文字("%"および"*")を使用できます。次に、ワイルドカード文字を組み合せた様々な使用例を示します。
$ RMU /ANALYZE /INDEX MF_PERSONNEL EMP* $ RMU /ANALYZE /INDEX MF_PERSONNEL *LAST%NAME $ RMU /ANALYZE /INDEX MF_PERSONNEL EMP%LAST%NAME $ RMU /ANALYZE /INDEX MF_PERSONNEL *HASH, *LAST*
Binary_Output[=file-option-list]
Nobinary_Output
Binary_Output修飾子を指定すると、サマリー結果をバイナリ・ファイルに格納し、データ・ディクショナリと互換性のあるレコード定義ファイルをバイナリ出力ファイルに対して作成できます。バイナリ出力は、Record_Definition修飾子を指定してRMU Loadコマンドを使用し、Oracle Rdbデータベースにロードします。ユーザーが記述した管理アプリケーションまたはプロシージャで使用できます。バイナリ出力は、ユーザーが記述したアプリケーションまたはプロシージャで直接使用することもできます。有効なファイル・オプションは次のとおりです。
- File=file-spec
Fileオプションを使用すると、RMU Analyze Indexesコマンド・データは、分析された索引ごとに固定長のバイナリ・レコードを含むRMSファイルに格納されます。
バイナリ出力ファイルのデフォルトのファイル拡張子は.unlです。次のコマンドでは、バイナリ出力ファイルanalyze_out.unlが作成されます。
$ RMU/ANALYZE/INDEXES - _$ /BINARY_OUTPUT=FILE=ANALYZE_OUT MF_PERSONNEL.RDB
- Record_Definition=file-spec
Record_Definitionオプションを使用すると、RMU Analyze Indexesコマンド・データのレコード定義がRMSファイルに格納されます。出力ファイルには、データ・ディクショナリ・コマンド形式のサブセットでレコード定義が含まれます。レコード定義出力ファイルのデフォルトのファイル拡張子は.rrdです。.rrdファイルの詳細は、付録Aを参照してください。次のコマンドでは、出力ファイルanalyze_out.rrdが作成されます。
$ RMU/ANALYZE/INDEXES - _$ /BINARY_OUTPUT=RECORD_DEFINITION=ANALYZE_OUT MF_PERSONNEL.RDB
両方のファイル・オプションを1つのコマンドで指定できます。この場合、次のようにオプションをカンマで区切り、カッコで囲みます。
$ RMU/ANALYZE/INDEXES/BINARY_OUTPUT= - _$ (FILE=ANALYZE_OUT,RECORD_DEFINITION=ANALYZE_OUT) - _$ MF_PERSONNEL.RDB
Binary_Output修飾子を指定する場合、少なくとも1つのオプションを指定する必要があります。デフォルトはNobinary_Output修飾子で、出力ファイルは作成されません。
Exclude=Metadata
RMU Analyze Indexesコマンド出力から情報を除外します。Exclude=Metadata修飾子を指定すると、Oracle Rdb索引(RDB$NDX_REL_NAME_NDX索引、RDB$COLLATIONS_NDX索引など)に関する情報が、RMU Analyze Indexesコマンドの出力から除外されます。Exclude修飾子を指定しない場合、データベースのすべての索引に対するデータが出力されます。Exclude修飾子で除外された索引に関するデータは蓄積されますが、RMU Analyze Indexesコマンドの出力からは除外されます。
1つのRMU Analyze Indexesコマンドで、Exclude修飾子と1つ以上の索引名を指定することはできません。
Option=type
分析に含まれる情報のタイプおよび詳細レベルを指定します。3種類の出力が使用できます。
- Normal
サマリー情報のみが出力に含まれます。Normalオプションがデフォルトです。- Full
ヒストグラムとサマリー情報が出力に含まれます。このオプションでは、ソート索引・レベルごとにサマリー行が表示されます。- Debug
データ、ヒストグラムおよびサマリー情報に関する内部情報が出力に含まれます。圧縮された索引キーの分析にこのオプションを使用する場合、次の点に注意してください。
- キー長は、圧縮された索引キーから導出されます。
- キーの16進での出力は、圧縮されていない索引キーのものです。
- 出力には、圧縮された索引キーのサマリー統計情報が含まれます。
Debugオプションは、通常、診断サポート目的で使用されます。Debugオプションを使用してデータを抽出し、独自に分析を行うこともできます。
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修飾子は、分析操作に使用されるトランザクションを読取り/書込みモードに設定するよう指定します。読取り専用トランザクションで起こるスナップショット・ファイルの増大化を避け、読取り/書込みトランザクションで起こるロックの増加というコストを甘受できる場合、このオプションを選択します。
- データベースに対してRMU Analyze Indexesコマンドを使用するには、データベースのルート・ファイル・アクセス制御リスト(ACL)にRMU$ANALYZE権限を持っているか、OpenVMSのSYSPRVまたはBYPASS権限を持っている必要があります。
- RMU Analyze Indexesコマンドが、閉じたデータベースに発行されると、他のユーザーがデータベースにアタッチできない状態でコマンドが実行されます。
- RMU Analyze Indexesコマンドでは、WORM(書込み1回、読取り複数回)光ディスク・デバイス上のライトワンス記憶領域での索引構造の分析がサポートされます。論理EOFを超えるページも含め、すべての初期化されていないページが、初期化されたページと同様に分析されます。すべての割当て済ページが未使用ページとしてカウントされるため、予想以上に多くのページが分析される可能性があります。
- 次のRMU Analyze Indexesコマンドでは、RMU Loadコマンドおよびデータ・ディクショナリで読み取り可能なindex.rrdという名前のRMSレコード定義ファイルが生成されます。
$ RMU/ANALYZE/INDEX/BINARY_OUTPUT=RECORD_DEFINITION=INDEX.RRD - _$ MF_PERSONNEL $! $! Display the index.rrd file created by the previous command: $ TYPE INDEX.RRD
DEFINE FIELD RMU$DATE DATATYPE IS DATE. DEFINE FIELD RMU$INDEX_NAME DATATYPE IS TEXT SIZE IS 32. DEFINE FIELD RMU$RELATION_NAME DATATYPE IS TEXT SIZE IS 32. DEFINE FIELD RMU$LEVEL DATATYPE IS SIGNED WORD. DEFINE FIELD RMU$FLAGS DATATYPE IS SIGNED WORD. DEFINE FIELD RMU$COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$USED DATATYPE IS F_FLOATING. DEFINE FIELD RMU$AVAILABLE DATATYPE IS F_FLOATING. DEFINE FIELD RMU$DUPLICATE_COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$DUPLICATE_USED DATATYPE IS F_FLOATING. DEFINE FIELD RMU$DUPLICATE_AVAILABLE DATATYPE IS F_FLOATING. DEFINE FIELD RMU$KEY_COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$DATA_COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$DUPLICATE_KEY_COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$DUPLICATE_DATA_COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$TOTAL_COMP_IKEY_COUNT DATATYPE IS F_FLOATING. DEFINE FIELD RMU$TOTAL_IKEY_COUNT DATATYPE IS F_FLOATING. DEFINE RECORD RMU$ANALYZE_INDEX.
- 次のリストで、index.rrdレコード定義の各フィールドについて説明します。
- RMU$DATE
分析操作が行われた日付が含まれます。- RMU$INDEX_NAME
分析された索引の名前が含まれます。- RMU$RELATION_NAME
索引が定義されている表の名前が含まれます。- RMU$LEVEL
索引レベルの最大数が含まれます。- RMU$FLAGS
このフィールドにとり得る8つの値には、次の意味があります。
- 0: 索引はソートされ、一意ではありません。フル・レポートは生成されません。
- 1: 索引はソートされ、一意です。フル・レポートは生成されません。
- 2: 索引はハッシュされ、一意ではありません。フル・レポートは生成されません。
- 3: 索引はハッシュされ、一意です。フル・レポートは生成されません。
- 4: 索引はソートされ、一意ではありません。フル・レポートが生成されます。
- 5: 索引はソートされ、一意です。フル・レポートが生成されます。
- 6: 索引はハッシュされ、一意ではありません。フル・レポートが生成されます。
- 7: 索引はハッシュされ、一意です。フル・レポートが生成されます。
- 8: 索引はランク付きソートされ、一意ではありません。フル・レポートは生成されません。
- 9: 索引はランク付きソートされ、一意です。フル・レポートは生成されません。
- 12: 索引はランク付きソートされ、一意ではありません。フル・レポートが生成されます。
- 13: 索引はランク付きソートされ、一意です。フル・レポートが生成されます。
RMU Analyze Indexesコマンドでは、RMU$FLAGSビットを表1-2のように使用し、索引の情報を示します。
表1-2 RMU Analyze Indexesコマンドで使用されるRMU$FLAGSビット ビット・オフセット 意味 0 真の場合、一意索引 1 真の場合、ハッシュ索引 2 真の場合、フル・レポート・レコード 3 真の場合、ランク付き索引
RMU$FLAGSのビット2が設定されている場合、フル・レポートが生成されることを表します。フル・レポートには、索引の各レベルのレコードが含まれます。
- RMU$COUNT
索引ノードの数が含まれます。- RMU$USED
使用されている使用可能領域の量が含まれます。- RMU$AVAILABLE
索引レコードで最初に使用可能な領域の量が含まれます。- RMU$DUPLICATE_COUNT
重複レコードの数が含まれます。- RMU$DUPLICATE_USED
重複レコードで使用されている使用可能な領域の量が含まれます。- RMU$DUPLICATE_AVAILABLE
重複レコードで最初に使用可能な領域の量が含まれます。- RMU$KEY_COUNT
キーの数が含まれます。- RMU$DATA_COUNT
レコードの数が含まれます。- RMU$DUPLICATE_KEY_COUNT
重複キーの数が含まれます。- RMU$DUPLICATE_DATA_COUNT
重複レコードの数が含まれます。- RMU$TOTAL_COMP_IKEY_COUNT
圧縮された索引キーのバイト数が含まれます。- RMU$TOTAL_IKEY_COUNT
圧縮されていない場合に索引キーによって使用されるバイト数が含まれます。
例1次のコマンドでは、mf_personnelデータベースのJH_EMPLOYEE_IDおよびSH_EMPLOYEE_ID索引が分析されます。
$ RMU/ANALYZE/INDEXES MF_PERSONNEL.RDB JH_EMPLOYEE_ID,SH_EMPLOYEE_ID - _$ /OUTPUT=EMP_ID_INDEX.LIS
例2
次のコマンドでは、ランクなしソート索引とランク付きソート索引を分析した場合の違いを示します。Duplicate nodesの値の違いに注意してください。ランクなしソート索引では、重複ノードを80と示しています。ランク付きソート索引(重複が追加される前)では、同じデータに対し、重複ノードは0と示しています。多数の重複が追加された後、ランク付きソート索引では、重複ノードは3つのみと示しています。この違いは、ランクなしソート索引とランク付きソート索引で重複レコードを格納する方法が異なるためです。これらの違いの詳細は、このコマンドの「説明」を参照してください。
$ ! Analyze a nonranked sorted index: $ ! $ RMU/ANALYZE/INDEXES MF_PERSONNEL.RDB JH_EMPLOYEE_ID ---------------------------------------------------------------------------- Indices for database - USER1:[DB]MF_PERSONNEL.RDB;1 ---------------------------------------------------------------------------- Index JH_EMPLOYEE_ID for relation JOB_HISTORY duplicates allowed Max Level: 2, Nodes: 4, Used/Avail: 768/1592 (48%), Keys: 103, Records: 20 Duplicate nodes: 80, Used/Avail: 2032/4696 (43%), Keys: 80, Records: 254 ---------------------------------------------------------------------------- $ ! Analyze a ranked sorted index defined on the same column as the $ ! nonranked sorted index: $ RMU/ANALYZE/INDEXES MF_PERSONNEL.RDB JH_EMPLOYEE_ID_RANKED ---------------------------------------------------------------------------- Indices for database - USER1:[DB]MF_PERSONNEL.RDB;1 ---------------------------------------------------------------------------- Index JH_EMPLOYEE_ID_RANKED for relation JOB_HISTORY duplicates allowed Max Level: 2, Nodes: 11, Used/Avail: 2318/4378 (53%), Keys: 110, Records: 20 Duplicate nodes: 0, Used/Avail: 0/0 (0%), Keys: 80, Maps: 80, Records: 254 ---------------------------------------------------------------------------- $ ! $ ! Insert many duplicates and analyze the ranked sorted index again: $ ! $ RMU/ANALYZE/INDEXES MF_PERSONNEL.RDB JH_EMPLOYEE_ID_RANKED ---------------------------------------------------------------------------- Indices for database - USER1:[DB]MF_PERSONNEL.RDB;1 ---------------------------------------------------------------------------- Index JH_EMPLOYEE_ID_RANKED for relation JOB_HISTORY duplicates allowed Max Level: 2, Nodes: 13, Used/Avail: 2705/5174 (52%), Keys: 112, Records: 20 Duplicate nodes:3, Used/Avail:850/1194 (71%), Keys:80, Maps: 83, Records:2964 ----------------------------------------------------------------------------