.. _dicts-external_dicts_dict_lifetime: ******************* Обновление словарей ******************* ClickHouse периодически обновляет словари. Интервал обновления для полностью загружаемых словарей и интервал инвалидации для кэшируемых словарей определяется в теге ```` в секундах. Обновление словарей (кроме загрузки при первом использовании) не блокирует запросы - во время обновления используется старая версия словаря. Если при обновлении возникнет ошибка, то ошибка пишется в лог сервера, а запросы продолжат использовать старую версию словарей. Пример настройки: .. code-block:: xml ... 300 ... Настройка ``0`` запрещает обновление словарей. Можно задать интервал, внутри которого ClickHouse равномерно-случайно выберет время для обновления. Это необходимо для распределения нагрузки на источник словаря при обновлении на большом количестве серверов. Пример настройки: .. code-block:: xml ... 300 360 ... При обновлении словарей сервер ClickHouse применяет различную логику в зависимости от типа :ref:`источника `: * У текстового файла проверяется время модификации. Если время изменилось по отношению к запомненному ранее, то словарь обновляется. * Для таблиц типа MyISAM, время модификации проверяется запросом ``SHOW TABLE STATUS``. * Словари из других источников по умолчанию обновляются каждый раз. Для источников MySQL (InnoDB), ODBC можно настроить запрос, который позволит обновлять словари только в случае их фактического изменения, а не каждый раз. Чтобы это сделать необходимо выполнить следующие условия/действия: * В таблице словаря должно быть поле, которое гарантированно изменяется при обновлении данных в источнике. * В настройках источника указывается запрос, который получает изменяющееся поле. Результат запроса сервер ClickHouse интерпретирует как строку и если эта строка изменилась по отношению к предыдущему состоянию, то словарь обновляется. Запрос следует указывать в поле ```` настроек :ref:`источника `. Пример настройки: .. code-block:: xml ... ... SELECT update_time FROM dictionary_source where id = 1 ...