code: func (s *SessionStatsCollector) StoreQueryFeedback(feedback interface{}, h *Handle) error {
  	q := feedback.(*statistics.QueryFeedback)
  	// TODO: If the error rate is small or actual scan count is small, we do not need to store the feed back.
  	if !q.Valid || q.Hist == nil {
  		return nil
  	}
  	err := h.RecalculateExpectCount(q)
  	if err != nil {
  		return errors.Trace(err)
  	}
  	rate := q.CalcErrorRate()
  	if rate >= MinLogErrorRate && (q.Actual() >= MinLogScanCount || q.Expected >= MinLogScanCount) {
  		metrics.SignificantFeedbackCounter.Inc()
  		if log.GetLevel() == zap.DebugLevel {
  			h.logDetailedInfo(q)
  		}
  	}
  	metrics.StatsInaccuracyRate.Observe(rate)
  	s.Lock()
  	defer s.Unlock()
  	isIndex := q.Tp == statistics.IndexType
  	s.rateMap.update(q.PhysicalID, q.Hist.ID, rate, isIndex)
  	if len(s.feedback) < int(MaxQueryFeedbackCount.Load()) {
  		s.feedback = append(s.feedback, q)
  	}
  	return nil
  }
docs: // StoreQueryFeedback will merges the feedback into stats collector.