1.14 Managing Statistics for the RDF Graphs and RDF Network
Statistics are critical to the performance of SPARQL queries and OWL inference against RDF data stored in an Oracle database.
Oracle Database Release 11g introduced SEM_APIS.ANALYZE_RDF_GRAPH, SEM_APIS.ANALYZE_INFERRED_GRAPH, and SEM_PERF.GATHER_STATS to analyze RDF data and keep statistics up to date. These APIs are straightforward to use and they are targeted at regular users who may not care about the internal details about table and partition statistics.
You can export, import, set, and delete the RDF graph and inferred graph statistics, and can export, import, and delete network statistics, using the following subprograms:
This section contains the following topics related to managing statistics for RDF graphs and the RDF network.
- Saving Statistics at the RDF Graph Level
- Restoring Statistics at the RDF Graph Level
- Saving Statistics at the Network Level
- Dropping Extended Statistics at the Network Level
- Restoring Statistics at the Network Level
- Setting Statistics at the RDF Graph Level
- Deleting Statistics at the RDF Graph Level
Parent topic: RDF Graph Overview
1.14.1 Saving Statistics at the RDF Graph Level
If queries and inference against an existing RDF graph are executed efficiently, as the owner of the RDF graph, you can save the statistics of the existing RDF graph.
-- 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');
You can also save the statistics of an inferred graph by using 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');
Parent topic: Managing Statistics for the RDF Graphs and RDF Network
1.14.2 Restoring Statistics at the RDF Graph Level
As the owner of an RDF graph, can restore the statistics that were previously saved with SEM_APIS.EXPORT_MODEL_STATS . This may be necessary if updates have been applied to this RDF graph and statistics have been re-collected. A change in statistics might cause a plan change to existing SPARQL queries, and if such a plan change is undesirable, then an old set of statistics can be restored.
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');
You can also restore the statistics of an inferred graph by using 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');
Parent topic: Managing Statistics for the RDF Graphs and RDF Network
1.14.3 Saving Statistics at the Network Level
You can save statistics at the network level.
-- 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');
Parent topic: Managing Statistics for the RDF Graphs and RDF Network
1.14.4 Dropping Extended Statistics at the Network Level
By default, SEM_PERF.GATHER_STATS creates extended statistics with column groups on the RDF_LINK$ table. The privileged user from Saving Statistics at the Network Level can drop these column groups using SEM_PERF.DROP_EXTENDED_STATS.
connect RDFUSER/<password> execute sem_perf.drop_extended_stats(network_owner=>'RDFUSER', network_name=>'NET1');
See also the information about managing extended statistics in Oracle Database SQL Tuning Guide.
Parent topic: Managing Statistics for the RDF Graphs and RDF Network
1.14.5 Restoring Statistics at the Network Level
The privileged user from Saving Statistics at the Network Level can restore the network level statistics using 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');
Parent topic: Managing Statistics for the RDF Graphs and RDF Network
1.14.6 Setting Statistics at the RDF Graph Level
As the owner of an RDF graph, you can manually adjust the statistics for this RDF graph. (However, before you adjust statistics, you should save the statistics first so that they can be restored if necessary.) The following example sets two metrics: number of rows and number of blocks for the RDF graph.
execute sem_apis.set_model_stats('TEST', numrows=>10, numblks=>1,no_invalidate=>false,network_owner=>'RDFUSER',network_name=>'NET1');
You can also set the statistics for the inferred graph by using 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');
Parent topic: Managing Statistics for the RDF Graphs and RDF Network
1.14.7 Deleting Statistics at the RDF Graph Level
Removing statistics can also have an impact on execution plans. As owner of an RDF graph, you can remove the statistics for the graph.
execute sem_apis.delete_model_stats('TEST', no_invalidate=> false, network_owner=>'RDFUSER', network_name=>'NET1');
You can also remove the statistics for the inferred graph by using SEM_APIS.DELETE_ENTAILMENT_STATS. (However, before you remove statistics of an RDF graph or an inferred graph, you should save the statistics first so that they can be restored if necessary.)
execute sem_apis.delete_entailment_stats('TEST_INF', no_invalidate=> false, network_owner=>'RDFUSER', network_name=>'NET1');
Parent topic: Managing Statistics for the RDF Graphs and RDF Network