13 CTX_REPORTパッケージ
この章では、CTX_REPORT
パッケージを使用して索引付けおよび問合せに関するレポートを作成する方法を説明します。これらのレポートは、問題のトラブルシューティングやアプリケーションのチューニングに役立ちます。
この章のトピックは、次のとおりです:
ノート:
CTX_REPORT
パッケージのAPIは、スキーマまたは所有者名を接頭辞として使用する識別子をサポートしていません。
関連項目:
CTX_REPORT
パッケージの概要、およびこの章で説明するプロシージャの使用方法は、『Oracle Textアプリケーション開発者ガイド』を参照してください。
13.1 CTX_REPORTのプロシージャの説明
CTX_REPORT
パッケージには、次のプロシージャが含まれています。
名前 | 説明 |
---|---|
索引を説明するレポートを作成します。 |
|
ポリシーを説明するレポートを作成します。 |
|
指定した索引を複製するSQL*Plusスクリプトを作成します。 |
|
指定したポリシーを複製するSQL*Plusスクリプトを作成します。 |
|
索引の内部オブジェクト、その表領域および使用サイズを表示するレポートを作成します。 |
|
索引の様々な統計を表示するレポートを作成します。 |
|
問合せ統計を示すレポートを作成します。 |
|
デコードされたトークンに関する情報を表示するレポートを作成します。 |
|
名前を変換し、数値のトークン型を戻します。 |
|
索引の破損を確認し、見つかった問題をレポートします。主にOracle Supportで使用されます。 |
13.2 複数バージョンのファンクションの使用方法
CTX_REPORT
パッケージの一部のプロシージャには、ファンクション・バージョンがあります。これらのファンクションは、次のようにコールできます。
select ctx_report.describe_index('MYINDEX') from dual;
SQL*Plusでは、サポートの目的で、次のように出力ファイルを生成して送信できます。
set long 64000 set pages 0 set heading off set feedback off spool outputfile select ctx_report.describe_index('MYINDEX') from dual; spool off
13.3 DESCRIBE_INDEX
索引を説明するレポートを作成します。このレポートには、索引メタデータの設定、使用されている索引付けオブジェクト、オブジェクトの属性の設定および索引パーティションの説明(ある場合)が含まれます。
この操作は、IN
OUT
CLOB
パラメータを指定したプロシージャとして、またはレポートをCLOB
で戻すファンクションとしてコールできます。
構文
procedure CTX_REPORT.DESCRIBE_INDEX( index_name IN VARCHAR2, report IN OUT NOCOPY CLOB, report_format IN VARCHAR2 DEFAULT FMT_TEXT ); function CTX_REPORT.DESCRIBE_INDEX( index_name IN VARCHAR2, report_format IN VARCHAR2 DEFAULT FMT_TEXT ) return CLOB;
- index_name
-
説明する索引の名前を指定します。
- report
-
レポートを書き込む
CLOB
ロケータを指定します。report
がNULLの場合は、セッション中に一時CLOB
が作成されて戻ります。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられます。したがって、既存の内容はこのコールによって上書きされます。 - report_format
-
レポートを'TEXT'または'XML'のいずれで生成するかを指定します。デフォルトはTEXTです。また、値に
CTX_REPORT.FMT_TEXT
またはCTX_REPORT.FMT_XML
も指定できます。
ノート
CTX_REPORT.DESCRIBE_INDEX
は、索引がFILTER
BY
またはORDER
BY
(あるいはその両方)の句を指定して作成された場合は、FILTER
BY
およびORDER
BY
の列情報を出力します。
13.4 DESCRIBE_POLICY
ポリシーを説明するレポートを作成します。このレポートには、ポリシー・メタデータの設定、使用されている索引付けオブジェクト、オブジェクトの属性の設定が含まれます。
この操作は、IN
OUT
CLOB
パラメータを指定したプロシージャとして、またはレポートをCLOB
で戻すファンクションとしてコールできます。
構文
procedure CTX_REPORT.DESCRIBE_POLICY( policy_name IN VARCHAR2, report IN OUT NOCOPY CLOB, report_format IN VARCHAR2 DEFAULT FMT_TEXT ); function CTX_REPORT.DESCRIBE_POLICY( policy_name IN VARCHAR2, report_format IN VARCHAR2 DEFAULT FMT_TEXT ) return CLOB;
- report
-
レポートを書き込む
CLOB
ロケータを指定します。report
がNULLの場合は、セッション中に一時CLOB
が作成されて戻ります。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられるため、既存の内容はこのコールによって上書きされます。 - report_format
-
レポートを'TEXT'または'XML'のいずれで生成するかを指定します。デフォルトはTEXTです。また、値に
CTX_REPORT.FMT_TEXT
またはCTX_REPORT.FMT_XML
も指定できます。 - policy_name
-
説明するポリシーの名前を指定します。
13.5 CREATE_INDEX_SCRIPT
指定したテキスト索引を複製するSQL*Plusスクリプトを作成します。
作成されたスクリプトには、指定したテキスト索引に使用されているプリファレンスと同一のプリファレンスが含まれます。ただし、プリファレンス名は別の名前になります。
この操作は、IN
OUT
CLOB
パラメータを指定したプロシージャとして、またはレポートをCLOB
で戻すファンクションとしてコールできます。
構文
procedure CTX_REPORT.CREATE_INDEX_SCRIPT( index_name in varchar2, report in out nocopy clob, prefname_prefix in varchar2 default null ); function CTX_REPORT.CREATE_INDEX_SCRIPT( index_name in varchar2, prefname_prefix in varchar2 default null ) return clob;
- index_name
-
索引の名前を指定します。
- report
-
スクリプトを書き込む
CLOB
ロケータを指定します。report
がNULLの場合は、セッション中に一時CLOB
が作成されて戻ります。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられます。したがって、既存の内容はこのコールによって上書きされます。 - prefname_prefix
-
オプションで、プリファレンス名に使用するプリフィックスを指定します。
prefname_prefix
を省略またはNULLにした場合は、索引名が使用されます。prefname_prefix
は、索引の長さに関する制限に従います。
ノート
CTX_REPORT.CREATE_INDEX_SCRIPT
は、CREATE
INDEX
文の必要なFILTER
BY
およびORDER
BY
句も生成します。
関連項目
13.6 CREATE_POLICY_SCRIPT
指定したテキスト・ポリシーを複製するSQL*Plusスクリプトを作成します。
作成されたスクリプトには、指定したテキスト・ポリシーに使用されているプリファレンスと同一のプリファレンスが含まれます。
この操作は、IN
OUT
CLOB
パラメータを指定したプロシージャとして、またはレポートをCLOB
で戻すファンクションとしてコールできます。
構文
procedure CTX_REPORT.CREATE_POLICY_SCRIPT( policy_name in varchar2, report in out nocopy clob, prefname_prefix in varchar2 default null ); function CTX_REPORT.CREATE_POLICY_SCRIPT( policy_name in varchar2, prefname_prefix in varchar2 default null ) return clob;
- policy_name
-
ポリシーの名前を指定します。
- report
-
スクリプトを書き込むロケータを指定します。
report
がNULLの場合は、セッション中に一時CLOB
が作成されて戻ります。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられます。したがって、既存の内容はこのコールによって上書きされます。 - prefname_prefix
-
オプションで、プリファレンス名に使用するプリフィックスを指定します。
prefname_prefix
を省略またはNULLにした場合は、ポリシー名が使用されます。prefname_prefix
は、ポリシーの長さに関する制限に従います。
13.7 INDEX_SIZE
テキスト索引またはテキスト索引パーティションの内部オブジェクト、その割当て済表領域および使用サイズを表示するレポートを作成します。
この操作は、IN
OUT
CLOB
パラメータを指定したプロシージャとして、またはレポートをCLOB
で戻すファンクションとしてコールできます。
構文
procedure CTX_REPORT.INDEX_SIZE( index_name IN VARCHAR2, report IN OUT NOCOPY CLOB, part_name IN VARCHAR2 DEFAULT NULL, report_format IN VARCHAR2 DEFAULT FMT_TEXT ); function CTX_REPORT.INDEX_SIZE( index_name IN VARCHAR2, part_name IN VARCHAR2 DEFAULT NULL, report_format IN VARCHAR2 DEFAULT FMT_TEXT ) return clob;
- index_name
-
説明する索引の名前を指定します。
- report
-
レポートを書き込む
CLOB
ロケータを指定します。report
がNULLの場合は、セッション中に一時CLOB
が作成されて戻ります。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられます。したがって、既存の内容はこのコールによって上書きされます。 - part_name
-
索引パーティションの名前を指定します(オプション)。
part_name
がNULLで、索引がローカル・パーティション・テキスト索引の場合は、すべてのパーティションに関する全オブジェクトが表示されます。part_name
を指定した場合は、特定のパーティションのオブジェクトのみが表示されます。 - report_format
-
レポートを'TEXT'または'XML'のいずれで生成するかを指定します。デフォルトはTEXTです。また、値に
CTX_REPORT
.FMT_TEXT
またはCTX_REPORT
.FMT_XML
も指定できます。
ノート
CTX_REPORT.INDEX_SIZE
は、dr$索引名$S表の情報も出力します。
13.8 INDEX_STATS
テキスト索引について計算された様々な統計を表示するレポートを作成します。
このプロシージャでは、テキスト索引表全体がスキャンされるため、大規模な索引の場合は実行時間が長くなる可能性があります。
構文
procedure ctx_report.index_stats( index_name IN VARCHAR2, report IN OUT NOCOPY CLOB, part_name IN VARCHAR2 DEFAULT NULL, frag_stats IN BOOLEAN DEFAULT TRUE, list_size IN NUMBER DEFAULT 100, report_format IN VARCHAR2 DEFAULT FMT_TEXT, stat_type IN VARCHAR2 DEFAULT NULL );
- index_name
-
説明する索引の名前を指定します。これは
CONTEXT
索引である必要があります。 - report
-
レポートを書き込む
CLOB
ロケータを指定します。reportがNULLの場合は、セッション期間に一時CLOB
が作成され戻されます。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられます。したがって、既存の内容はこのコールによって上書きされます。 - part_name
-
索引パーティションの名前を指定します。索引がローカル・パーティション索引である場合は、
part_name
を指定する必要があります。INDEX_STATS
により、この索引パーティションに関する統計が計算されます。 - frag_stats
-
断片化の統計を計算する場合は、TRUEを指定します。
frag_stats
がFALSEの場合、索引データのサイズに関する統計はレポートに表示されません。ただし、トークン統計を計算するために処理にかかる時間とリソースは少なくなります。 - list_size
-
各コンパイル済リストに表示する要素数を指定します。
list_size
の最大値は1000です。 - report_format
-
レポートを'TEXT'または'XML'のいずれで生成するかを指定します。デフォルトはTEXTです。また、値に
CTX_REPORT
.FMT_TEXT
またはCTX_REPORT
.FMT_XML
も指定できます。 - stat_type
-
出力する推定統計を指定します。このパラメータを設定すると、
frag_stats
は無視されます。有効な値は、次のとおりです。統計タイプ 説明 EST_FRAG_STATS
推定される索引の断片化統計を取得します。このタイプを指定した場合、
list_size
は無視されます。EST_FREQUENT_TOKENS
索引に対する推定問合せ頻度が高いトークンを取得します。100までの値を
list_size
に指定できます。EST_TOKENS_TO_OPTIMIZE
問合せ頻度と断片化に基づいて、最適化の必要性が最も高いトークンを示します。100までの値を
list_size
に指定できます。EST_SLOWEST_QUERIES
索引に対して実行速度が最も遅い問合せを示します。100までの値を
list_size
に指定できます。ノート:
EST_SLOWEST_QUERIES
は、JSON検索索引ではサポートされていません。
ノート:
stat_type
の推定統計は、query_stats
が有効化されていている場合にのみ使用できます。また、レポートを実行するユーザーには、次の権限が付与されている必要があります。
grant select, insert, delete, update on ctxsys.dr$slowqrys to <user>;
grant select, insert, delete, update on ctxsys.dr$freqtoks to <user>;
CTX_REPORT.INDEX_STATSの例
create table output (result CLOB); declare x clob := null; begin ctx_report.index_stats('tdrbprx21',x); insert into output values (x); commit; dbms_lob.freetemporary(x); end; / set long 32000 set head off set pagesize 10000 select * from output;
CONTEXT索引に関するINDEX_STATS
のサンプル出力を示します。このレポートは、明確にするために一部が切り捨てられています。トークン統計の一部と断片化統計のすべてが記載されています。
断片化統計は、レポートの最後にあります。このレポートによって、最適な行の断片化、予想される索引内の不要データ量、および最も断片化されているトークンのリストを確認できます。CTX_DDL.OPTIMIZE_INDEX
を実行すると索引がクリーン・アップされます。
================================================================= STATISTICS FOR "DR_TEST"."TDRBPRX21" ================================================================= indexed documents: 53 allocated docids: 68 $I rows: 16,259 ----------------------------------------------------------------- TOKEN STATISTICS ----------------------------------------------------------------- unique tokens: 13,445 average $I rows for each token: 1.21 tokens with most $I rows: telecommunications industry (THEME) 6 science and technology (THEME) 6 EMAIL (FIELD SECTION "SOURCE") 6 DEC (FIELD SECTION "TIMESTAMP") 6 electronic mail (THEME) 6 computer networking (THEME) 6 communications (THEME) 6 95 (FIELD SECTION "TIMESTAMP") 6 15 (FIELD SECTION "TIMESTAMP") 6 HEADLINE (ZONE SECTION) 6 average size for each token: 8 tokens with largest size: T (NORMAL) 405 SAID (NORMAL) 313 HEADLINE (ZONE SECTION) 272 NEW (NORMAL) 267 I (NORMAL) 230 MILLION (PREFIX) 222 D (NORMAL) 219 MILLION (NORMAL) 215 U (NORMAL) 192 DEC (FIELD SECTION "TIMESTAMP") 186 average frequency for each token: 2.00 most frequent tokens: HEADLINE (ZONE SECTION) 68 DEC (FIELD SECTION "TIMESTAMP") 62 95 (FIELD SECTION "TIMESTAMP") 62 15 (FIELD SECTION "TIMESTAMP") 62 T (NORMAL) 61 D (NORMAL) 59 881115 (THEME) 58 881115 (NORMAL) 58 I (NORMAL) 55 geography (THEME) 52 token statistics by type: token type: NORMAL unique tokens: 6,344 total rows: 7,631 average rows: 1.20 total size: 67,445 (65.86 KB) average size: 11 average frequency: 2.33 most frequent tokens: T 61 D 59 881115 58 I 55 SAID 45 C 43 NEW 36 MILLION 32 FIRST 28 COMPANY 27 token type: THEME unique tokens: 4,563 total rows: 5,523 average rows: 1.21 total size: 21,930 (21.42 KB) average size: 5 average frequency: 2.40 most frequent tokens: 881115 58 political geography 52 geography 52 United States 51 business and economics 50 abstract ideas and concepts 48 North America 48 science and technology 46 NKS 34 nulls 34
このレポートの断片化統計の部分は、次のとおりです。
----------------------------------------------------------------- FRAGMENTATION STATISTICS ----------------------------------------------------------------- total size of $I data: 116,772 (114.04 KB) $I rows: 16,259 estimated $I rows if optimal: 13,445 estimated row fragmentation: 17 % garbage docids: 15 estimated garbage size: 21,379 (20.88 KB) most fragmented tokens: telecommunications industry (THEME) 83 % science and technology (THEME) 83 % EMAIL (FIELD SECTION "SOURCE") 83 % DEC (FIELD SECTION "TIMESTAMP") 83 % electronic mail (THEME) 83 % computer networking (THEME) 83 % communications (THEME) 83 % 95 (FIELD SECTION "TIMESTAMP") 83 % HEADLINE (ZONE SECTION) 83 % 15 (FIELD SECTION "TIMESTAMP") 83 %
STAT_TYPEを指定したCTX_REPORT.INDEX_STATSの例
次に、EST_FRAG_STATS
統計タイプの出力例を示します。
var report clob;
begin
dbms_lob.createtemporary(:report, true);
ctx_report.index_stats(
index_name => 'tdrbps.idx',
report => :report,
report_format => 'XML',
stat_type => 'EST_FRAG_STATS'
);
end;
/
select :report from dual;
:REPORT
------------------------------------------------------------------------------
<CTXREPORT>
<INDEX_STATS>
<STAT_INDEX_NAME>"TDRBPS"."IDX"</STAT_INDEX_NAME>
<STAT_INDEX_STATS>
<STAT_STATISTIC NAME="Estimated Fragmentation Stats">50</STAT_STATISTIC>
</STAT_INDEX_STATS>
</INDEX_STATS>
</CTXREPORT>
次に、EST_FREQUENT_TOKENS
統計タイプの出力例を示します。
begin
dbms_lob.createtemporary(:report, true);
ctx_report.index_stats(
index_name => 'tdrbps.idx',
report => :report,
report_format => 'XML',
stat_type => 'EST_FREQUENT_TOKENS'
);
end;
/
select :report from dual;
:REPORT
------------------------------------------------------------------------------
<CTXREPORT>
<INDEX_STATS>
<STAT_INDEX_NAME>"TDRBPS"."IDX"</STAT_INDEX_NAME>
<STAT_INDEX_STATS>
<STAT_TOKEN_LIST NAME="Most Frequently Queried Tokens">
<STAT_TOKEN>
<STAT_TOKEN_TEXT>ORACLE</STAT_TOKEN_TEXT>
<STAT_TOKEN_TYPE>0:TEXT</STAT_TOKEN_TYPE>
<STAT_TOKEN_STATISTIC>2</STAT_TOKEN_STATISTIC>
</STAT_TOKEN>
<STAT_TOKEN>
<STAT_TOKEN_TEXT>DATABASE</STAT_TOKEN_TEXT>
<STAT_TOKEN_TYPE>0:TEXT</STAT_TOKEN_TYPE>
<STAT_TOKEN_STATISTIC>1</STAT_TOKEN_STATISTIC>
</STAT_TOKEN>
</STAT_TOKEN_LIST>
</STAT_INDEX_STATS>
</INDEX_STATS>
</CTXREPORT>
ノート:
<STAT_TOKEN_STATISTIC>
は、特定のトークンに対して問合せが実行された回数を示します。
次に、EST_SLOWEST_QUERIES
統計タイプの出力例を示します。
begin
dbms_lob.createtemporary(:report, true);
ctx_report.index_stats(
index_name => 'tdrbps.idx',
report => :report,
report_format => 'XML',
stat_type => 'EST_SLOWEST_QUERIES'
);
end;
/
select :report from dual;
:REPORT
------------------------------------------------------------------------------
<CTXREPORT>
<INDEX_STATS>
<STAT_INDEX_NAME>"TDRBPS"."IDX"</STAT_INDEX_NAME>
<STAT_INDEX_STATS>
<STAT_QUERY_LIST NAME="Slowest Queries">
<STAT_QUERY>
<STAT_QUERY_FULL>select count(*) from tbl where
contains(txt,'Oracle')>0</STAT_QUERY_FULL>
<STAT_QUERY_TEXT_PART>Oracle</STAT_QUERY_TEXT_PART>
<STAT_QUERY_TIME>114</STAT_QUERY_TIME>
<STAT_QUERY_HASH>2992140927</STAT_QUERY_HASH>
</STAT_QUERY>
<STAT_QUERY>
<STAT_QUERY_FULL>select count(*) from tbl where
contains(txt,'ora%')>0</STAT_QUERY_FULL>
<STAT_QUERY_TEXT_PART>ora%</STAT_QUERY_TEXT_PART>
<STAT_QUERY_TIME>4</STAT_QUERY_TIME>
<STAT_QUERY_HASH>2229259029</STAT_QUERY_HASH>
</STAT_QUERY>
<STAT_QUERY>
<STAT_QUERY_FULL>select count(*) from tbl where
contains(txt,'Database')>0</STAT_QUERY_FULL>
<STAT_QUERY_TEXT_PART>Database</STAT_QUERY_TEXT_PART>
<STAT_QUERY_TIME>2</STAT_QUERY_TIME>
<STAT_QUERY_HASH>1111113040</STAT_QUERY_HASH>
</STAT_QUERY>
</STAT_QUERY_LIST>
</STAT_INDEX_STATS>
</INDEX_STATS>
</CTXREPORT>
ノート:
-
<STAT_QUERY_FULL>
には、問合せ全体が含まれています。また、<STAT_QUERY_TEXT_PART>
には、問合せのOracle TextCONTAINS
句が含まれています。 -
<STAT_QUERY_TIME>
には、問合せの応答時間が含まれています。また、<STAT_QUERY_HASH>
には、問合せのハッシュ値が含まれています。
次に、EST_TOKENS_TO_OPTIMIZE
統計タイプの出力例を示します。
begin
dbms_lob.createtemporary(:report, true);
ctx_report.index_stats(
index_name => 'tdrbps.idx',
report => :report,
report_format => 'XML',
stat_type => 'EST_TOKENS_TO_OPTIMIZE'
);
end;
/
select :report from dual;
:REPORT
------------------------------------------------------------------------------
<CTXREPORT>
<INDEX_STATS>
<STAT_INDEX_NAME>"TDRBPS"."IDX"</STAT_INDEX_NAME><STAT_INDEX_STATS>
<STAT_TOKEN_LIST NAME="Best Tokens To Optimize">
<STAT_TOKEN>
<STAT_TOKEN_TEXT>ORACLE</STAT_TOKEN_TEXT>
<STAT_TOKEN_TYPE>0:TEXT</STAT_TOKEN_TYPE>
<STAT_TOKEN_STATISTIC>100</STAT_TOKEN_STATISTIC>
</STAT_TOKEN>
<STAT_TOKEN>
<STAT_TOKEN_TEXT>DATABASE</STAT_TOKEN_TEXT>
<STAT_TOKEN_TYPE>0:TEXT</STAT_TOKEN_TYPE>
<STAT_TOKEN_STATISTIC>50</STAT_TOKEN_STATISTIC>
</STAT_TOKEN>
</STAT_TOKEN_LIST>
</STAT_INDEX_STATS>
</INDEX_STATS>
</CTXREPORT>
ノート:
<STAT_TOKEN_STATISTIC>
は、特定のトークンの断片化を示しています。
ノート
これらのメタデータを利用できるのは、索引に対する推定統計(索引の断片化推定統計、推定問合せ頻度の高いトークン、推定される断片化と問合せ頻度が最も高いトークン、および特定の索引に対する推定実行速度が最も遅い問合せ)のQUERY_STATS
がオンに設定されている場合のみです。
CTX_REPORT.INDEX_STATS
は、dr$索引名$S表の情報も出力します。これは、セクション・データ(SDATA
)の表です。
13.9 QUERY_LOG_SUMMARY
ログ記録された問合せのレポートを取得します。
QUERY_LOG_SUMMARY
を使用して、ログ記録した問合せを分析できます。たとえば、大型動物のデータベースを検索するアプリケーションを使用している場合、データベースへの問合せを分析した結果、ユーザーが頻繁にmouseというワードを検索していることがわかったとします。この分析に基づき、mouseを検索すると、失敗した検索結果を戻すかわりに、ユーザーを小型動物のデータベースにリダイレクトするようアプリケーションを書き換えることも考えられます。
問合せの分析により、次のことがわかります。
-
発行された問合せ
-
成功した問合せ
-
失敗した問合せ
-
各問合せの発行回数
これらの要素を様々な方法で組み合せ、たとえばアプリケーションで失敗した問合せの上位50位までを調べることが可能です。
問合せのロギングはCTX_OUTPUT.START_QUERY_LOG
で開始され、CTX_OUTPUT.END_QUERY_LOG
で終了します。
ノート:
CTX_REPORT.QUERY_LOG_SUMMARY
を使用するには、CTXSYS
で接続する必要があります。
関連項目:
構文
procedure CTX_REPORT.QUERY_LOG_SUMMARY( logfile IN VARCHAR2, indexname IN VARCHAR2 DEFAULT NULL, result_table IN OUT NOCOPY QUERY_TABLE, row_num IN NUMBER, most_freq IN BOOLEAN DEFAULT TRUE, has_hit IN BOOLEAN DEFAULT TRUE );
- logfile
-
問合せが含まれているログ・ファイルの名前を指定します。Oracle Database 12c リリース2 (12.2)以降では、すべての問合せログがデータベース・トレース・ファイルに書き込まれまれるため、このパラメータは無視されます。
- indexname
-
サマリー・レポートを取得するCONTEXT索引の名前を指定します。
NULL
を指定すると、すべてのCONTEXT索引のサマリー・レポートがプロシージャによって提供されます。 - result_table
-
QUERY_LOG_SUMMARY
の結果の格納先となるTABLE OF RECORD
型のインメモリー表の名前を指定します。デフォルトは、システム・パラメータLOG_DIRECTORY
で指定した場所です。 - row_num
-
restabによって名付けられた表にレポートされる
QUERY_LOG_SUMMARY
からの結果の行数。たとえば、この数値が10、most_freqがTRUE、has_hitがTRUEの場合、プロシージャにより、頻度が上位10位までの成功した問合せ(ヒットが戻された問合せ)が戻されます。 - most_freq
-
QUERY_LOG_SUMMARY
によって最も頻度の高い、または頻度の低い問合せを戻すかを指定します。デフォルトは最も頻度の高い問合せです。most_freqがFALSE
に設定されている場合、最も頻度の低い成功した問合せがプロシージャによって戻されます。 - has_hit
-
QUERY_LOG_SUMMARY
により、成功した(ヒットを生成した)問合せ、または失敗した問合せのいずれを戻すかを指定します。デフォルトは成功した問合せです。has_hitをFALSE
に設定すると、失敗した問合せが戻されます。
例
次の例では、問合せログの使用例を示します。
まず、CTXSYS
として接続します。次に、2つの表を作成および移入して、それぞれ索引を作成します。
create table qlogtab1 (tk number primary key, text varchar2(2000)); insert into qlogtab1 values(1, 'The Roman name for France was Gaul.'); insert into qlogtab1 values(2, 'The Tour de France is held each summer.'); insert into qlogtab1 values(3, 'Jacques Anatole Thibault took the pen name Anatole France.'); create index idx_qlog1 on qlogtab1(text) indextype is ctxsys.context; create table qlogtab2 (tk number primary key, text varchar2(2000)); insert into qlogtab2 values(1, 'The Great Wall of China is about 2400 kilometers long'); insert into qlogtab2 values(2, 'Soccer dates back at least to 217 C.E.'); insert into qlogtab2 values(3, 'The Corn Palace is a tourist attraction in South Dakota.'); create index idx_qlog2 on qlogtab2(text) indextype is ctxsys.context;
query_log
というログを作成し、問合せのロギングを開始します。
exec ctx_output.start_query_log('query.log');
いくつかの問合せを行います(失敗する問合せも含めます)。
select text from qlogtab1 where contains(text, 'France',1)>0; select text from qlogtab1 where contains(text, 'cheese',1)>0; select text from qlogtab1 where contains(text, 'Text Wizard',1)>0; select text from qlogtab2 where contains(text, 'Corn Palace',1)>0; select text from qlogtab2 where contains(text, 'China',1)>0; select text from qlogtab1 where contains(text, 'Text Wizards',1)>0; select text from qlogtab2 where contains(text, 'South Dakota',1)>0; select text from qlogtab1 where contains(text, 'Text Wizard',1)>0; select text from qlogtab2 where contains(text, 'China',1)>0; select text from qlogtab1 where contains(text, 'Text Wizard',1)>0; select text from qlogtab2 where contains(text, 'company',1)>0; select text from qlogtab1 where contains(text, 'Text Wizard',1)>0; select text from qlogtab1 where contains(text, 'France',1)>0; select text from qlogtab1 where contains(text, 'database',1)>0; select text from qlogtab2 where contains(text, 'high-tech',1)>0; select text from qlogtab1 where contains(text, 'database',1)>0; select text from qlogtab1 where contains(text, 'France',1)>0; select text from qlogtab1 where contains(text, 'Japan',1)>0; select text from qlogtab1 where contains(text, 'Egypt',1)>0; select text from qlogtab1 where contains(text, 'Argentina',1)>0; select text from qlogtab1 where contains(text, 'Argentina',1)>0; select text from qlogtab1 where contains(text, 'Argentina',1)>0; select text from qlogtab1 where contains(text, 'Japan',1)>0; select text from qlogtab1 where contains(text, 'Egypt',1)>0; select text from qlogtab1 where contains(text, 'Air Shuttle',1)>0; select text from qlogtab1 where contains(text, 'Argentina',1)>0;
問合せが終了したら、問合せのロギングを終了します。
exec ctx_output.end_query_log;
QUERY_LOG_SUMMARY
を使用して問合せレポートを取得します。最初の例では、頻度が上位3位の成功した問合せを戻すよう指定します。まず、結果表を宣言します(the_queries
)。
set serveroutput on; declare the_queries ctx_report.query_table; begin ctx_report.query_log_summary('query.log', null, the_queries, row_num=>3, most_freq=>TRUE, has_hit=>TRUE); dbms_output.put_line('The 3 most frequent queries returning hits'); dbms_output.put_line('number of times query string'); for i in 1..the_queries.count loop dbms_output.put_line(the_queries(i).times||' '||the_queries(i).query); end loop; end; /
次の結果が戻されます。
The 3 most frequent queries returning hits number of times query string 3 France 2 China 1 Corn Palace
次に、idx_qlog1
に対する、頻度が上位3位の成功した問合せを戻すよう指定します。
declare the_queries ctx_report.query_table; begin ctx_report.query_log_summary('query.log', 'idx_qlog1', the_queries, row_num=>3, most_freq=>TRUE, has_hit=>TRUE); dbms_output.put_line('The 3 most frequent queries returning hits for index idx_qlog1'); dbms_output.put_line('number of times query string'); for i in 1..the_queries.count loop dbms_output.put_line(the_queries(i).times||' '||the_queries(i).query); end loop; end; /
Franceに対する問合せのみが成功したため、ctx_report.query_log_summary
によって次の結果が戻されます。
The 3 most frequent queries returning hits for index idx_qlog1 number of times query string 3 France
最後に、ヒットが戻されなかった、頻度が下位3位までの問合せ(つまり、失敗し、頻度が低かった問合せ)を戻すよう指定します。この場合、両方のCONTEXT索引に対する問合せを調べるため、indexnameパラメータにNULLを設定します。
declare the_queries ctx_report.query_table; begin ctx_report.query_log_summary('query.log', null, the_queries, row_num=>3, most_freq=>FALSE, has_hit=>FALSE); dbms_output.put_line('The 3 least frequent queries returning no hit'); dbms_output.put_line('number of times query string'); for i in 1..the_queries.count loop dbms_output.put_line(the_queries(i).times||' '||the_queries(i).query); end loop; end; /
次の結果が戻されます。
The 3 least frequent queries returning no hit number of times query string 1 high-tech 1 company 1 cheese
ArgentinaおよびJapanは複数回問い合されたため、このリストには含まれていません。また、Corn Palaceに対する問合せは成功したため、やはりこのリストには含まれていません。
13.10 TOKEN_INFO
デコードされたトークンに関する情報を表示するレポートを作成します。このプロシージャでは、トークンの情報全体がスキャンされるため、大規模なトークンの場合は実行時間が長くなる可能性があります。
この操作は、IN
OUT
CLOB
パラメータを指定したプロシージャとして、またはレポートをCLOB
で戻すファンクションとしてコールできます。
構文
procedure CTX_REPORT.TOKEN_INFO( index_name IN VARCHAR2, report IN OUT NOCOPY CLOB, token IN VARCHAR2, token_type IN NUMBER, part_name IN VARCHAR2 DEFAULT NULL, raw_info IN BOOLEAN DEFAULT FALSE, decoded_info IN BOOLEAN DEFAULT TRUE, report_format IN VARCHAR2 DEFAULT FMT_TEXT ); function CTX_REPORT.TOKEN_INFO( index_name IN VARCHAR2, token IN VARCHAR2, token_type IN NUMBER, part_name IN VARCHAR2 DEFAULT NULL, raw_info IN VARCHAR2 DEFAULT 'N', decoded_info IN VARCHAR2 DEFAULT 'Y', report_format IN VARCHAR2 DEFAULT FMT_TEXT ) return clob;
- index_name
-
索引の名前を指定します。
- report
-
レポートを書き込む
CLOB
ロケータを指定します。reportがNULLの場合は、セッション中に一時
CLOB
が作成されて戻ります。この一時CLOB
は、必要に応じてコール元で解放してください。report
CLOB
はレポートの生成前に切り捨てられます。したがって、既存の内容はこのコールによって上書きされます。トークンは、渡したトークン型によっては大/小文字が区別されます。 - token
-
トークン・テキストを指定します。
- token_type
-
トークン型を指定します。TOKEN_TYPEファンクションで戻される数値を使用できます。
THEME
、ZONE
、ATTR
、PATH
およびPATH
ATTR
のトークン型は、大/小文字が区別されます。これ以外のトークン型でも、大/小文字を区別する索引のレクサーを通じて渡された場合は、トークン入力で大/小文字が区別されます。
- part_name
-
索引パーティションの名前を指定します。
索引がローカル・パーティション索引である場合は、part_nameを指定する必要があります。
TOKEN_INFO
は、指定した索引パーティションのみに適用されます。 - raw_info
-
索引データの16進ダンプを含める場合は、
TRUE
を指定します。raw_infoをTRUE
に指定すると、token_info
列にRAWデータの16進ダンプが含まれます。 - decoded_info
-
デコードを指定し、DOCIDおよびオフセット・データを追加します。
decoded_info
にFALSEを指定すると、トークン情報はCTX_REPORT
によってデコードされません。これは、データのダンプのみを行う場合に便利です。 - report_format
-
レポートを'TEXT'または'XML'のいずれで生成するかを指定します。デフォルトはTEXTです。また、値に
CTX_REPORT.FMT_TEXT
またはCTX_REPORT.FMT_XML
も指定できます。
13.11 TOKEN_TYPE
英語名を数値のトークン型に変換する補助的なファンクションです。
token_info
、またはtoken_type
を取得するその他のCTX
APIで使用すると便利です。
function token_type( index_name in varchar2, type_name in varchar2 ) return number; TOKEN_TYPE_TEXT constant number := 0; TOKEN_TYPE_THEME constant number := 1; TOKEN_TYPE_ZONE_SEC constant number := 2; TOKEN_TYPE_ORIG constant number := 3, TOKEN_TYPE_ATTR_TEXT constant number := 4; TOKEN_TYPE_ATTR_SEC constant number := 5; TOKEN_TYPE_PREFIX constant number := 6; TOKEN_TYPE_PATH_SEC constant number := 7; TOKEN_TYPE_PATH_ATTR constant number := 8; TOKEN_TYPE_STEM constant number := 9;
- index_name
-
索引の名前を指定します。
- type_name
-
token_type
の英語名を指定します。次に、適切な入力文字列を示します。すべての入力で、大/小文字は区別されません。入力 意味 戻される型 TEXT
通常のテキスト・トークン
0
THEME
テーマ・トークン
1
ZONE SEC
ゾーン・トークン
2
ATTR TEXT
属性内のテキスト
4
ATTR SEC
属性セクション
5
PREFIX
プリフィックス・トークン
6
PATH SEC
パス・セクション
7
PATH ATTR
パス属性セクション
8
STEM
語幹トークン
9
FIELD <name> TEXT
フィールド・セクション
<name>
でのテキスト・トークン16-79
SORTABLE SDATA
Sortable
SDATA
セクション101
MDATA
MDATA
セクション400
FIELD <name> PREFIX
フィールド・セクション
<name>
でのプリフィックス・トークン616-916
FIELD <name> STEM
フィールド・セクション
<name>
での語幹トークン916-979
NDATA <name>
NDATA
型トークン200-299
TOKEN_TYPE_ATTR_TXT_PFIX
属性テキストのプリフィックス
604
TOKEN_TYPE_ATTR_TXT_STEM
属性テキストの語幹
904
FIELD
型では、索引メタデータを読み取る必要があります。したがって、この目的のためにコールが大量に発生する場合は、token_typeを繰返しコールするのではなく、ローカル変数に値をキャッシュした方が効率的です。定数型(0から9)にも、このパッケージで定義済の定数があります。
ノート
MDATA
トークンのトークン・タイプを取得する場合、CTX_REPORT.TOKEN_TYPE
は使用しないでください。かわりにMDATA演算子を使用してください。(「MDATA」を参照してください。)使用する構文は「MDATA
secname」です。
例
typenum := ctx_report.token_type('myindex', 'field author text');