.. _parameter_files:

PyTables parameter files
========================

.. currentmodule:: tables.parameters

PyTables issues warnings when certain limits are exceeded.  Those limits are
not intrinsic limitations of the underlying software, but rather are
proactive measures to avoid large resource consumptions.  The default limits
should be enough for most of cases, and users should try to respect them.
However, in some situations, it can be convenient to increase (or decrease)
these limits.

Also, and in order to get maximum performance, PyTables implements a series
of sophisticated features, like I/O buffers or different kind of caches (for
nodes, chunks and other internal metadata).  These features comes with a
default set of parameters that ensures a decent performance in most of
situations.  But, as there is always a need for every case, it is handy to
have the possibility to fine-tune some of these parameters.

Because of these reasons, PyTables implements a couple of ways to change the
values of these parameters.  All the *tunable* parameters live in the
:file:`tables/parameters.py`.  The user can choose to change them in the
parameter files themselves for a global and persistent change.  Moreover, if
he wants a finer control, he can pass any of these parameters directly to the
:func:`tables.open_file` function, and the new parameters will only take
effect in the corresponding file (the defaults will continue to be in the
parameter files).

A description of all of the tunable parameters follows.  As the defaults
stated here may change from release to release, please check with your actual
parameter files so as to know your actual default values.

.. warning::

    Changing the next parameters may have a very bad effect in the resource
    consumption and performance of your PyTables scripts.

    Please be careful when touching these!


Tunable parameters in parameters.py
-----------------------------------

Recommended maximum values
~~~~~~~~~~~~~~~~~~~~~~~~~~
.. autodata:: MAX_COLUMNS

.. autodata:: MAX_NODE_ATTRS

.. autodata:: MAX_GROUP_WIDTH

.. autodata:: MAX_TREE_DEPTH

.. autodata:: MAX_UNDO_PATH_LENGTH


Cache limits
~~~~~~~~~~~~
.. autodata:: CHUNK_CACHE_NELMTS

.. autodata:: CHUNK_CACHE_PREEMPT

.. autodata:: CHUNK_CACHE_SIZE

.. autodata:: COND_CACHE_SLOTS

.. autodata:: METADATA_CACHE_SIZE

.. autodata:: NODE_CACHE_SLOTS


Parameters for the different internal caches
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. autodata:: BOUNDS_MAX_SIZE

.. autodata:: BOUNDS_MAX_SLOTS

.. autodata:: ITERSEQ_MAX_ELEMENTS

.. autodata:: ITERSEQ_MAX_SIZE

.. autodata:: ITERSEQ_MAX_SLOTS

.. autodata:: LIMBOUNDS_MAX_SIZE

.. autodata:: LIMBOUNDS_MAX_SLOTS

.. autodata:: TABLE_MAX_SIZE

.. autodata:: SORTED_MAX_SIZE

.. autodata:: SORTEDLR_MAX_SIZE

.. autodata:: SORTEDLR_MAX_SLOTS


Parameters for general cache behaviour
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. warning::

    The next parameters will not take any effect if passed to the open_file()
    function, so they can only be changed in a *global* way.  You can change
    them in the file, but this is strongly discouraged unless you know well
    what you are doing.

.. autodata:: DISABLE_EVERY_CYCLES

.. autodata:: ENABLE_EVERY_CYCLES

.. autodata:: LOWEST_HIT_RATIO


Parameters for the I/O buffer in Leaf objects
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. autodata:: IO_BUFFER_SIZE

.. autodata:: BUFFER_TIMES


Miscellaneous
~~~~~~~~~~~~~

.. autodata:: EXPECTED_ROWS_EARRAY

.. autodata:: EXPECTED_ROWS_TABLE

.. autodata:: PYTABLES_SYS_ATTRS

.. autodata:: MAX_NUMEXPR_THREADS

.. autodata:: MAX_BLOSC_THREADS

.. autodata:: USER_BLOCK_SIZE

.. autodata:: ALLOW_PADDING


HDF5 driver management
~~~~~~~~~~~~~~~~~~~~~~

.. autodata:: DRIVER

.. autodata:: DRIVER_DIRECT_ALIGNMENT

.. autodata:: DRIVER_DIRECT_BLOCK_SIZE

.. autodata:: DRIVER_DIRECT_CBUF_SIZE

.. autodata:: DRIVER_CORE_INCREMENT

.. autodata:: DRIVER_CORE_BACKING_STORE

.. autodata:: DRIVER_CORE_IMAGE

.. autodata:: DRIVER_SPLIT_META_EXT

.. autodata:: DRIVER_SPLIT_RAW_EXT
