pt-table-checksum doesn't use non-unique index with highest cardinality

Reported by Daniel Nichter on 2013-07-10
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Percona Toolkit
Status tracked in 2.2
2.1
Medium
Daniel Nichter
2.2
High
Daniel Nichter

Bug Description

If there are only non-unique index, pt-table-checksum should choose the one with the highest cardinality, but it doesn't. In NIbbleIterator.pm:

   if ( !$best_index && @possible_indexes ) {
      PTDEBUG && _d('No PRIMARY or unique indexes;',
         'will use index with highest cardinality');
      foreach my $index ( @possible_indexes ) {
         $indexes->{$index}->{cardinality} = _get_index_cardinality(
            %args,
            index => $index,
         );
      }
      @possible_indexes = sort {
         # Prefer the index with the highest cardinality.
         my $cmp
            = $indexes->{$b}->{cardinality} <=> $indexes->{$b}->{cardinality};
         if ( $cmp == 0 ) {
            # Indexes have the same cardinality; prefer the one with
            # more columns.
            $cmp = scalar @{$indexes->{$b}->{cols}}
               <=> scalar @{$indexes->{$a}->{cols}};
         }
         $cmp;
      } @possible_indexes;
      $best_index = $possible_indexes[0];
   }

We need to test that block.

Changed in percona-toolkit:
assignee: nobody → Daniel Nichter (daniel-nichter)
Daniel Nichter (daniel-nichter) wrote :

Simple fix, can you spot it? :

         my $cmp
            = $indexes->{$b}->{cardinality} <=> $indexes->{$b}->{cardinality};

If not, see the branches.

To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers