Listing all parts in log have no sense. 
Should be either silenced, either combined into a single line.
}
    }
    RangesInDataParts parts_with_ranges(parts.size());
    size_t sum_marks = 0;
    std::atomic<size_t> sum_marks_pk = 0;
    size_t sum_ranges = 0;
    
    {
        std::atomic<size_t> total_rows {0};
        SizeLimits limits;
        if (settings.read_overflow_mode == OverflowMode::THROW && settings.max_rows_to_read)
            limits = SizeLimits(settings.max_rows_to_read, 0, settings.read_overflow_mode);
        SizeLimits leaf_limits;
        if (settings.read_overflow_mode_leaf == OverflowMode::THROW && settings.max_rows_to_read_leaf)
            leaf_limits = SizeLimits(settings.max_rows_to_read_leaf, 0, settings.read_overflow_mode_leaf);
        auto process_part = [&](size_t part_index)
        {
            auto & part = parts[part_index];
            RangesInDataPart ranges(part, part_index);
            if (metadata_snapshot->hasPrimaryKey())
                ranges.ranges = markRangesFromPKRange(part, metadata_snapshot, key_condition, settings, log);
            else
            {
                size_t total_marks_count = part->getMarksCount();
                if (total_marks_count)
                {
                    if (part->index_granularity.hasFinalMark())
                        --total_marks_count;
                    ranges.ranges = MarkRanges{MarkRange{0, total_marks_count}};
                }