diff --git a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp index 901f947dd6e..f1356663a5a 100644 --- a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp +++ b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp @@ -544,6 +544,14 @@ Pipes MergeTreeDataSelectExecutor::readFromParts( if (minmax_idx_condition) LOG_DEBUG(log, "MinMax index condition: {}", minmax_idx_condition->toString()); + MergeTreeReaderSettings reader_settings = + { + .min_bytes_to_use_direct_io = settings.min_bytes_to_use_direct_io, + .min_bytes_to_use_mmap_io = settings.min_bytes_to_use_mmap_io, + .max_read_buffer_size = settings.max_read_buffer_size, + .save_marks_in_cache = true + }; + /// PREWHERE String prewhere_column; if (select.prewhere()) @@ -583,7 +591,7 @@ Pipes MergeTreeDataSelectExecutor::readFromParts( for (const auto & index_and_condition : useful_indices) ranges.ranges = filterMarksUsingIndex( - index_and_condition.first, index_and_condition.second, part, ranges.ranges, settings); + index_and_condition.first, index_and_condition.second, part, ranges.ranges, settings, reader_settings); if (!ranges.ranges.empty()) { @@ -605,14 +613,6 @@ Pipes MergeTreeDataSelectExecutor::readFromParts( Pipes res; - MergeTreeReaderSettings reader_settings = - { - .min_bytes_to_use_direct_io = settings.min_bytes_to_use_direct_io, - .min_bytes_to_use_mmap_io = settings.min_bytes_to_use_mmap_io, - .max_read_buffer_size = settings.max_read_buffer_size, - .save_marks_in_cache = true - }; - /// Projection, that needed to drop columns, which have appeared by execution /// of some extra expressions, and to allow execute the same expressions later. /// NOTE: It may lead to double computation of expressions. @@ -1405,7 +1405,8 @@ MarkRanges MergeTreeDataSelectExecutor::filterMarksUsingIndex( MergeTreeIndexConditionPtr condition, MergeTreeData::DataPartPtr part, const MarkRanges & ranges, - const Settings & settings) const + const Settings & settings, + const MergeTreeReaderSettings & reader_settings) const { if (!part->volume->getDisk()->exists(part->getFullRelativePath() + index_helper->getFileName() + ".idx")) { @@ -1428,9 +1429,10 @@ MarkRanges MergeTreeDataSelectExecutor::filterMarksUsingIndex( size_t index_marks_count = (marks_count - final_mark + index_granularity - 1) / index_granularity; MergeTreeIndexReader reader( - index_helper, part, - index_marks_count, - ranges); + index_helper, part, + index_marks_count, + ranges, + reader_settings); MarkRanges res; diff --git a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h index 7c3b9584e98..831b690ec62 100644 --- a/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h +++ b/src/Storages/MergeTree/MergeTreeDataSelectExecutor.h @@ -106,7 +106,8 @@ private: MergeTreeIndexConditionPtr condition, MergeTreeData::DataPartPtr part, const MarkRanges & ranges, - const Settings & settings) const; + const Settings & settings, + const MergeTreeReaderSettings & reader_settings) const; }; } diff --git a/src/Storages/MergeTree/MergeTreeIndexReader.cpp b/src/Storages/MergeTree/MergeTreeIndexReader.cpp index d8f13e49b31..eaba247009b 100644 --- a/src/Storages/MergeTree/MergeTreeIndexReader.cpp +++ b/src/Storages/MergeTree/MergeTreeIndexReader.cpp @@ -5,12 +5,13 @@ namespace DB { MergeTreeIndexReader::MergeTreeIndexReader( - MergeTreeIndexPtr index_, MergeTreeData::DataPartPtr part_, size_t marks_count_, const MarkRanges & all_mark_ranges_) + MergeTreeIndexPtr index_, MergeTreeData::DataPartPtr part_, size_t marks_count_, const MarkRanges & all_mark_ranges_, + MergeTreeReaderSettings settings) : index(index_), stream( part_->volume->getDisk(), part_->getFullRelativePath() + index->getFileName(), ".idx", marks_count_, all_mark_ranges_, - MergeTreeReaderSettings{}, nullptr, nullptr, + std::move(settings), nullptr, nullptr, part_->getFileSizeOrZero(index->getFileName() + ".idx"), &part_->index_granularity_info, ReadBufferFromFileBase::ProfileCallback{}, CLOCK_MONOTONIC_COARSE) diff --git a/src/Storages/MergeTree/MergeTreeIndexReader.h b/src/Storages/MergeTree/MergeTreeIndexReader.h index 9b5b1c7fcb2..68d681458be 100644 --- a/src/Storages/MergeTree/MergeTreeIndexReader.h +++ b/src/Storages/MergeTree/MergeTreeIndexReader.h @@ -14,7 +14,8 @@ public: MergeTreeIndexPtr index_, MergeTreeData::DataPartPtr part_, size_t marks_count_, - const MarkRanges & all_mark_ranges_); + const MarkRanges & all_mark_ranges_, + MergeTreeReaderSettings settings); void seek(size_t mark);