ClickHouse/docs/ru/operations/server_settings/settings.rst
BayoNet f17c3afef7 New part "Server configuration parameters" of the document is added.
Other changes are made related to this new part.
2017-07-03 17:00:45 +03:00

804 lines
39 KiB
ReStructuredText
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

.. _server_settings-builtin_dictionaries_reload_interval:
builtin_dictionaries_reload_interval
------------------------------------
Интервал (в секундах) перезагрузки встроенных словарей.
ClickHouse перезагружает встроенные словари с заданным интервалом. Это позволяет править словари "на лету" без перезапуска сервера.
Значение по умолчанию - 3600.
**Пример**
.. code-block:: xml
<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
.. _server_settings-compression:
compression
-----------
Настройки компрессии данных.
.. warning:: Не используйте, если вы только начали работать с ClickHouse.
Общий вид конфигурации:
.. code-block:: xml
<compression>
<case>
<parameters/>
</case>
...
</compression>
Можно сконфигурировать несколько разделов ``<case>``.
Поля блока ``<case>``:
+---------------------+--------------------------------------------------------------------------+
| Параметр | Описание |
+=====================+==========================================================================+
| min_part_size | Минимальный размер части таблицы. |
+---------------------+--------------------------------------------------------------------------+
| min_part_size_ratio | Отношение размера минимальной части таблицы к полному размеру таблицы. |
+---------------------+--------------------------------------------------------------------------+
| method | Метод сжатия. Возможные значения: ``lz4``, ``zstd`` (экспериментальный). |
+---------------------+--------------------------------------------------------------------------+
ClickHouse проверит условия ``min_part_size`` и ``min_part_size_ratio`` и выполнит те блоки ``case``, для которых условия совпали. Если ни один ``<case>`` не подходит, то ClickHouse применит алгоритм сжатия ``lz4``.
**Пример**
.. code-block:: xml
<compression incl="clickhouse_compression">
<case>
<min_part_size>10000000000</min_part_size>
<min_part_size_ratio>0.01</min_part_size_ratio>
<method>zstd</method>
</case>
</compression>
.. _server_settings-default_database:
default_database
----------------
База данных по умолчанию.
Перечень баз данных можно получить запросом :ref:`query_language_queries_show_databases`.
**Пример**
.. code-block:: xml
<default_database>default</default_database>
.. _server_settings-default_profile:
default_profile
---------------
Профиль настроек по умолчанию.
Профили настроек находятся в файле, указанном в параметре :ref:`server_settings-users_config`.
**Пример**
.. code-block:: xml
<default_profile>default</default_profile>
.. _server_settings-dictionaries_config:
dictionaries_config
-------------------
Конфигурация внешних словарей.
Смотрите раздел :ref:`dicts-external_dicts`.
**Пример**
.. code-block:: xml
<dictionaries_config>*_dictionary.xml</dictionaries_config>
.. _server_settings-dictionaries_lazy_load:
dictionaries_lazy_load
----------------------
Отложенная загрузка словарей.
С установленным параметром словари подгружаются не при запуске сервера, а при первом обращении.
**Пример**
.. code-block:: xml
<dictionaries_lazy_load>true</dictionaries_lazy_load>
.. _server_settings-graphite:
graphite
--------
Отправка даных в `Graphite <https://github.com/graphite-project>`_.
Настройки:
+----------------------+------------------------------------------------------------------------------+
| Настройка | Описание |
+======================+==============================================================================+
| host | Сервер Graphite. |
+----------------------+------------------------------------------------------------------------------+
| port | Порт сервера Graphite. |
+----------------------+------------------------------------------------------------------------------+
| interval | Период отправки в секундах. |
+----------------------+------------------------------------------------------------------------------+
| timeout | Таймаут отправки данных в секундах. |
+----------------------+------------------------------------------------------------------------------+
| root_path | Префикс для ключей. |
+----------------------+------------------------------------------------------------------------------+
| metrics | Отправка данных из таблицы :ref:`system_tables-system.metrics`. |
+----------------------+------------------------------------------------------------------------------+
| events | Отправка данных из таблицы :ref:`system_tables-system.events`. |
+----------------------+------------------------------------------------------------------------------+
| asynchronous_metrics | Отправка данных из таблицы :ref:`system_tables-system.asynchronous_metrics`. |
+----------------------+------------------------------------------------------------------------------+
Можно определить несколько секций ``<graphite>``, например, для передачи различных данных с различной частотой.
**Пример**
.. code-block:: xml
<graphite>
<host>localhost</host>
<port>42000</port>
<timeout>0.1</timeout>
<interval>60</interval>
<root_path>one_min</root_path>
<metrics>true</metrics>
<events>true</events>
<asynchronous_metrics>true</asynchronous_metrics>
</graphite>
.. _server_settings-graphite_rollup:
graphite_rollup
---------------
Настройка прореживания данных для Graphite.
Подробнее читайте в разделе :ref:`table_engines-graphitemergetree`.
**Пример**
.. code-block:: xml
<graphite_rollup_example>
<default>
<function>max</function>
<retention>
<age>0</age>
<precision>60</precision>
</retention>
<retention>
<age>3600</age>
<precision>300</precision>
</retention>
<retention>
<age>86400</age>
<precision>3600</precision>
</retention>
</default>
</graphite_rollup_example>
.. _server_settings-http_port:
http_port/https_port
--------------------
Порт для обращений к серверу по протоколу HTTP(s).
Если указан ``https_port``, то требуется конфигурирование :ref:`server_settings-openSSL`.
Если указан ``http_port``, то настройка :ref:`server_settings-openSSL` игнорируется, даже если она задана.
**Пример**
.. code-block:: xml
<https>0000</https>
.. _server_settings-http_server_default_response:
http_server_default_response
----------------------------
Страница, показываемая по умолчанию, при обращении к HTTP(s) серверу ClickHouse.
**Пример**
Показывает ``https://tabix.io/`` при обращенинии к ``http://localhost:http_port``.
.. code-block:: xml
<http_server_default_response>
<![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]>
</http_server_default_response>
.. _server_settings-include_from:
include_from
------------
Путь к файлу с подстановками.
Подробности смотрите в разделе :ref:`configuration_files`.
**Пример**
.. code-block:: xml
<include_from>/etc/metrica.xml</include_from>
.. _server_settings-interserver_http_port:
interserver_http_port
---------------------
Порт для обмена между серверами ClickHouse.
**Пример**
.. code-block:: xml
<interserver_http_port>9009</interserver_http_port>
.. _server_settings-interserver_http_host:
interserver_http_host
---------------------
Имя хоста, которое могут использовать другие серверы для обращения к этому.
Если не указано, то определяется аналогично команде ``hostname -f``.
Удобно использовать, чтобы отвязаться от конкретного сетевого интерфейса.
**Пример**
.. code-block:: xml
<interserver_http_host>example.yandex.ru</interserver_http_host>
.. _server_settings-keep_alive_timeout:
keep_alive_timeout
------------------
Время в миллисекундах, в течение которого ClickHouse ожидает входящих запросов прежде, чем закрыть соединение.
**Пример**
.. code-block:: xml
<keep_alive_timeout>3</keep_alive_timeout>
.. _server_settings-listen_host:
listen_host
-----------
Ограничение по хостам, с которых может прийти запрос. Если необходимо, чтобы сервер отвечал всем, то надо указать ``::``.
Примеры:
.. code-block:: xml
<listen_host>::1</listen_host>
<listen_host>127.0.0.1</listen_host>
.. _server_settings-logger:
logger
------
Настройки логгирования.
Ключи:
+----------+-----------------------------------------------------------------------------------------------------------+
| Ключ | Описание |
+==========+===========================================================================================================+
| level | Уровень логгирования. Допустимые значения: ``trace``, ``debug``, ``information``, ``warning``, ``error``. |
+----------+-----------------------------------------------------------------------------------------------------------+
| log | Файл лога. Содержит все записи согласно ``level``. |
+----------+-----------------------------------------------------------------------------------------------------------+
| errorlog | Файл лога ошибок. |
+----------+-----------------------------------------------------------------------------------------------------------+
| size | Размер файла. Действует для ``log`` и ``errorlog``. Как только файл достиг размера ``size``, |
| | ClickHouse архивирует и переименовывает его, а на его месте создает новый файл лога. |
+----------+-----------------------------------------------------------------------------------------------------------+
| count | Количество заархивированных файлов логов, которые сохраняет ClickHouse. |
+----------+-----------------------------------------------------------------------------------------------------------+
**Пример**
.. code-block:: xml
<logger>
<level>trace</level>
<log>/var/log/clickhouse-server/clickhouse-server.log</log>
<errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog>
<size>1000M</size>
<count>10</count>
</logger>
.. _server_settings-macros:
macros
------
Подстановки параметров реплицируемых таблиц.
Можно не указывать, если реплицируемых таблицы не используются.
Подробнее смотрите в разделе :ref:`table_engines-replication-creation_of_rep_tables`.
**Пример**
.. code-block:: xml
<macros incl="macros" optional="true" />
.. _server_settings-mark_cache_size:
mark_cache_size
---------------
Приблизительный размер (в байтах) кеша "засечек", используемых движками таблиц семейства :ref:`table_engines-mergetree`.
Кеш общий для сервера, память выделяется по мере необходимости. Кеш не может быть меньше, чем 5368709120.
**Пример**
.. code-block:: xml
<mark_cache_size>5368709120</mark_cache_size>
.. _server_settings-max_concurrent_queries:
max_concurrent_queries
----------------------
Максимальное количество одновременно обрабатываемых запросов.
**Пример**
.. code-block:: xml
<max_concurrent_queries>100</max_concurrent_queries>
.. _server_settings-max_connections:
max_connections
---------------
Максимальное количество входящих соединений.
**Пример**
.. code-block:: xml
<max_connections>4096</max_connections>
.. _server_settings-max_open_files:
max_open_files
--------------
Максимальное количество открытых файлов.
По умолчанию - ``maximum``.
Рекомендуется использовать в Mac OS X, поскольу функция ``getrlimit()`` возвращает некорректное значение.
**Пример**
.. code-block:: xml
<max_open_files>262144</max_open_files>
.. _server_settings-max_table_size_to_drop:
max_table_size_to_drop
----------------------
Ограничение на удаление таблиц.
Если размер таблицы семейства :ref:`table_engines-mergetree` превышает ``max_table_size_to_drop`` (в байтах), то ее нельзя удалить запросом DROP.
Если таблицу все же необходимо удалить, не перезапуская при этом сервер ClickHouse, то необходимо создать файл ``<clickhouse-path>/flags/force_drop_table`` и выполнить запрос DROP.
Значение по умолчанию - 50GB.
Значение 0 означает, что можно удалять все таблицы без ограничений.
**Пример**
.. code-block:: xml
<max_table_size_to_drop>0</max_table_size_to_drop>
.. _server_settings-merge_tree:
merge_tree
----------
Тонкая настройка таблиц семейства :ref:`table_engines-mergetree`.
Подробнее смотрите в заголовочном файле MergeTreeSettings.h.
**Пример**
.. code-block:: xml
<merge_tree>
<max_suspicious_broken_parts>5</max_suspicious_broken_parts>
</merge_tree>
.. _server_settings-openSSL:
openSSL
-------
Настройки клиента/сервера SSL.
Поддержку SSL обеспечивает библиотека ``libpoco``. Описание интерфейса находится в файле `SSLManager.h <https://github.com/yandex/ClickHouse/blob/master/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/SSLManager.h>`_
Ключи настроек сервера/клиента:
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| Ключ | Описание |
+=============================+==========================================================================================================================+
| privateKeyFile | Путь к файлу с секретным ключем сертификата в формате PEM. Файл может содержать ключ и сертификат одновременно. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| certificateFile | Путь к файлу сертификата клиента/сервера в формате PEM. Можно не указывать, если ``privateKeyFile`` содержит сертификат. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| caConfig | Путь к файлу или каталогу, которые содержат доверенные корневые сертификаты. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| verificationMode | Способ проверки сертификатов узла. Подробности находятся в описании класса |
| | `Context <https://github.com/yandex/ClickHouse/blob/master/contrib/libpoco/NetSSL_OpenSSL/include/Poco/Net/Context.h>`_. |
| | Допустимые значения: ``none``, ``relaxed``, ``strict``, ``once``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| verificationDepth | Максимальная длина верификационой цепи. |
| | Верификация завершится ошибкой, если длина цепи сертификатов превысит установленное значение. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| loadDefaultCAFile | Признак того, что будут использоваться встроенные CA-сертификаты для OpenSSL. Допустимые значения: ``true``, ``false``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| cipherList | Поддерживаемые OpenSSL-шифры. Например, ``ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| cacheSessions | Включение/выключение кеширования сессии. |
| | Использовать обязательно вместе с ``sessionIdContext``. Допустимые значения: ``true``, ``false``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| sessionIdContext | Уникальный набор произвольных символов, которые сервер добавляет к каждому сгенерированному идентификатору. |
| | Длина строки не должна превышать ``SSL_MAX_SSL_SESSION_ID_LENGTH``. Рекомендуется к использованию всегда, |
| | поскольку позволяет избежать проблем как в случае, если сервер кеширует сессию, |
| | так и если клиент затребовал кеширование. По умолчанию ``${application.name}``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| sessionCacheSize | Максимальное количество сессий, которые кэширует сервер. |
| | По умолчанию - 1024\*20. 0 - неограниченное количество сессий. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| sessionTimeout | Время кеширования сессии на севрере. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| extendedVerification | Автоматическая расширенная проверка сертификатов после завершении сессии. |
| | Допустимые значения: ``true``, ``false``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| requireTLSv1 | Требование соединения TLSv1. Допустимые значения: ``true``, ``false``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| requireTLSv1_1 | Требование соединения TLSv1.1. Допустимые значения: ``true``, ``false``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| requireTLSv1_2 | Требование соединения TLSv1.2. Допустимые значения: ``true``, ``false``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| fips | Активация режима OpenSSL FIPS. Поддерживается, если версия OpenSSL, с которой собрана библиотека поддерживает fips. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| privateKeyPassphraseHandler | Класс (подкласс PrivateKeyPassphraseHandler)запрашивающий кодовую фразу доступа к |
| | секретному ключу. Например, ``<privateKeyPassphraseHandler>`` ``<name>KeyFileHandler</name>`` |
| | ``<options><password>test</password></options>`` ``</privateKeyPassphraseHandler>``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| invalidCertificateHandler | Класс (подкласс CertificateHandler) для подтвеждения невалидных сертификатов. |
| | Например, ``<invalidCertificateHandler> <name>ConsoleCertificateHandler</name> </invalidCertificateHandler>``. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| disableProtocols | Запрещенные к искользованию протоколы. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
| preferServerCiphers | Предпочтение серверных шифров на клиенте. |
+-----------------------------+--------------------------------------------------------------------------------------------------------------------------+
**Пример настройки:**
.. code-block:: xml
<openSSL>
<server>
<!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt -->
<certificateFile>/etc/clickhouse-server/server.crt</certificateFile>
<privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile>
<!-- openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096 -->
<dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile>
<verificationMode>none</verificationMode>
<loadDefaultCAFile>true</loadDefaultCAFile>
<cacheSessions>true</cacheSessions>
<disableProtocols>sslv2,sslv3</disableProtocols>
<preferServerCiphers>true</preferServerCiphers>
</server>
<client>
<loadDefaultCAFile>true</loadDefaultCAFile>
<cacheSessions>true</cacheSessions>
<disableProtocols>sslv2,sslv3</disableProtocols>
<preferServerCiphers>true</preferServerCiphers>
<!-- Use for self-signed: <verificationMode>none</verificationMode> -->
<invalidCertificateHandler>
<!-- Use for self-signed: <name>AcceptCertificateHandler</name> -->
<name>RejectCertificateHandler</name>
</invalidCertificateHandler>
</client>
</openSSL>
.. _server_settings-part_log:
part_log
--------
Логгирование событий, связанных с данными типа :ref:`table_engines-mergetree`. Например, события добавления или мержа данных. Лог можно использовать для симуляции алгоритмов слияния, чтобы сравнивать их характеристики. Также, можно визуализировать процесс слияния.
Запросы логгируются не в отдельный файл, а в таблицу ClickHouse.
Столбцы лога:
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| Столбец | Описание |
+===============+=======================================================================================================================+
| event_time | Дата события. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| duration_ms | Время события. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| event_type | Тип события. 1 - кусок новый, 2 - результат мержа, 3 - кусок скачан с реплики, 4 - кусок удаляется. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| database_name | Имя базы даных. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| table_name | Имя таблицы. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| part_name | Имя куска данных. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| size_in_bytes | Размер куска данных в байтах. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| merged_from | Массив имён кусков, из которых он образован при мерже (так же заполняется в случае скачивания уже смерженного куска). |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
| merge_time_ms | Время, потраченное на мерж. |
+---------------+-----------------------------------------------------------------------------------------------------------------------+
При настройке логгирования используются следующие параметры:
+-----------------------------+-----------------------------------------------------+
| Параметр | Описание |
+=============================+=====================================================+
| database | Имя базы данных. |
+-----------------------------+-----------------------------------------------------+
| table | Имя таблицы. |
+-----------------------------+-----------------------------------------------------+
| flush_interval_milliseconds | Период сброса данных из оперативной памяти на диск. |
+-----------------------------+-----------------------------------------------------+
**Пример**
.. code-block:: xml
<part_log>
<database>system</database>
<table>part_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</part_log>
.. _server_settings-path:
path
----
Путь к каталогу с данными.
.. warning:: Завершающий слеш обязателен.
**Пример**
.. code-block:: xml
<path>/var/lib/clickhouse/</path>
.. _server_settings-query_log:
query_log
---------
Настройка логгирования запросов, принятых с настройкой :ref:`log_queries=1 <settings-log_queries>`.
Запросы логгируются не в отдельный файл, а в таблицу ClickHouse.
При настройке логгирования используются следующие параметры:
+-----------------------------+-----------------------------------------------------+
| Параметр | Описание |
+=============================+=====================================================+
| database | Имя базы данных. |
+-----------------------------+-----------------------------------------------------+
| table | Имя таблицы. |
+-----------------------------+-----------------------------------------------------+
| flush_interval_milliseconds | Период сброса данных из оперативной памяти на диск. |
+-----------------------------+-----------------------------------------------------+
Если таблица не существует, то ClickHouse создаст её. Если структура журнала запросов изменилась при обновлении сервера ClickHouse, то таблица со старой структурой переименовывается, а новая таблица создается автоматически.
**Пример**
.. code-block:: xml
<query_log>
<database>system</database>
<table>query_log</table>
<flush_interval_milliseconds>7500</flush_interval_milliseconds>
</query_log>
.. _server_settings-remote_servers:
remote_servers
--------------
Конфигурация кластеров, которые использует движок таблиц Distributed.
Пример настройки смотрите в разделе :ref:`Движки таблиц/Distributed <table_engines-distributed>`.
**Пример**
.. code-block:: xml
<remote_servers incl="clickhouse_remote_servers" />
Значение атрибута ``incl`` смотрите в разделе :ref:`configuration_files`.
.. _server_settings-resharding:
resharding
----------
Путь в ZooKeeper к очереди задач.
Подробнее читайте в разделе :ref:`table_engines-resharding`.
**Пример**
.. code-block:: xml
<resharding>
<task_queue_path>/clickhouse/task_queue</task_queue_path>
</resharding>
.. _server_settings-timezone:
timezone
--------
Временная зона сервера.
Указывается идентификатором IANA в виде часового пояса UTC или географического положения (например, Africa/Abidjan).
Временная зона необходима при преобразованиях между форматами String и DateTime, которые возникают при выводе полей DateTime в текстовый формат (на экран или в файл) и при получении DateTime из строки. Также, временная зона используется в функциях, которые работают со временем и датой, если они не получили временную зону в параметрах вызова.
**Пример**
.. code-block:: xml
<timezone>Europe/Moscow</timezone>
.. _server_settings-tcp_port:
tcp_port
--------
Порт для взаимодействия с клиентами по протоколу TCP.
**Пример**
.. code-block:: xml
<tcp_port>9000</tcp_port>
.. _server_settings-tmp_path:
tmp_path
--------
Путь ко временным данным для обработки больших запросов.
.. warning:: Завершающий слеш обязателен.
**Пример**
.. code-block:: xml
<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
.. _server_settings-uncompressed_cache_size:
uncompressed_cache_size
-----------------------
Размер кеша (в байтах) для несжатых данных, используемых движками таблиц семейства :ref:`table_engines-mergetree`.
Кеш единый для сервера. Память выделяется по-требованию. Кеш используется в том случае, если включена опция :ref:`settings-use_uncompressed_cache`.
Несжатый кеш выгодно использовать для очень коротких запросов в отдельных случаях.
**Пример**
.. code-block:: xml
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
.. _server_settings-users_config:
users_config
------------
Путь к файлу, который содержит:
- Конфигурации пользователей.
- Права доступа.
- Профили настроек.
- Настройки квот.
**Пример**
.. code-block:: xml
<users_config>users.xml</users_config>
.. _server_settings-zookeeper:
zookeeper
---------
Конфигурация серверов ZooKeeper.
ClickHouse использует ZooKeeper для хранения метаданных о репликах при использовании реплицированных таблиц.
Параметр можно не указывать, если реплицированные таблицы не используются.
Подробно о репликации читайте в разделе :ref:`table_engines-replication`.
**Пример**
.. code-block:: xml
<zookeeper incl="zookeeper-servers" optional="true" />