diff --git a/configs/milvus.yaml b/configs/milvus.yaml index 98609675ca..c737f4df96 100644 --- a/configs/milvus.yaml +++ b/configs/milvus.yaml @@ -283,6 +283,7 @@ dataCoord: # (smallProportion * segment max # of rows). compactableProportion: 0.5 # A compaction will happen on small segments if the segment after compaction will have # over (compactableProportion * segment max # of rows) rows. + # MUST BE GREATER THAN OR EQUAL TO !!! compaction: enableAutoCompaction: true diff --git a/internal/datacoord/compaction_trigger.go b/internal/datacoord/compaction_trigger.go index 7b9127e278..e011bcb51a 100644 --- a/internal/datacoord/compaction_trigger.go +++ b/internal/datacoord/compaction_trigger.go @@ -535,7 +535,9 @@ func (t *compactionTrigger) generatePlans(segments []*SegmentInfo, force bool, i targetRow += s.GetNumOfRows() } // only merge if candidate number is large than MinSegmentToMerge or if target row is large enough - if len(bucket) >= Params.DataCoordCfg.MinSegmentToMerge || targetRow > int64(float64(segment.GetMaxRowNum())*Params.DataCoordCfg.SegmentCompactableProportion) { + if len(bucket) >= Params.DataCoordCfg.MinSegmentToMerge || + len(bucket) > 1 && + targetRow > int64(float64(segment.GetMaxRowNum())*Params.DataCoordCfg.SegmentCompactableProportion) { plan := segmentsToPlan(bucket, compactTime) log.Info("generate a plan for small candidates", zap.Any("plan", plan), zap.Int64("target segment row", targetRow), zap.Int64("target segment size", size))