Skip to content

Commit 2d49011

Browse files
Merge pull request ClickHouse#90296 from ClickHouse/backport/25.8/89004
Backport ClickHouse#89004 to 25.8: Fix performance of skip index analysis
2 parents 5bb26db + 2ce607a commit 2d49011

File tree

8 files changed

+15
-13
lines changed

8 files changed

+15
-13
lines changed

src/Processors/QueryPlan/ReadFromMergeTree.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,7 +1798,8 @@ static void buildIndexes(
17981798
{
17991799
std::vector<size_t> index_sizes;
18001800
index_sizes.reserve(skip_indexes.useful_indices.size());
1801-
for (const auto& part : parts)
1801+
1802+
for (const auto & part : parts)
18021803
{
18031804
auto &index_order = skip_indexes.per_part_index_orders.emplace_back();
18041805
index_order.resize(skip_indexes.useful_indices.size());
@@ -1808,7 +1809,7 @@ static void buildIndexes(
18081809

18091810
for (const auto &idx : skip_indexes.useful_indices)
18101811
{
1811-
const auto *extension = idx.index->getDeserializedFormat(part.data_part->getDataPartStorage(), idx.index->getFileName()).extension;
1812+
const auto *extension = idx.index->getDeserializedFormat(part.data_part->checksums, idx.index->getFileName()).extension;
18121813
auto sz = part.data_part->getFileSizeOrZero(idx.index->getFileName() + extension);
18131814
index_sizes.emplace_back(sz);
18141815
}

src/Storages/MergeTree/MergeTreeDataSelectExecutor.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1721,7 +1721,7 @@ std::pair<MarkRanges, RangesInDataPartReadHints> MergeTreeDataSelectExecutor::fi
17211721
VectorSimilarityIndexCache * vector_similarity_index_cache,
17221722
LoggerPtr log)
17231723
{
1724-
if (!index_helper->getDeserializedFormat(part->getDataPartStorage(), index_helper->getFileName()))
1724+
if (!index_helper->getDeserializedFormat(part->checksums, index_helper->getFileName()))
17251725
{
17261726
LOG_DEBUG(log, "File for index {} does not exist ({}.*). Skipping it.", backQuote(index_helper->index.name),
17271727
(fs::path(part->getDataPartStorage().getFullPath()) / index_helper->getFileName()).string());

src/Storages/MergeTree/MergeTreeIndexMinMax.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -216,11 +216,11 @@ MergeTreeIndexConditionPtr MergeTreeIndexMinMax::createIndexCondition(
216216
return std::make_shared<MergeTreeIndexConditionMinMax>(index, filter_dag, context);
217217
}
218218

219-
MergeTreeIndexFormat MergeTreeIndexMinMax::getDeserializedFormat(const IDataPartStorage & data_part_storage, const std::string & relative_path_prefix) const
219+
MergeTreeIndexFormat MergeTreeIndexMinMax::getDeserializedFormat(const MergeTreeDataPartChecksums & checksums, const std::string & relative_path_prefix) const
220220
{
221-
if (data_part_storage.existsFile(relative_path_prefix + ".idx2"))
221+
if (checksums.files.contains(relative_path_prefix + ".idx2"))
222222
return {2, ".idx2"};
223-
if (data_part_storage.existsFile(relative_path_prefix + ".idx"))
223+
if (checksums.files.contains(relative_path_prefix + ".idx"))
224224
return {1, ".idx"};
225225
return {0 /* unknown */, ""};
226226
}

src/Storages/MergeTree/MergeTreeIndexMinMax.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ class MergeTreeIndexMinMax : public IMergeTreeIndex
8282
const ActionsDAG::Node * predicate, ContextPtr context) const override;
8383

8484
const char* getSerializedFileExtension() const override { return ".idx2"; }
85-
MergeTreeIndexFormat getDeserializedFormat(const IDataPartStorage & data_part_storage, const std::string & path_prefix) const override; /// NOLINT
85+
MergeTreeIndexFormat getDeserializedFormat(const MergeTreeDataPartChecksums & checksums, const std::string & path_prefix) const override; /// NOLINT
8686
};
8787

8888
}

src/Storages/MergeTree/MergeTreeIndexReader.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ void MergeTreeIndexReader::initStreamIfNeeded()
7272
if (stream)
7373
return;
7474

75-
auto index_format = index->getDeserializedFormat(part->getDataPartStorage(), index->getFileName());
75+
auto index_format = index->getDeserializedFormat(part->checksums, index->getFileName());
7676

7777
stream = makeIndexReader(
7878
index_format.extension,

src/Storages/MergeTree/MergeTreeIndices.cpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <Storages/MergeTree/MergeTreeDataPartChecksum.h>
12
#include <Storages/MergeTree/MergeTreeIndices.h>
23

34
#include <Columns/IColumn.h>
@@ -23,9 +24,9 @@ Names IMergeTreeIndex::getColumnsRequiredForIndexCalc() const
2324
}
2425

2526
MergeTreeIndexFormat
26-
IMergeTreeIndex::getDeserializedFormat(const IDataPartStorage & data_part_storage, const std::string & relative_path_prefix) const
27+
IMergeTreeIndex::getDeserializedFormat(const MergeTreeDataPartChecksums & checksums, const std::string & relative_path_prefix) const
2728
{
28-
if (data_part_storage.existsFile(relative_path_prefix + ".idx"))
29+
if (checksums.files.contains(relative_path_prefix + ".idx"))
2930
return {1, ".idx"};
3031
return {0 /*unknown*/, ""};
3132
}

src/Storages/MergeTree/MergeTreeIndices.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ evalOrRpnIndexStates(RPNEvaluationIndexUsefulnessState lhs, RPNEvaluationIndexUs
7070

7171
class ActionsDAG;
7272
class Block;
73-
class IDataPartStorage;
7473
struct MergeTreeWriterSettings;
7574
struct SelectQueryInfo;
75+
struct MergeTreeDataPartChecksums;
7676

7777
class GinIndexStore;
7878
using GinIndexStorePtr = std::shared_ptr<GinIndexStore>;
@@ -318,7 +318,7 @@ struct IMergeTreeIndex
318318
///
319319
/// Return pair<extension, version>.
320320
virtual MergeTreeIndexFormat
321-
getDeserializedFormat(const IDataPartStorage & data_part_storage, const std::string & relative_path_prefix) const;
321+
getDeserializedFormat(const MergeTreeDataPartChecksums & checksums, const std::string & relative_path_prefix) const;
322322

323323
virtual MergeTreeIndexGranulePtr createIndexGranule() const = 0;
324324

src/Storages/MergeTree/PatchParts/RangesInPatchParts.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -267,7 +267,7 @@ MaybeMinMaxStats getPatchMinMaxStats(const DataPartPtr & patch_part, const MarkR
267267

268268
auto index_ptr = MergeTreeIndexFactory::instance().get(*it);
269269
/// Check that index exists in data part. It may be absent for parts created in earlier versions.
270-
if (!index_ptr->getDeserializedFormat(patch_part->getDataPartStorage(), index_ptr->getFileName()))
270+
if (!index_ptr->getDeserializedFormat(patch_part->checksums, index_ptr->getFileName()))
271271
return {};
272272

273273
size_t total_marks_without_final = patch_part->index_granularity->getMarksCountWithoutFinal();

0 commit comments

Comments
 (0)