Compare commits

...

2 Commits

Author SHA1 Message Date
Alexander Gololobov
3a74b419ce
Merge 31ddfc6f5f into 733c57dae7 2024-09-15 12:25:44 +02:00
Alexander Gololobov
31ddfc6f5f Check time limit while analyzing indexes 2024-09-13 19:19:21 +02:00
2 changed files with 17 additions and 3 deletions

View File

@ -23,6 +23,7 @@
#include <Interpreters/ExpressionAnalyzer.h> #include <Interpreters/ExpressionAnalyzer.h>
#include <Interpreters/InterpreterSelectQuery.h> #include <Interpreters/InterpreterSelectQuery.h>
#include <Interpreters/Context.h> #include <Interpreters/Context.h>
#include <Interpreters/ProcessList.h>
#include <Processors/ConcatProcessor.h> #include <Processors/ConcatProcessor.h>
#include <Processors/QueryPlan/QueryPlan.h> #include <Processors/QueryPlan/QueryPlan.h>
#include <Processors/QueryPlan/CreatingSetsStep.h> #include <Processors/QueryPlan/CreatingSetsStep.h>
@ -528,6 +529,8 @@ void MergeTreeDataSelectExecutor::filterPartsByPartition(
} }
auto query_context = context->hasQueryContext() ? context->getQueryContext() : context; auto query_context = context->hasQueryContext() ? context->getQueryContext() : context;
QueryStatusPtr query_status = context->getProcessListElement();
PartFilterCounters part_filter_counters; PartFilterCounters part_filter_counters;
if (query_context->getSettingsRef().allow_experimental_query_deduplication) if (query_context->getSettingsRef().allow_experimental_query_deduplication)
selectPartsToReadWithUUIDFilter( selectPartsToReadWithUUIDFilter(
@ -549,7 +552,8 @@ void MergeTreeDataSelectExecutor::filterPartsByPartition(
minmax_columns_types, minmax_columns_types,
partition_pruner, partition_pruner,
max_block_numbers_to_read, max_block_numbers_to_read,
part_filter_counters); part_filter_counters,
query_status);
index_stats.emplace_back(ReadFromMergeTree::IndexStat{ index_stats.emplace_back(ReadFromMergeTree::IndexStat{
.type = ReadFromMergeTree::IndexType::None, .type = ReadFromMergeTree::IndexType::None,
@ -649,8 +653,13 @@ RangesInDataParts MergeTreeDataSelectExecutor::filterPartsByPrimaryKeyAndSkipInd
auto mark_cache = context->getIndexMarkCache(); auto mark_cache = context->getIndexMarkCache();
auto uncompressed_cache = context->getIndexUncompressedCache(); auto uncompressed_cache = context->getIndexUncompressedCache();
auto query_status = context->getProcessListElement();
auto process_part = [&](size_t part_index) auto process_part = [&](size_t part_index)
{ {
if (query_status)
query_status->checkTimeLimit();
auto & part = parts[part_index]; auto & part = parts[part_index];
RangesInDataPart ranges(part, part_index); RangesInDataPart ranges(part, part_index);
@ -1545,13 +1554,17 @@ void MergeTreeDataSelectExecutor::selectPartsToRead(
const DataTypes & minmax_columns_types, const DataTypes & minmax_columns_types,
const std::optional<PartitionPruner> & partition_pruner, const std::optional<PartitionPruner> & partition_pruner,
const PartitionIdToMaxBlock * max_block_numbers_to_read, const PartitionIdToMaxBlock * max_block_numbers_to_read,
PartFilterCounters & counters) PartFilterCounters & counters,
QueryStatusPtr query_status)
{ {
MergeTreeData::DataPartsVector prev_parts; MergeTreeData::DataPartsVector prev_parts;
std::swap(prev_parts, parts); std::swap(prev_parts, parts);
for (const auto & part_or_projection : prev_parts) for (const auto & part_or_projection : prev_parts)
{ {
if (query_status)
query_status->checkTimeLimit();
const auto * part = part_or_projection->isProjectionPart() ? part_or_projection->getParentPart() : part_or_projection.get(); const auto * part = part_or_projection->isProjectionPart() ? part_or_projection->getParentPart() : part_or_projection.get();
if (part_values && part_values->find(part->name) == part_values->end()) if (part_values && part_values->find(part->name) == part_values->end())
continue; continue;

View File

@ -126,7 +126,8 @@ private:
const DataTypes & minmax_columns_types, const DataTypes & minmax_columns_types,
const std::optional<PartitionPruner> & partition_pruner, const std::optional<PartitionPruner> & partition_pruner,
const PartitionIdToMaxBlock * max_block_numbers_to_read, const PartitionIdToMaxBlock * max_block_numbers_to_read,
PartFilterCounters & counters); PartFilterCounters & counters,
QueryStatusPtr query_status);
/// Same as previous but also skip parts uuids if any to the query context, or skip parts which uuids marked as excluded. /// Same as previous but also skip parts uuids if any to the query context, or skip parts which uuids marked as excluded.
static void selectPartsToReadWithUUIDFilter( static void selectPartsToReadWithUUIDFilter(