%META:TOPICPARENT{name="VirtTipsAndTricksGuide"}%
---+ Virtuoso Diagnostics for Query Optimization
Queries involving a large number of possible plans may run out of memory during optimization. There
are a number of settings that influence query optimization memory utilization.
These are set in the virtuoso.ini
file, or can be altered on a running system with the
[[http://docs.openlinksw.com/virtuoso/fn_dbf_set.html][__dbf_set()]]
function.
| *INI section* | *INI param name* | *default value* | *__dbf_set flag_name* | *__dbf_set flag_name description* |
| Parameters | MaxMemPoolSize
| 200000000
| sqlo_max_mp_size
| The sqlo_max_mp_size
is a size limit in bytes for transient memory consumption. Increasing this may help. The sqlo_max_mp_size
should be over 10M; increasing this over 100M is seldom useful but can be tried. |
| Parameters | MaxOptimizeLayouts
| 1000
| sqlo_max_layouts
| Decreasing sqlo_max_layouts
will reduce the number of plans tried, hence save memory. Reasonable values for sqlo_max_layouts
are 0 for no limit, or somewhere in excess of 500. |
| Parameters | StopCompilerWhenXOverRunTime
| 0
| sqlo_compiler_exceeds_run_factor
| Setting sqlo_compiler_exceeds_run_factor
to 1 will stop opttimization once the best plan is expected to take less time than the amount of time spent optimizing so far. |
| Flags | enable_joins_only
| 1
| enable_joins_only
| Setting enable_joins_only
will cause the optimizer to only consider next plan candidates that are connected by a join to the existing partial plan. In other words, no [[http://dbpedia.org/resource/Cartesian_product][Cartesian products]] will be considered. This may save some space and time. Note: This option is now the default with 3215
+ builds and there are no known cases when it should be set to 0. |
When reporting issues with query optimization, it will be useful to include statistics from the database
in order to facilitate reproducing the effect. The [[http://docs.openlinksw.com/virtuoso/fn_stat_export.html][stat_export()]]
function produces a statistics summary that can be read back into another database with the
[[http://docs.openlinksw.com/virtuoso/fn_stat_import.html][stat_import()]]
function.
* To export statistics:
string_to_file ('stat.dv', serialize(stat_export()), -2);
or
exp_stat_to_file ('stat.dv'); which does not have 10MB file size limit
* To load exported statistics into a database:
stat_import (deserialize (file_to_string ('stat.dv')));
When exporting statistics as part of bug reporting, make sure to run the queries exhibiting the problem before exporting the stats. The queries drive statistics gathering.
---++Related
* [[VirtTipsAndTricksGuide][Virtuoso Tips and Tricks Collection]]
* [[http://docs.openlinksw.com/virtuoso/sqloptimizer.html][Virtuoso SQL Optimization]]