diff --git a/internal/querynodev2/segments/segment_loader.go b/internal/querynodev2/segments/segment_loader.go index 1aecf80a8f71b..3a431f887406b 100644 --- a/internal/querynodev2/segments/segment_loader.go +++ b/internal/querynodev2/segments/segment_loader.go @@ -1275,7 +1275,18 @@ func getResourceUsageEstimateOfSegment(schema *schemapb.CollectionSchema, loadIn // get size of delete data for _, fieldBinlog := range loadInfo.Deltalogs { - segmentMemorySize += uint64(float64(getBinlogDataMemorySize(fieldBinlog)) * multiplyFactor.deltaDataExpansionFactor) + // MemorySize of filedBinlog is the actual size in memory, so the expansionFactor + // should be 1, in most cases. + expansionFactor := float64(1) + memSize := getBinlogDataMemorySize(fieldBinlog) + + // Note: If MemorySize == DiskSize, it means the segment comes from Milvus 2.3, + // MemorySize is actually compressed DiskSize of deltalog, so we'll fallback to use + // deltaExpansionFactor to compromise the compression ratio. + if memSize == getBinlogDataDiskSize(fieldBinlog) { + expansionFactor = multiplyFactor.deltaDataExpansionFactor + } + segmentMemorySize += uint64(float64(memSize) * expansionFactor) } return &ResourceUsage{ MemorySize: segmentMemorySize + indexMemorySize,