diff options
| author | Iurii Kravchenko <[email protected]> | 2026-07-16 19:05:15 +0200 |
|---|---|---|
| committer | GitHub <[email protected]> | 2026-07-16 17:05:15 +0000 |
| commit | 3e157dfd8397c17228018cac27cf5930711c05ec (patch) | |
| tree | bb175317c33d8ac33b56703d375970d823e0e8cc | |
| parent | 6ce360afd2f5ac54014906188105787285695bed (diff) | |
Tiling++ json (#46813)
4 files changed, 54 insertions, 2 deletions
diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h index b54484b952b..b35617ec0ae 100644 --- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h +++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/abstract.h @@ -71,6 +71,8 @@ struct ICompactionUnit { virtual TOptimizationPriority DoGetUsefulMetric() const = 0; + virtual NJson::TJsonValue DoSerializeToJsonVisual() const = 0; + protected: virtual void DoAddPortion(typename TPortion::TPtr p) = 0; virtual void DoRemovePortion(typename TPortion::TConstPtr p) = 0; diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h index f89cade5075..23f50e6b86e 100644 --- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h +++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/levels.h @@ -118,6 +118,13 @@ struct LastLevel: ICompactionUnit<TKey, TPortion> { auto [begin, end] = Borders(p); return std::distance(begin, end); } + + NJson::TJsonValue DoSerializeToJsonVisual() const override { + NJson::TJsonValue result = NJson::JSON_MAP; + result.InsertValue("Candidates", Candidates.size()); + result.InsertValue("Portions", Portions.size()); + return result; + } }; template <std::totally_ordered TKey, typename TPortion> @@ -175,6 +182,12 @@ struct Accumulator: ICompactionUnit<TKey, TPortion> { TOptimizationPriority DoGetUsefulMetric() const override { return BuildPriority(0); } + + NJson::TJsonValue DoSerializeToJsonVisual() const override { + NJson::TJsonValue result = NJson::JSON_MAP; + result.InsertValue("Portions", Portions.size()); + return result; + } }; template <std::totally_ordered TKey, typename TPortion> @@ -255,6 +268,13 @@ struct MiddleLevel: ICompactionUnit<TKey, TPortion> { TOptimizationPriority DoGetUsefulMetric() const override { return BuildPriority(); } + + NJson::TJsonValue DoSerializeToJsonVisual() const override { + NJson::TJsonValue result = NJson::JSON_MAP; + result.InsertValue("Height", Intersections.GetMaxCount()); + result.InsertValue("Portions", PortionById.size()); + return result; + } }; } // namespace NKikimr::NOlap::NStorageOptimizer::NTiling diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h index 574fa7ad453..a7a526f540c 100644 --- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h +++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/tiling.h @@ -368,6 +368,18 @@ struct Tiling: ICompactionUnit<TKey, TPortion> { } return true; } + + NJson::TJsonValue DoSerializeToJsonVisual() const override { + NJson::TJsonValue tiling_info = NJson::JSON_MAP; + tiling_info.InsertValue("Accumulator", Accumulator.DoSerializeToJsonVisual()); + NJson::TJsonValue levels = NJson::JSON_ARRAY; + for (auto& [_, level] : MiddleLevels) { + levels.AppendValue(level.DoSerializeToJsonVisual()); + } + tiling_info.InsertValue("MiddleLevels", levels); + tiling_info.InsertValue("LastLevel", LastLevel.DoSerializeToJsonVisual()); + return tiling_info; + } }; } // namespace NKikimr::NOlap::NStorageOptimizer::NTiling diff --git a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp index 47fa5afd2a3..ec4baed0a8d 100644 --- a/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp +++ b/ydb/core/tx/columnshard/engines/storage/optimizer/tiling/tiling_pp/wrapper.cpp @@ -30,7 +30,7 @@ struct TPlannerSettings { ui64 PortionExpectedSize = 4ULL * 1024 * 1024; ui32 CompactionThreads = 2; - void SerializeToProto(NKikimrSchemeOp::TCompactionPlannerConstructorContainer::TTilingOptimizer& proto) const { + NJson::TJsonValue SerializeToJson() const { NJson::TJsonValue json(NJson::JSON_MAP); json["accumulator_portion_size_limit"] = TilingSettings.AccumulatorPortionSizeLimit; json["k"] = (ui64)TilingSettings.K; @@ -50,7 +50,11 @@ struct TPlannerSettings { json["aging_max_portion_promotion"] = TilingSettings.AgingSettings.MaxPortionPromotion; json["compaction_threads"] = CompactionThreads; json["enable_compatibility_mode"] = TilingSettings.EnableCompatibilityMode; - proto.SetJson(NJson::WriteJson(json, /*formatOutput=*/false)); + return json; + } + + void SerializeToProto(NKikimrSchemeOp::TCompactionPlannerConstructorContainer::TTilingOptimizer& proto) const { + proto.SetJson(NJson::WriteJson(SerializeToJson(), /*formatOutput=*/false)); } TConclusionStatus DeserializeFromProto(const NKikimrSchemeOp::TCompactionPlannerConstructorContainer::TTilingOptimizer& proto) { @@ -184,6 +188,7 @@ TTilingSettings MakeCoreSettings(const TPlannerSettings& settings) { class TOptimizerPlannerAdapter: public IOptimizerPlanner { private: using TBase = IOptimizerPlanner; + TPlannerSettings Settings; TCounters Counters; TCoreTiling Core; std::shared_ptr<IStoragesManager> StoragesManager; @@ -252,11 +257,24 @@ protected: return {}; } + TString DoDebugString() const override { + return DoSerializeToJsonVisual().GetString(); + } + + NJson::TJsonValue DoSerializeToJsonVisual() const override { + NJson::TJsonValue compaction_info = NJson::JSON_MAP; + compaction_info.InsertValue("1-Name", "TILING++"); + compaction_info.InsertValue("2-Settings", Settings.SerializeToJson()); + compaction_info.InsertValue("3-Levels", Core.DoSerializeToJsonVisual()); + return compaction_info; + } + public: TOptimizerPlannerAdapter(const TInternalPathId pathId, const std::shared_ptr<IStoragesManager>& storagesManager, const std::shared_ptr<arrow::Schema>& /*primaryKeysSchema*/, const TPlannerSettings& settings, const std::optional<ui64>& nodePortionsCountLimit) : TBase(pathId, nodePortionsCountLimit) + , Settings(settings) , Counters() , Core(MakeCoreSettings(settings), Counters) , StoragesManager(storagesManager) |
