diff options
author | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-07-07 19:28:57 +0300 |
---|---|---|
committer | ivanmorozov <ivanmorozov@yandex-team.com> | 2023-07-07 19:28:57 +0300 |
commit | 6aaed8aa7a50030099963d21a91f767dd9ff792c (patch) | |
tree | fe9bf8888b3c25f13fb636228f25413aca47eb53 | |
parent | f914c3da448365ea82ea3462246d1080cacec124 (diff) | |
download | ydb-6aaed8aa7a50030099963d21a91f767dd9ff792c.tar.gz |
KIKIMR-18453: correct weight for compaction usage
-rw-r--r-- | ydb/core/tx/columnshard/engines/storage/granule.h | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/ydb/core/tx/columnshard/engines/storage/granule.h b/ydb/core/tx/columnshard/engines/storage/granule.h index 8d595d778c3..8c007e2e554 100644 --- a/ydb/core/tx/columnshard/engines/storage/granule.h +++ b/ydb/core/tx/columnshard/engines/storage/granule.h @@ -165,6 +165,30 @@ class TCompactionPriority: public TCompactionPriorityInfo { private: using TBase = TCompactionPriorityInfo; TGranuleAdditiveSummary GranuleSummary; + + enum class EProblemPriorityPrediction: ui32 { + GranuleOverload = 100, + BigInsertedSize = 90, + ManyInsertedPortions = 80, + Other = 0 + }; + + EProblemPriorityPrediction GetPriorityClass() const { + if (GranuleSummary.GetActivePortionsCount() <= 1) { + return EProblemPriorityPrediction::Other; + } + if (GranuleSummary.GetGranuleSize() > TCompactionLimits::MAX_BLOB_SIZE * 10) { + return EProblemPriorityPrediction::GranuleOverload; + } else if (GranuleSummary.GetInserted().GetPortionsSize() > (i64)TCompactionLimits::MAX_BLOB_SIZE * 5) { + return EProblemPriorityPrediction::BigInsertedSize; + } else if (GranuleSummary.GetInserted().GetPortionsCount() > 50) { + return EProblemPriorityPrediction::ManyInsertedPortions; + } else { + return EProblemPriorityPrediction::Other; + } + + } + ui64 GetWeightCorrected() const { if (GranuleSummary.GetActivePortionsCount() <= 1) { return 0; @@ -179,8 +203,8 @@ public: } bool operator<(const TCompactionPriority& item) const { - return std::tuple(GetWeightCorrected(), GranuleSummary.GetActivePortionsCount(), item.NextAttemptInstant) - < std::tuple(item.GetWeightCorrected(), item.GranuleSummary.GetActivePortionsCount(), NextAttemptInstant); + return std::tuple((ui32)GetPriorityClass(), GetWeightCorrected(), GranuleSummary.GetActivePortionsCount(), item.NextAttemptInstant) + < std::tuple((ui32)item.GetPriorityClass(), item.GetWeightCorrected(), item.GranuleSummary.GetActivePortionsCount(), NextAttemptInstant); } }; @@ -255,7 +279,11 @@ public: void UpsertPortion(const TPortionInfo& info); virtual TString DebugString() const override { - return TStringBuilder() << "granule:" << GetGranuleId() << ";path_id:" << Record.PathId << ";"; + return TStringBuilder() << "granule:" << GetGranuleId() << ";" + << "path_id:" << Record.PathId << ";" + << "size:" << GetAdditiveSummary().GetGranuleSize() << ";" + << "portions_count:" << Portions.size() << ";" + ; } const TGranuleRecord Record; |