aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorivanmorozov <ivanmorozov@yandex-team.com>2023-07-07 19:28:57 +0300
committerivanmorozov <ivanmorozov@yandex-team.com>2023-07-07 19:28:57 +0300
commit6aaed8aa7a50030099963d21a91f767dd9ff792c (patch)
treefe9bf8888b3c25f13fb636228f25413aca47eb53
parentf914c3da448365ea82ea3462246d1080cacec124 (diff)
downloadydb-6aaed8aa7a50030099963d21a91f767dd9ff792c.tar.gz
KIKIMR-18453: correct weight for compaction usage
-rw-r--r--ydb/core/tx/columnshard/engines/storage/granule.h34
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;