mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-21 15:12:02 +00:00
Merge pull request #57133 from vitlibar/change-default-for-wait_dictionaries_load_at_startup
Change the default for wait_dictionaries_load_at_startup to true
This commit is contained in:
commit
5769a88b92
@ -963,11 +963,9 @@ Lazy loading of dictionaries.
|
||||
|
||||
If `true`, then each dictionary is loaded on the first use. If the loading is failed, the function that was using the dictionary throws an exception.
|
||||
|
||||
If `false`, then the server starts loading all dictionaries at startup.
|
||||
Dictionaries are loaded in background.
|
||||
The server doesn't wait at startup until all the dictionaries finish their loading
|
||||
(exception: if `wait_dictionaries_load_at_startup` is set to `true` - see below).
|
||||
When a dictionary is used in a query for the first time then the query waits until the dictionary is loaded if it's not loaded yet.
|
||||
If `false`, then the server loads all dictionaries at startup.
|
||||
The server will wait at startup until all the dictionaries finish their loading before receiving any connections
|
||||
(exception: if `wait_dictionaries_load_at_startup` is set to `false` - see below).
|
||||
|
||||
The default is `true`.
|
||||
|
||||
@ -2397,20 +2395,24 @@ Path to the file that contains:
|
||||
|
||||
## wait_dictionaries_load_at_startup {#wait_dictionaries_load_at_startup}
|
||||
|
||||
If `false`, then the server will not wait at startup until all the dictionaries finish their loading.
|
||||
This allows to start ClickHouse faster.
|
||||
This setting allows to specify behavior if `dictionaries_lazy_load` is `false`.
|
||||
(If `dictionaries_lazy_load` is `true` this setting doesn't affect anything.)
|
||||
|
||||
If `true`, then the server will wait at startup until all the dictionaries finish their loading (successfully or not)
|
||||
before listening to any connections.
|
||||
This can make ClickHouse start slowly, however after that some queries can be executed faster
|
||||
(because they won't have to wait for the used dictionaries to be load).
|
||||
If `wait_dictionaries_load_at_startup` is `false`, then the server
|
||||
will start loading all the dictionaries at startup and it will receive connections in parallel with that loading.
|
||||
When a dictionary is used in a query for the first time then the query will wait until the dictionary is loaded if it's not loaded yet.
|
||||
Setting `wait_dictionaries_load_at_startup` to `false` can make ClickHouse start faster, however some queries can be executed slower
|
||||
(because they will have to wait for some dictionaries to be loaded).
|
||||
|
||||
The default is `false`.
|
||||
If `wait_dictionaries_load_at_startup` is `true`, then the server will wait at startup
|
||||
until all the dictionaries finish their loading (successfully or not) before receiving any connections.
|
||||
|
||||
The default is `true`.
|
||||
|
||||
**Example**
|
||||
|
||||
``` xml
|
||||
<wait_dictionaries_load_at_startup>false</wait_dictionaries_load_at_startup>
|
||||
<wait_dictionaries_load_at_startup>true</wait_dictionaries_load_at_startup>
|
||||
```
|
||||
|
||||
## zookeeper {#server-settings_zookeeper}
|
||||
|
@ -275,12 +275,11 @@ ClickHouse проверяет условия для `min_part_size` и `min_part
|
||||
|
||||
Отложенная загрузка словарей.
|
||||
|
||||
Если `true`, то каждый словарь создаётся при первом использовании. Если словарь не удалось создать, то вызов функции, использующей словарь, сгенерирует исключение.
|
||||
Если `true`, то каждый словарь загружается при первом использовании. Если словарь не удалось загрузить, то вызов функции, использующей словарь, сгенерирует исключение.
|
||||
|
||||
Если `false`, сервер начнет загрузку всех словарей на старте сервера.
|
||||
Словари загружаются в фоне. Сервер не ждет на старте, пока словари закончат загружаться
|
||||
(исключение: если `wait_dictionaries_load_at_startup` установлена в `true` - см. ниже).
|
||||
Когда словарь используется в запросе первый раз, этот запрос будет ждать окончания загрузки словаря, если он еще не загрузился.
|
||||
Если `false`, все словари будут загружаться на старте сервера.
|
||||
Сервер будет ждать на старте окончания загрузки всех словарей перед началом обработки соединений
|
||||
(исключение: если `wait_dictionaries_load_at_startup` установлена в `false` - см. ниже).
|
||||
|
||||
По умолчанию - `true`.
|
||||
|
||||
@ -1722,20 +1721,23 @@ TCP порт для защищённого обмена данными с кли
|
||||
|
||||
## wait_dictionaries_load_at_startup {#wait_dictionaries_load_at_startup}
|
||||
|
||||
Если `false`, то сервер не будет ждать на старте, пока словари закончат загружаться.
|
||||
Это позволяет ClickHouse стартовать быстрее.
|
||||
Эта настройка позволяет указать поведение если `dictionaries_lazy_load` установлено в `false`.
|
||||
(Если `dictionaries_lazy_load` установлено в `true`, то эта настройка ни на что не влияет.)
|
||||
|
||||
Если `true`, то ClickHouse будет ждать на старте до окончания загрузки всех словарей (успешно или нет)
|
||||
перед тем, как начать принимать соединения.
|
||||
Это может привести к медленному старту ClickHouse, однако после этого некоторые запросы могут выполняться быстрее
|
||||
(потому что им не придется ждать окончания загрузки используемых словарей).
|
||||
Если `wait_dictionaries_load_at_startup` установлено в `false`, то сервер начнет загрузку всех словарей на старте
|
||||
и будет обрабатывать соединения, не дожидаясь окончания загрузки словарей.
|
||||
Когда словарь первый раз используется в запросе, запрос будет ждать окончания загрузки этого словаря, если он еще не загрузился.
|
||||
Установка `wait_dictionaries_load_at_startup` в `false` может помочь ClickHouse стартовать быстрее, однако некоторые запросы могут выполняться медленее (потому что они будут ждать окончания загрузки используемых в них словарей).
|
||||
|
||||
По умолчанию - `false`.
|
||||
Если `wait_dictionaries_load_at_startup` установлено в `true`, то сервер будет ждать окончания загрузки всех словарей на старте
|
||||
до начала обработки соединений.
|
||||
|
||||
По умолчанию - `true`.
|
||||
|
||||
**Пример**
|
||||
|
||||
``` xml
|
||||
<wait_dictionaries_load_at_startup>false</wait_dictionaries_load_at_startup>
|
||||
<wait_dictionaries_load_at_startup>true</wait_dictionaries_load_at_startup>
|
||||
```
|
||||
|
||||
## zookeeper {#server-settings_zookeeper}
|
||||
|
@ -1825,7 +1825,7 @@ try
|
||||
{
|
||||
global_context->loadOrReloadDictionaries(config());
|
||||
|
||||
if (config().getBool("wait_dictionaries_load_at_startup", false))
|
||||
if (!config().getBool("dictionaries_lazy_load", true) && config().getBool("wait_dictionaries_load_at_startup", true))
|
||||
global_context->waitForDictionariesLoad();
|
||||
}
|
||||
catch (...)
|
||||
|
@ -1291,10 +1291,10 @@
|
||||
<dictionaries_lazy_load>true</dictionaries_lazy_load>
|
||||
|
||||
<!-- Wait at startup until all the dictionaries finish their loading (successfully or not)
|
||||
before listening to connections. Setting this to 1 can make ClickHouse start slowly,
|
||||
however some queries can be executed faster (because it won't have to wait for the used dictionaries to be load).
|
||||
before receiving any connections. Affects dictionaries only if "dictionaries_lazy_load" is false.
|
||||
Setting this to false can make ClickHouse start faster, however some queries can be executed slower.
|
||||
-->
|
||||
<wait_dictionaries_load_at_startup>false</wait_dictionaries_load_at_startup>
|
||||
<wait_dictionaries_load_at_startup>true</wait_dictionaries_load_at_startup>
|
||||
|
||||
<!-- Configuration of user defined executable functions -->
|
||||
<user_defined_executable_functions_config>*_function.*ml</user_defined_executable_functions_config>
|
||||
|
@ -0,0 +1,3 @@
|
||||
<clickhouse>
|
||||
<dictionaries_lazy_load>0</dictionaries_lazy_load>
|
||||
</clickhouse>
|
@ -1,3 +0,0 @@
|
||||
<clickhouse>
|
||||
<wait_dictionaries_load_at_startup>1</wait_dictionaries_load_at_startup>
|
||||
</clickhouse>
|
@ -10,11 +10,14 @@ DICTIONARY_FILES = [
|
||||
cluster = ClickHouseCluster(__file__)
|
||||
node1 = cluster.add_instance(
|
||||
"node1",
|
||||
main_configs=["configs/wait_for_dictionaries_load.xml"],
|
||||
main_configs=["configs/no_dictionaries_lazy_load.xml"],
|
||||
dictionaries=DICTIONARY_FILES,
|
||||
)
|
||||
|
||||
node0 = cluster.add_instance("node0", dictionaries=DICTIONARY_FILES)
|
||||
node0 = cluster.add_instance(
|
||||
"node0",
|
||||
dictionaries=DICTIONARY_FILES,
|
||||
)
|
||||
|
||||
|
||||
@pytest.fixture(scope="module", autouse=True)
|
||||
@ -33,9 +36,13 @@ def get_status(instance, dictionary_name):
|
||||
|
||||
|
||||
def test_wait_for_dictionaries_load():
|
||||
assert get_status(node0, "long_loading_dictionary") == "NOT_LOADED"
|
||||
|
||||
assert get_status(node1, "long_loading_dictionary") == "LOADED"
|
||||
assert node1.query("SELECT * FROM dictionary(long_loading_dictionary)") == TSV(
|
||||
[[1, "aa"], [2, "bb"]]
|
||||
)
|
||||
|
||||
assert get_status(node0, "long_loading_dictionary") == "NOT_LOADED"
|
||||
assert node0.query("SELECT * FROM dictionary(long_loading_dictionary)") == TSV(
|
||||
[[1, "aa"], [2, "bb"]]
|
||||
)
|
||||
assert get_status(node0, "long_loading_dictionary") == "LOADED"
|
||||
|
Loading…
Reference in New Issue
Block a user