mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-28 18:42:26 +00:00
Add settings to control nesting level for shards skipping optimization
- optimize_skip_unused_shards_nesting (allows control nesting level for shards skipping optimization) - force_skip_optimize_shards_nesting (allows control nesting level for checking was shards skipped or not) - deprecates force_skip_optimize_shards_no_nested
This commit is contained in:
parent
0e218b0f15
commit
fb30629ff2
@ -1126,6 +1126,18 @@ Possible values:
|
|||||||
|
|
||||||
Default value: 0
|
Default value: 0
|
||||||
|
|
||||||
|
## optimize\_skip\_unused\_shards\_nesting {#optimize-skip-unused-shards-nesting}
|
||||||
|
|
||||||
|
Controls nesting level for [`optimize_skip_unused_shards`](#optimize-skip-unused-shards) (hence still requires [`optimize_skip_unused_shards`](#optimize-skip-unused-shards)).
|
||||||
|
|
||||||
|
Possible values:
|
||||||
|
|
||||||
|
- 0 — Disabled.
|
||||||
|
- 1 — Enables `optimize_skip_unused_shards` only for the first level
|
||||||
|
- 2 — Enables `optimize_skip_unused_shards` up to the second level
|
||||||
|
|
||||||
|
Default value: 0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards {#force-optimize-skip-unused-shards}
|
## force\_optimize\_skip\_unused\_shards {#force-optimize-skip-unused-shards}
|
||||||
|
|
||||||
Enables or disables query execution if [optimize\_skip\_unused\_shards](#optimize-skip-unused-shards) is enabled and skipping of unused shards is not possible. If the skipping is not possible and the setting is enabled, an exception will be thrown.
|
Enables or disables query execution if [optimize\_skip\_unused\_shards](#optimize-skip-unused-shards) is enabled and skipping of unused shards is not possible. If the skipping is not possible and the setting is enabled, an exception will be thrown.
|
||||||
@ -1138,16 +1150,13 @@ Possible values:
|
|||||||
|
|
||||||
Default value: 0
|
Default value: 0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested}
|
## force\_optimize\_skip\_unused\_shards\_nesting {#settings-force_optimize_skip_unused_shards_nesting}
|
||||||
|
|
||||||
Reset [`optimize_skip_unused_shards`](#optimize-skip-unused-shards) for nested `Distributed` table
|
Controls nesting level for [`force_optimize_skip_unused_shards`](#force-optimize-skip-unused-shards) (hence still requires [`force_optimize_skip_unused_shards`](#force-optimize-skip-unused-shards)).
|
||||||
|
|
||||||
Possible values:
|
- Type: unsigned int
|
||||||
|
- 1 — Enables `force_optimize_skip_unused_shards_nesting` only for the first level
|
||||||
- 1 — Enabled.
|
- 2 — Enables `force_optimize_skip_unused_shards_nesting` up to the second level
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
Default value: 0.
|
|
||||||
|
|
||||||
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
|
@ -1048,17 +1048,6 @@ Valores posibles:
|
|||||||
|
|
||||||
Valor predeterminado: 0
|
Valor predeterminado: 0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested}
|
|
||||||
|
|
||||||
Restablecer [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) para anidados `Distributed` tabla
|
|
||||||
|
|
||||||
Valores posibles:
|
|
||||||
|
|
||||||
- 1 — Enabled.
|
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
Valor predeterminado: 0.
|
|
||||||
|
|
||||||
## Optize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
## Optize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
Habilita o deshabilita el lanzamiento de una excepción [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) la consulta no realizó una fusión.
|
Habilita o deshabilita el lanzamiento de una excepción [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) la consulta no realizó una fusión.
|
||||||
|
@ -1048,17 +1048,6 @@ The results of the compilation are saved in the build directory in the form of .
|
|||||||
|
|
||||||
مقدار پیشفرض: 0
|
مقدار پیشفرض: 0
|
||||||
|
|
||||||
## به زور \_بهتیتیتیتی\_سکیپ\_اس\_ش\_شارد\_مایش داده میشود {#settings-force_optimize_skip_unused_shards_no_nested}
|
|
||||||
|
|
||||||
بازنشانی [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) برای تو در تو `Distributed` جدول
|
|
||||||
|
|
||||||
مقادیر ممکن:
|
|
||||||
|
|
||||||
- 1 — Enabled.
|
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
مقدار پیش فرض: 0.
|
|
||||||
|
|
||||||
## ا\_فزون\_ف\_کوپ {#setting-optimize_throw_if_noop}
|
## ا\_فزون\_ف\_کوپ {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
را قادر می سازد و یا غیر فعال پرتاب یک استثنا اگر یک [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) پرس و جو یک ادغام انجام نمی.
|
را قادر می سازد و یا غیر فعال پرتاب یک استثنا اگر یک [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) پرس و جو یک ادغام انجام نمی.
|
||||||
|
@ -1048,17 +1048,6 @@ Valeurs possibles:
|
|||||||
|
|
||||||
Valeur par défaut: 0
|
Valeur par défaut: 0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested}
|
|
||||||
|
|
||||||
Réinitialiser [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) pour imbriquée `Distributed` table
|
|
||||||
|
|
||||||
Valeurs possibles:
|
|
||||||
|
|
||||||
- 1 — Enabled.
|
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
Valeur par défaut: 0.
|
|
||||||
|
|
||||||
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
Active ou désactive le lancement d'une exception si [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) la requête n'a pas effectué de fusion.
|
Active ou désactive le lancement d'une exception si [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) la requête n'a pas effectué de fusion.
|
||||||
|
@ -1048,17 +1048,6 @@ PREWHERE/WHEREにシャーディングキー条件があるSELECTクエリの未
|
|||||||
|
|
||||||
デフォルト値:0
|
デフォルト値:0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested}
|
|
||||||
|
|
||||||
リセット [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) 入れ子の場合 `Distributed` テーブル
|
|
||||||
|
|
||||||
可能な値:
|
|
||||||
|
|
||||||
- 1 — Enabled.
|
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
デフォルト値は0です。
|
|
||||||
|
|
||||||
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
例外のスローを有効または無効にします。 [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) クエリがマージを実行しませんでした。
|
例外のスローを有効または無効にします。 [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) クエリがマージを実行しませんでした。
|
||||||
|
@ -1048,17 +1048,6 @@ Olası değerler:
|
|||||||
|
|
||||||
Varsayılan değer: 0
|
Varsayılan değer: 0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested}
|
|
||||||
|
|
||||||
Sıfırlamak [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) iç içe geçmiş için `Distributed` Tablo
|
|
||||||
|
|
||||||
Olası değerler:
|
|
||||||
|
|
||||||
- 1 — Enabled.
|
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
Varsayılan değer: 0.
|
|
||||||
|
|
||||||
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
Bir özel durum atmayı etkinleştirir veya devre dışı bırakır. [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) sorgu birleştirme gerçekleştirmedi.
|
Bir özel durum atmayı etkinleştirir veya devre dışı bırakır. [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) sorgu birleştirme gerçekleştirmedi.
|
||||||
|
@ -1048,17 +1048,6 @@ ClickHouse生成异常
|
|||||||
|
|
||||||
默认值:0
|
默认值:0
|
||||||
|
|
||||||
## force\_optimize\_skip\_unused\_shards\_no\_nested {#settings-force_optimize_skip_unused_shards_no_nested}
|
|
||||||
|
|
||||||
重置 [`optimize_skip_unused_shards`](#settings-force_optimize_skip_unused_shards) 对于嵌套 `Distributed` 表
|
|
||||||
|
|
||||||
可能的值:
|
|
||||||
|
|
||||||
- 1 — Enabled.
|
|
||||||
- 0 — Disabled.
|
|
||||||
|
|
||||||
默认值:0。
|
|
||||||
|
|
||||||
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
## optimize\_throw\_if\_noop {#setting-optimize_throw_if_noop}
|
||||||
|
|
||||||
启用或禁用抛出异常,如果 [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) 查询未执行合并。
|
启用或禁用抛出异常,如果 [OPTIMIZE](../../sql-reference/statements/misc.md#misc_operations-optimize) 查询未执行合并。
|
||||||
|
@ -121,10 +121,11 @@ struct Settings : public SettingsCollection<Settings>
|
|||||||
\
|
\
|
||||||
M(SettingBool, distributed_group_by_no_merge, false, "Do not merge aggregation states from different servers for distributed query processing - in case it is for certain that there are different keys on different shards.", 0) \
|
M(SettingBool, distributed_group_by_no_merge, false, "Do not merge aggregation states from different servers for distributed query processing - in case it is for certain that there are different keys on different shards.", 0) \
|
||||||
M(SettingBool, parallel_distributed_insert_select, false, "If true, distributed insert select query in the same cluster will be processed on local tables on every shard", 0) \
|
M(SettingBool, parallel_distributed_insert_select, false, "If true, distributed insert select query in the same cluster will be processed on local tables on every shard", 0) \
|
||||||
M(SettingUInt64, optimize_skip_unused_shards, 0, "Assumes that data is distributed by sharding_key. Optimization to skip unused shards if SELECT query filters by sharding_key (if 1 - includes nested Distributed, 2 - disable for nested Distributed).", 0) \
|
|
||||||
M(SettingBool, optimize_distributed_group_by_sharding_key, false, "Optimize GROUP BY sharding_key queries (by avodiing costly aggregation on the initiator server).", 0) \
|
M(SettingBool, optimize_distributed_group_by_sharding_key, false, "Optimize GROUP BY sharding_key queries (by avodiing costly aggregation on the initiator server).", 0) \
|
||||||
|
M(SettingBool, optimize_skip_unused_shards, false, "Assumes that data is distributed by sharding_key. Optimization to skip unused shards if SELECT query filters by sharding_key.", 0) \
|
||||||
M(SettingUInt64, force_optimize_skip_unused_shards, 0, "Throw an exception if unused shards cannot be skipped (1 - throw only if the table has the sharding key, 2 - always throw.", 0) \
|
M(SettingUInt64, force_optimize_skip_unused_shards, 0, "Throw an exception if unused shards cannot be skipped (1 - throw only if the table has the sharding key, 2 - always throw.", 0) \
|
||||||
M(SettingBool, force_optimize_skip_unused_shards_no_nested, false, "Do not apply force_optimize_skip_unused_shards for nested Distributed tables.", 0) \
|
M(SettingUInt64, optimize_skip_unused_shards_nesting, 0, "Same as optimize_skip_unused_shards, but accept nesting level until which it will work.", 0) \
|
||||||
|
M(SettingUInt64, force_optimize_skip_unused_shards_nesting, 0, "Same as force_optimize_skip_unused_shards, but accept nesting level until which it will work.", 0) \
|
||||||
\
|
\
|
||||||
M(SettingBool, input_format_parallel_parsing, true, "Enable parallel parsing for some data formats.", 0) \
|
M(SettingBool, input_format_parallel_parsing, true, "Enable parallel parsing for some data formats.", 0) \
|
||||||
M(SettingUInt64, min_chunk_bytes_for_parallel_parsing, (10 * 1024 * 1024), "The minimum chunk size in bytes, which each thread will parse in parallel.", 0) \
|
M(SettingUInt64, min_chunk_bytes_for_parallel_parsing, (10 * 1024 * 1024), "The minimum chunk size in bytes, which each thread will parse in parallel.", 0) \
|
||||||
@ -395,6 +396,7 @@ struct Settings : public SettingsCollection<Settings>
|
|||||||
M(SettingBool, partial_merge_join, false, "Obsolete. Use join_algorithm='prefer_partial_merge' instead.", 0) \
|
M(SettingBool, partial_merge_join, false, "Obsolete. Use join_algorithm='prefer_partial_merge' instead.", 0) \
|
||||||
M(SettingUInt64, max_memory_usage_for_all_queries, 0, "Obsolete. Will be removed after 2020-10-20", 0) \
|
M(SettingUInt64, max_memory_usage_for_all_queries, 0, "Obsolete. Will be removed after 2020-10-20", 0) \
|
||||||
\
|
\
|
||||||
|
M(SettingBool, force_optimize_skip_unused_shards_no_nested, false, "Obsolete setting, does nothing. Will be removed after 2020-12-01. Use force_optimize_skip_unused_shards_nesting instead.", 0) \
|
||||||
M(SettingBool, experimental_use_processors, true, "Obsolete setting, does nothing. Will be removed after 2020-11-29.", 0)
|
M(SettingBool, experimental_use_processors, true, "Obsolete setting, does nothing. Will be removed after 2020-11-29.", 0)
|
||||||
|
|
||||||
#define FORMAT_FACTORY_SETTINGS(M) \
|
#define FORMAT_FACTORY_SETTINGS(M) \
|
||||||
|
@ -17,8 +17,6 @@ namespace ClusterProxy
|
|||||||
|
|
||||||
Context removeUserRestrictionsFromSettings(const Context & context, const Settings & settings, Poco::Logger * log)
|
Context removeUserRestrictionsFromSettings(const Context & context, const Settings & settings, Poco::Logger * log)
|
||||||
{
|
{
|
||||||
static const UInt64 OPTIMIZE_SKIP_UNUSED_SHARDS_NO_NESTED = 2;
|
|
||||||
|
|
||||||
Settings new_settings = settings;
|
Settings new_settings = settings;
|
||||||
new_settings.queue_max_wait_ms = Cluster::saturate(new_settings.queue_max_wait_ms, settings.max_execution_time);
|
new_settings.queue_max_wait_ms = Cluster::saturate(new_settings.queue_max_wait_ms, settings.max_execution_time);
|
||||||
|
|
||||||
@ -30,22 +28,44 @@ Context removeUserRestrictionsFromSettings(const Context & context, const Settin
|
|||||||
new_settings.max_concurrent_queries_for_user.changed = false;
|
new_settings.max_concurrent_queries_for_user.changed = false;
|
||||||
new_settings.max_memory_usage_for_user.changed = false;
|
new_settings.max_memory_usage_for_user.changed = false;
|
||||||
|
|
||||||
if (settings.force_optimize_skip_unused_shards_no_nested)
|
if (settings.force_optimize_skip_unused_shards_nesting)
|
||||||
|
{
|
||||||
|
if (new_settings.force_optimize_skip_unused_shards_nesting == 1)
|
||||||
{
|
{
|
||||||
new_settings.force_optimize_skip_unused_shards = 0;
|
new_settings.force_optimize_skip_unused_shards = 0;
|
||||||
new_settings.force_optimize_skip_unused_shards.changed = false;
|
new_settings.force_optimize_skip_unused_shards.changed = false;
|
||||||
|
|
||||||
if (log)
|
if (log)
|
||||||
LOG_TRACE(log, "Disabling force_optimize_skip_unused_shards (due to force_optimize_skip_unused_shards_no_nested)");
|
LOG_TRACE(log, "Disabling force_optimize_skip_unused_shards for nested queries (force_optimize_skip_unused_shards_nesting exceeded)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_settings.force_optimize_skip_unused_shards_nesting.value--;
|
||||||
|
new_settings.force_optimize_skip_unused_shards_nesting.changed = true;
|
||||||
|
|
||||||
|
if (log)
|
||||||
|
LOG_TRACE(log, "force_optimize_skip_unused_shards_nesting is now {}", new_settings.force_optimize_skip_unused_shards_nesting);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (settings.optimize_skip_unused_shards == OPTIMIZE_SKIP_UNUSED_SHARDS_NO_NESTED)
|
if (settings.optimize_skip_unused_shards_nesting)
|
||||||
|
{
|
||||||
|
if (new_settings.optimize_skip_unused_shards_nesting == 1)
|
||||||
{
|
{
|
||||||
new_settings.optimize_skip_unused_shards = 0;
|
new_settings.optimize_skip_unused_shards = 0;
|
||||||
new_settings.optimize_skip_unused_shards.changed = false;
|
new_settings.optimize_skip_unused_shards.changed = false;
|
||||||
|
|
||||||
if (log)
|
if (log)
|
||||||
LOG_TRACE(log, "Disabling optimize_skip_unused_shards (due to optimize_skip_unused_shards=2)");
|
LOG_TRACE(log, "Disabling optimize_skip_unused_shards for nested queries (optimize_skip_unused_shards_nesting exceeded)");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
new_settings.optimize_skip_unused_shards_nesting.value--;
|
||||||
|
new_settings.optimize_skip_unused_shards_nesting.changed = true;
|
||||||
|
|
||||||
|
if (log)
|
||||||
|
LOG_TRACE(log, "optimize_skip_unused_shards_nesting is now {}", new_settings.optimize_skip_unused_shards_nesting);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Context new_context(context);
|
Context new_context(context);
|
||||||
|
@ -41,7 +41,7 @@ create table data2_01071 (key Int, sub_key Int) Engine=Null();
|
|||||||
create table dist2_layer_01071 as data2_01071 Engine=Distributed(test_cluster_two_shards, currentDatabase(), data2_01071, sub_key%2);
|
create table dist2_layer_01071 as data2_01071 Engine=Distributed(test_cluster_two_shards, currentDatabase(), data2_01071, sub_key%2);
|
||||||
create table dist2_01071 as data2_01071 Engine=Distributed(test_cluster_two_shards, currentDatabase(), dist2_layer_01071, key%2);
|
create table dist2_01071 as data2_01071 Engine=Distributed(test_cluster_two_shards, currentDatabase(), dist2_layer_01071, key%2);
|
||||||
select * from dist2_01071 where key = 1; -- { serverError 507 }
|
select * from dist2_01071 where key = 1; -- { serverError 507 }
|
||||||
set force_optimize_skip_unused_shards_no_nested=1;
|
set force_optimize_skip_unused_shards_nesting=1;
|
||||||
select * from dist2_01071 where key = 1;
|
select * from dist2_01071 where key = 1;
|
||||||
drop table if exists data2_01071;
|
drop table if exists data2_01071;
|
||||||
drop table if exists dist2_layer_01071;
|
drop table if exists dist2_layer_01071;
|
||||||
|
@ -4,13 +4,19 @@ drop table if exists dist_layer_01319;
|
|||||||
|
|
||||||
create table data_01319 (key Int, sub_key Int) Engine=Null();
|
create table data_01319 (key Int, sub_key Int) Engine=Null();
|
||||||
|
|
||||||
set force_optimize_skip_unused_shards=2;
|
|
||||||
set optimize_skip_unused_shards=1;
|
|
||||||
|
|
||||||
create table dist_layer_01319 as data_01319 Engine=Distributed(test_cluster_two_shards, currentDatabase(), data_01319, sub_key);
|
create table dist_layer_01319 as data_01319 Engine=Distributed(test_cluster_two_shards, currentDatabase(), data_01319, sub_key);
|
||||||
-- test_unavailable_shard here to check that optimize_skip_unused_shards always
|
-- test_unavailable_shard here to check that optimize_skip_unused_shards always
|
||||||
-- remove some nodes from the cluster for the first nesting level
|
-- remove some nodes from the cluster for the first nesting level
|
||||||
create table dist_01319 as data_01319 Engine=Distributed(test_unavailable_shard, currentDatabase(), dist_layer_01319, key+1);
|
create table dist_01319 as data_01319 Engine=Distributed(test_unavailable_shard, currentDatabase(), dist_layer_01319, key+1);
|
||||||
|
|
||||||
|
set optimize_skip_unused_shards=1;
|
||||||
|
set force_optimize_skip_unused_shards=1;
|
||||||
|
|
||||||
|
set force_optimize_skip_unused_shards_nesting=2;
|
||||||
|
set optimize_skip_unused_shards_nesting=2;
|
||||||
select * from dist_01319 where key = 1; -- { serverError 507 }
|
select * from dist_01319 where key = 1; -- { serverError 507 }
|
||||||
set optimize_skip_unused_shards=2; -- no nested
|
set force_optimize_skip_unused_shards_nesting=1;
|
||||||
|
select * from dist_01319 where key = 1;
|
||||||
|
set force_optimize_skip_unused_shards_nesting=2;
|
||||||
|
set optimize_skip_unused_shards_nesting=1;
|
||||||
select * from dist_01319 where key = 1;
|
select * from dist_01319 where key = 1;
|
Loading…
Reference in New Issue
Block a user