1.14 RDFグラフおよびRDFネットワークの統計の管理

統計は、Oracle Databaseに格納されているRDFデータに対するSPARQL問合せおよびOWL推論のパフォーマンスに重要な意味を持ちます。

Oracle Databaseリリース11gでは、RDFデータを分析し、統計を最新に保持するために、SEM_APIS.ANALYZE_RDF_GRAPHSEM_APIS.ANALYZE_INFERRED_GRAPHおよびSEM_PERF.GATHER_STATSが導入されています。これらのAPIは使用しやすく、表およびパーティション統計の内部的な詳細に関心がない一般ユーザーを対象としています。

次のサブプログラムを使用して、RDFグラフおよび推論グラフの統計をエクスポート、インポート、設定および削除し、ネットワーク統計をエクスポート、インポートおよび削除できます。

この項では、RDFグラフおよびRDFネットワークの統計の管理に関する次のトピックについて説明します。

1.14.1 RDFグラフ・レベルでの統計の保存

既存のRDFグラフに対する問合せおよび推論が効率的に実行されている場合は、RDFグラフの所有者として、既存のRDFグラフの統計を保存できます。

-- Login as the RDF graph owner (for example, SCOTT)
-- Create a stats table. This is required.
execute dbms_stats.create_stat_table('scott','rdf_stat_tab');
 
-- Now export the statistics of RDF graph TEST
execute sem_apis.export_model_stats('TEST','rdf_stat_tab', 'model_stat_saved_on_AUG_10', true, 'SCOTT', 'OBJECT_STATS', network_owner=>'RDFUSER', network_name=>'NET1');

また、SEM_APIS.EXPORT_ENTAILMENT_STATSを使用して、推論グラフの統計情報を保存できます。

execute sem_apis.create_inferred_graph('test_inf',sem_models('test'),sem_rulebases('owl2rl'),0,null,network_owner=>'RDFUSER',network_name=>'NET1');
PL/SQL procedure successfully completed.
 
execute sem_apis.export_entailment_stats('TEST_INF','rdf_stat_tab', 'inf_stat_saved_on_AUG_10', true, 'SCOTT', 'OBJECT_STATS', network_owner=>'RDFUSER', network_name=>'NET1');

1.14.2 RDFグラフ・レベルでの統計のリストア

RDFグラフの所有者として、以前にSEM_APIS.EXPORT_MODEL_STATSに保存した統計をリストアできます。これは、このRDFグラフの更新がこのRDFグラフに適用され、統計が再収集された場合に必要になることがあります。統計に変更があると既存のSPARQL問合せの計画変更が生じることがあり、このような計画変更を望まない場合には、古いセットの統計をリストアできます。

execute sem_apis.import_model_stats('TEST','rdf_stat_tab', 'model_stat_saved_on_AUG_10', true, 'SCOTT', false, true, 'OBJECT_STATS', network_owner=>'RDFUSER', network_name=>'NET1');

また、SEM_APIS.IMPORT_ENTAILMENT_STATSを使用して、推論グラフの統計をリストアできます。

execute sem_apis.import_entailment_stats('TEST','rdf_stat_tab', 'inf_stat_saved_on_AUG_10', true, 'SCOTT', false, true, 'OBJECT_STATS', network_owner=>'RDFUSER', network_name=>'NET1');

1.14.3 ネットワーク・レベルでの統計の保存

統計はネットワーク・レベルで保存できます。

-- Network owners and DBAs have privileges to gather network-wide 
-- statistics with the SEM_PERF package.
--
-- This example assumes a schema-private RDF network named NET1
-- owned by RDFUSER.
--

conn RDFUSER/<password>
 
execute dbms_stats.create_stat_table('RDFUSER','rdf_stat_tab');
 
--
-- This API call will save the statistics of both the RDF_VALUE$ table
-- and RDF_LINK$ table
--
execute sem_perf.export_network_stats('rdf_stat_tab', 'NETWORK_ALL_saved_on_Aug_10', true, 'RDFUSER', 'OBJECT_STATS', network_owner=>'RDFUSER', network_name=>'NET1');
 
--
-- Alternatively, you can save statistics of only the RDF_VALUE$ table
--
execute sem_perf.export_network_stats('rdf_stat_tab', 'NETWORK_VALUE_TAB_saved_on_Aug_10', true, 'RDFUSER', 'OBJECT_STATS', options=> mdsys.sdo_rdf.VALUE_TAB_ONLY, network_owner=>'RDFUSER', network_name=>'NET1');
 
--
-- Or, you can save statistics of only the RDF_LINK$ table
--
execute sem_perf.export_network_stats('rdf_stat_tab', 'NETWORK_LINK_TAB_saved_on_Aug_10', true, 'RDFUSER', 'OBJECT_STATS', options=> mdsys.sdo_rdf.LINK_TAB_ONLY, network_owner=>'RDFUSER', network_name=>'NET1');

1.14.4 ネットワーク・レベルでの拡張統計の削除

デフォルトでは、SEM_PERF.GATHER_STATSが、RDF_LINK$表の列グループを使用して拡張統計を作成します。ネットワーク・レベルでの統計の保存の特権ユーザーは、SEM_PERF.DROP_EXTENDED_STATSを使用して、これらの列グループを削除できます。

connect RDFUSER/<password>
execute sem_perf.drop_extended_stats(network_owner=>'RDFUSER', network_name=>'NET1');

『Oracle Database SQLチューニング・ガイド』を参照して、拡張統計の管理の詳細も確認してください

1.14.5 ネットワーク・レベルでの統計のリストア

「ネットワーク・レベルでの統計の保存」の特権ユーザーは、SEM_PERF.IMPORT_NETWORK_STATSを使用して、ネットワーク・レベル統計をリストアできます。

conn RDFUSER/<password>
 
execute sem_perf.import_network_stats('rdf_stat_tab', 'NETWORK_ALL_saved_on_Aug_10', true, 'RDFUSER', false, true, 'OBJECT_STATS', network_owner=>'RDFUSER', network_name=>'NET1');

1.14.6 RDFグラフ・レベルでの統計の設定

RDFグラフの所有者は、このRDFグラフの統計を手動で調整できます。(ただし、統計を調整する前に、統計を必要に応じてリストアできるように先に保存しておく必要があります。)次の例では、RDFグラフの行数とブロック数の2つのメトリックを設定します。

execute sem_apis.set_model_stats('TEST', numrows=>10, numblks=>1,no_invalidate=>false,network_owner=>'RDFUSER',network_name=>'NET1');

また、SEM_APIS.SET_ENTAILMENT_STATSを使用して、推論グラフの統計を設定できます。

execute sem_apis.set_entailment_stats('TEST_INF', numrows=>10, numblks=>1,no_invalidate=>false,network_owner=>'RDFUSER',network_name=>'NET1');

1.14.7 RDFグラフ・レベルでの統計の削除

統計の削除も実行計画に影響を及ぼすことがあります。RDFグラフの所有者として、グラフの統計を削除できます。

execute sem_apis.delete_model_stats('TEST', no_invalidate=> false, network_owner=>'RDFUSER', network_name=>'NET1');

また、SEM_APIS.DELETE_ENTAILMENT_STATSを使用して、推論グラフの統計を削除できます。(ただし、RDFグラフまたは推論グラフの統計を削除する前に、統計を必要に応じてリストアできるように先に保存しておく必要があります。)

execute sem_apis.delete_entailment_stats('TEST_INF', no_invalidate=> false, network_owner=>'RDFUSER', network_name=>'NET1');