diff --git a/dbms/src/Storages/MergeTree/LevelMergeSelector.cpp b/dbms/src/Storages/MergeTree/LevelMergeSelector.cpp index 4842b9e9e41f84ba0b18a780a8cdd50bc9a0aec5..bbeb71862777cc69837d2c209e5c4de5be1d808a 100644 --- a/dbms/src/Storages/MergeTree/LevelMergeSelector.cpp +++ b/dbms/src/Storages/MergeTree/LevelMergeSelector.cpp @@ -41,7 +41,7 @@ struct Estimator void selectWithinPartition( const LevelMergeSelector::PartsInPartition & parts, const size_t max_total_size_to_merge, - const time_t current_max_part_age, + const time_t current_min_part_age, Estimator & estimator, const LevelMergeSelector::Settings & settings) { @@ -51,9 +51,9 @@ void selectWithinPartition( double actual_base = settings.min_parts_to_merge; - if (current_max_part_age > settings.lower_base_after) + if (current_min_part_age > settings.lower_base_after) { - actual_base -= log2(current_max_part_age - settings.lower_base_after); + actual_base -= log2(current_min_part_age - settings.lower_base_after); if (actual_base < 2) actual_base = 2; } @@ -125,7 +125,7 @@ void selectWithinPartition( size_t size_of_subrange = prefix_sums[subrange_end] - prefix_sums[subrange_begin]; - if (size_of_subrange <= max_total_size_to_merge) + if (!max_total_size_to_merge || size_of_subrange <= max_total_size_to_merge) estimator.consider(parts.begin() + subrange_begin, parts.begin() + subrange_end, size_of_subrange); } } @@ -145,16 +145,16 @@ LevelMergeSelector::PartsInPartition LevelMergeSelector::select( const Partitions & partitions, const size_t max_total_size_to_merge) { - time_t max_age = 0; + time_t min_age = -1; for (const auto & partition : partitions) for (const auto & part : partition) - if (part.age > max_age) - max_age = part.age; + if (min_age == -1 || part.age < min_age) + min_age = part.age; Estimator estimator; for (const auto & partition : partitions) - selectWithinPartition(partition, max_total_size_to_merge, max_age, estimator, settings); + selectWithinPartition(partition, max_total_size_to_merge, min_age, estimator, settings); return estimator.getBest(); } diff --git a/dbms/src/Storages/MergeTree/SimpleMergeSelector.cpp b/dbms/src/Storages/MergeTree/SimpleMergeSelector.cpp index f390e6cff1657cd40af3c3ef7faf5e17da7cf9e4..602f7a4b697d3f3f2070945017bc0372bf80d8d2 100644 --- a/dbms/src/Storages/MergeTree/SimpleMergeSelector.cpp +++ b/dbms/src/Storages/MergeTree/SimpleMergeSelector.cpp @@ -74,7 +74,7 @@ struct Estimator void selectWithinPartition( const SimpleMergeSelector::PartsInPartition & parts, const size_t max_total_size_to_merge, - const time_t current_max_part_age, + const time_t current_min_part_age, Estimator & estimator, const SimpleMergeSelector::Settings & settings) { @@ -83,9 +83,9 @@ void selectWithinPartition( double actual_base = settings.base; - if (current_max_part_age > settings.lower_base_after) + if (current_min_part_age > settings.lower_base_after) { - actual_base -= log2(current_max_part_age - settings.lower_base_after); + actual_base -= log2(current_min_part_age - settings.lower_base_after); if (actual_base < 1) actual_base = 1; } @@ -149,16 +149,16 @@ SimpleMergeSelector::PartsInPartition SimpleMergeSelector::select( const Partitions & partitions, const size_t max_total_size_to_merge) { - time_t max_age = 0; + time_t min_age = -1; for (const auto & partition : partitions) for (const auto & part : partition) - if (part.age > max_age) - max_age = part.age; + if (min_age == -1 || part.age < min_age) + min_age = part.age; Estimator estimator; for (const auto & partition : partitions) - selectWithinPartition(partition, max_total_size_to_merge, max_age, estimator, settings); + selectWithinPartition(partition, max_total_size_to_merge, min_age, estimator, settings); return estimator.getBest(); }