Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/Common/ProfileEvents.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -500,6 +500,10 @@ The server successfully detected this situation and will download merged part fr
M(DNSError, "Total count of errors in DNS resolution", ValueType::Number) \
M(PartsLockHoldMicroseconds, "Total time spent holding data parts lock in MergeTree tables", ValueType::Microseconds) \
M(PartsLockWaitMicroseconds, "Total time spent waiting for data parts lock in MergeTree tables", ValueType::Microseconds) \
M(PartsLocks, "Number of times data parts lock has been acquired for MergeTree tables", ValueType::Number) \
M(SharedPartsLockHoldMicroseconds, "Total time spent holding shared data parts lock in MergeTree tables", ValueType::Microseconds) \
M(SharedPartsLockWaitMicroseconds, "Total time spent waiting for shared data parts lock in MergeTree tables", ValueType::Microseconds) \
M(SharedPartsLocks, "Number of times shared data parts lock has been acquired for MergeTree tables", ValueType::Number) \
\
M(RealTimeMicroseconds, "Total (wall clock) time spent in processing (queries and other tasks) threads (note that this is a sum).", ValueType::Microseconds) \
M(UserTimeMicroseconds, "Total time spent in processing (queries and other tasks) threads executing CPU instructions in user mode. This includes time CPU pipeline was stalled due to main memory access, cache misses, branch mispredictions, hyper-threading, etc.", ValueType::Microseconds) \
Expand Down
18 changes: 10 additions & 8 deletions src/Processors/QueryPlan/ReadFromMergeTree.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -310,7 +310,7 @@ void ReadFromMergeTree::AnalysisResult::checkLimits(const Settings & settings, c
}

ReadFromMergeTree::ReadFromMergeTree(
RangesInDataParts parts_,
RangesInDataPartsPtr parts_,
MergeTreeData::MutationsSnapshotPtr mutations_,
Names all_column_names_,
const MergeTreeData & data_,
Expand Down Expand Up @@ -395,7 +395,8 @@ std::unique_ptr<ReadFromMergeTree> ReadFromMergeTree::createLocalParallelReplica
{
const bool enable_parallel_reading = true;
return std::make_unique<ReadFromMergeTree>(
getParts(),
/// Optimized version of getParts() to avoid extra copy
analyzed_result_ptr ? std::make_shared<RangesInDataParts>(analyzed_result_ptr->parts_with_ranges) : prepared_parts,
mutations_snapshot,
all_column_names,
data,
Expand Down Expand Up @@ -1918,7 +1919,7 @@ void ReadFromMergeTree::applyFilters(ActionDAGNodes added_filter_nodes)
}

ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
RangesInDataParts parts,
const RangesInDataParts & parts,
MergeTreeData::MutationsSnapshotPtr mutations_snapshot,
const std::optional<VectorSearchParameters> & vector_search_parameters,
const StorageMetadataPtr & metadata_snapshot,
Expand All @@ -1933,6 +1934,7 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
bool find_exact_ranges)
{
AnalysisResult result;
RangesInDataParts res_parts;
const auto & settings = context_->getSettingsRef();

size_t total_parts = parts.size();
Expand Down Expand Up @@ -1993,7 +1995,7 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
bool add_index_stat_row_for_pk_expand = false;

{
MergeTreeDataSelectExecutor::filterPartsByPartition(
res_parts = MergeTreeDataSelectExecutor::filterPartsByPartition(
parts,
indexes->partition_pruner,
indexes->minmax_idx_condition,
Expand All @@ -2008,7 +2010,7 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
result.sampling = MergeTreeDataSelectExecutor::getSampling(
query_info_,
metadata_snapshot->getColumns().getAllPhysical(),
parts,
res_parts,
indexes->key_condition,
data,
metadata_snapshot,
Expand All @@ -2018,13 +2020,13 @@ ReadFromMergeTree::AnalysisResultPtr ReadFromMergeTree::selectRangesToRead(
if (result.sampling.read_nothing)
return std::make_shared<AnalysisResult>(std::move(result));

for (const auto & part : parts)
for (const auto & part : res_parts)
total_marks_pk += part.data_part->index_granularity->getMarksCountWithoutFinal();
parts_before_pk = parts.size();
parts_before_pk = res_parts.size();

auto reader_settings = MergeTreeReaderSettings::create(context_, query_info_);
result.parts_with_ranges = MergeTreeDataSelectExecutor::filterPartsByPrimaryKeyAndSkipIndexes(
std::move(parts),
std::move(res_parts),
metadata_snapshot,
mutations_snapshot,
context_,
Expand Down
8 changes: 4 additions & 4 deletions src/Processors/QueryPlan/ReadFromMergeTree.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ class ReadFromMergeTree final : public SourceStepWithFilter
using AnalysisResultPtr = std::shared_ptr<AnalysisResult>;

ReadFromMergeTree(
RangesInDataParts parts_,
RangesInDataPartsPtr parts_,
MergeTreeData::MutationsSnapshotPtr mutations_snapshot_,
Names all_column_names_,
const MergeTreeData & data_,
Expand Down Expand Up @@ -206,7 +206,7 @@ class ReadFromMergeTree final : public SourceStepWithFilter
};

static AnalysisResultPtr selectRangesToRead(
RangesInDataParts parts,
const RangesInDataParts & parts,
MergeTreeData::MutationsSnapshotPtr mutations_snapshot,
const std::optional<VectorSearchParameters> & vector_search_parameters,
const StorageMetadataPtr & metadata_snapshot,
Expand Down Expand Up @@ -246,7 +246,7 @@ class ReadFromMergeTree final : public SourceStepWithFilter
AnalysisResultPtr getAnalyzedResult() const { return analyzed_result_ptr; }
void setAnalyzedResult(AnalysisResultPtr analyzed_result_ptr_) { analyzed_result_ptr = std::move(analyzed_result_ptr_); }

const RangesInDataParts & getParts() const { return analyzed_result_ptr ? analyzed_result_ptr->parts_with_ranges : prepared_parts; }
const RangesInDataParts & getParts() const { return analyzed_result_ptr ? analyzed_result_ptr->parts_with_ranges : *prepared_parts; }
MergeTreeData::MutationsSnapshotPtr getMutationsSnapshot() const { return mutations_snapshot; }

const MergeTreeData & getMergeTreeData() const { return data; }
Expand All @@ -269,7 +269,7 @@ class ReadFromMergeTree final : public SourceStepWithFilter
private:
MergeTreeReaderSettings reader_settings;

RangesInDataParts prepared_parts;
RangesInDataPartsPtr prepared_parts;
MergeTreeData::MutationsSnapshotPtr mutations_snapshot;

Names all_column_names;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ MergeTreeDataPartsVector collectInitial(const MergeTreeData & data, const MergeT
MergeTreeDataPartsVector outdated_parts;

{
auto lock = data.lockParts();
auto lock = data.readLockParts();
active_parts = data.getDataPartsVectorForInternalUsage({MergeTreeData::DataPartState::Active}, affordable_kinds, lock);
outdated_parts = data.getDataPartsVectorForInternalUsage({MergeTreeData::DataPartState::Outdated}, affordable_kinds, lock);
}
Expand Down
2 changes: 1 addition & 1 deletion src/Storages/MergeTree/DataPartsExchange.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -389,7 +389,7 @@ MergeTreeData::DataPartPtr Service::findPart(const String & name)
static const UInt32 wait_timeout_ms = 1000;
auto pred = [&] ()
{
auto lock = data.lockParts();
auto lock = data.readLockParts();
return part->getState() != MergeTreeDataPartState::PreActive;
};

Expand Down
Loading
Loading