code: func (h *Handle) GCStats(is infoschema.InfoSchema, ddlLease time.Duration) error {
  	// To make sure that all the deleted tables' schema and stats info have been acknowledged to all tidb,
  	// we only garbage collect version before 10 lease.
  	lease := mathutil.MaxInt64(int64(h.Lease), int64(ddlLease))
  	offset := DurationToTS(10 * time.Duration(lease))
  	if h.LastUpdateVersion() < offset {
  		return nil
  	}
  	sql := fmt.Sprintf("select table_id from mysql.stats_meta where version < %d", h.LastUpdateVersion()-offset)
  	rows, _, err := h.restrictedExec.ExecRestrictedSQL(nil, sql)
  	if err != nil {
  		return errors.Trace(err)
  	}
  	for _, row := range rows {
  		if err := h.gcTableStats(is, row.GetInt64(0)); err != nil {
  			return errors.Trace(err)
  		}
  	}
  	return nil
  }
docs: // GCStats will garbage collect the useless stats info. For dropped tables, we will first update their version so that
  // other tidb could know that table is deleted.