提交 efa056fc 编写于 作者: A Alexey Milovidov

Attempt to improve merge selecting algorithm [#METR-21840].

上级 3d05948c
......@@ -17,10 +17,13 @@ public:
* This behaviour balances merge-tree workload.
* It called 'base', because merge-tree depth could be estimated as logarithm with that base.
*/
double base = 2;
double base = 5;
time_t lower_base_after_seconds = 300;
size_t lower_base_after_num_parts = 20;
time_t lower_base_after_seconds_start = 300;
time_t lower_base_after_seconds_end = 3600;
size_t lower_base_after_num_parts_start = 10;
size_t lower_base_after_num_parts_end = 50;
/// Zero means unlimited.
size_t max_parts_to_merge_at_once = 100;
......
#include <DB/Storages/MergeTree/SimpleMergeSelector.h>
#include <DB/Common/interpolate.h>
#include <cmath>
......@@ -82,11 +83,13 @@ void selectWithinPartition(
if (parts_count <= 1)
return;
double actual_base = settings.base;
if (parts_count > settings.lower_base_after_num_parts
|| current_min_part_age > settings.lower_base_after_seconds)
actual_base = 1;
double actual_base = std::max(1.0, std::min(
settings.base,
std::min(
interpolateLinear(settings.base, 1.0, (static_cast<double>(parts_count) - settings.lower_base_after_num_parts_start)
/ (settings.lower_base_after_num_parts_end - settings.lower_base_after_num_parts_start)),
interpolateLinear(settings.base, 1.0, (static_cast<double>(current_min_part_age) - settings.lower_base_after_seconds_start)
/ (settings.lower_base_after_seconds_end - settings.lower_base_after_seconds_start)))));
for (size_t begin = 0; begin < parts_count; ++begin)
{
......
......@@ -21,13 +21,13 @@ int main(int argc, char ** argv)
IMergeSelector::Partitions partitions(1);
IMergeSelector::PartsInPartition & parts = partitions.back();
/* SimpleMergeSelector::Settings settings;
SimpleMergeSelector selector(settings);*/
SimpleMergeSelector::Settings settings;
SimpleMergeSelector selector(settings);
LevelMergeSelector::Settings settings;
/* LevelMergeSelector::Settings settings;
settings.min_parts_to_merge = 8;
settings.max_parts_to_merge = 16;
LevelMergeSelector selector(settings);
LevelMergeSelector selector(settings);*/
ReadBufferFromFileDescriptor in(STDIN_FILENO);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册