List:Commits« Previous MessageNext Message »
From:Pekka Nousiainen Date:August 31 2011 10:57am
Subject:bzr push into mysql-5.1-telco-7.0-wl4124-new3 branch (pekka.nousiainen:4490
to 4492) WL#4124
View as plain text  
 4492 Pekka Nousiainen	2011-08-31
      wl#4124 g02_rir.diff
      optimizer RIR sets weird HA_READ_KEY_EXACT

    modified:
      mysql-test/suite/ndb/r/ndb_statistics1.result
      sql/ha_ndb_index_stat.cc
      sql/ha_ndb_index_stat.h
      sql/ha_ndbcluster.cc
      sql/ha_ndbcluster.h
      storage/ndb/src/ndbapi/NdbIndexStat.cpp
 4491 Pekka Nousiainen	2011-08-31
      treename wl4124-new3

    modified:
      .bzr-mysql/default.conf
 4490 jonas oreland	2011-08-30
      ndb - fix windows problems in mt_thr_config

    modified:
      storage/ndb/src/kernel/vm/mt_thr_config.cpp
=== modified file '.bzr-mysql/default.conf'
--- a/.bzr-mysql/default.conf	2011-08-17 09:09:22 +0000
+++ b/.bzr-mysql/default.conf	2011-08-31 10:43:28 +0000
@@ -1,4 +1,4 @@
 [MYSQL]
 post_commit_to = commits@stripped
 post_push_to = commits@stripped
-tree_name = mysql-5.1-telco-7.0
+tree_name = mysql-5.1-telco-7.0-wl4124-new3

=== modified file 'mysql-test/suite/ndb/r/ndb_statistics1.result'
--- a/mysql-test/suite/ndb/r/ndb_statistics1.result	2011-08-28 18:21:59 +0000
+++ b/mysql-test/suite/ndb/r/ndb_statistics1.result	2011-08-31 10:53:27 +0000
@@ -59,11 +59,11 @@ id	select_type	table	type	possible_keys
 EXPLAIN
 SELECT * FROM t10000 WHERE k >= 42 and k < 10000;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t10000	range	PRIMARY	PRIMARY	4	NULL	2	Using where with pushed condition
+1	SIMPLE	t10000	range	PRIMARY	PRIMARY	4	NULL	9958	Using where with pushed condition
 EXPLAIN
 SELECT * FROM t10000 WHERE k BETWEEN 42 AND 10000;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t10000	range	PRIMARY	PRIMARY	4	NULL	2	Using where with pushed condition
+1	SIMPLE	t10000	range	PRIMARY	PRIMARY	4	NULL	9958	Using where with pushed condition
 EXPLAIN
 SELECT * FROM t10000 WHERE k < 42;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
@@ -97,11 +97,11 @@ id	select_type	table	type	possible_keys
 EXPLAIN
 SELECT * FROM t100 WHERE k BETWEEN 42 AND 10000;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t100	range	PRIMARY	PRIMARY	4	NULL	2	Using where with pushed condition
+1	SIMPLE	t100	range	PRIMARY	PRIMARY	4	NULL	58	Using where with pushed condition
 EXPLAIN
 SELECT * FROM t10000 WHERE k BETWEEN 42 AND 10000;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t10000	range	PRIMARY	PRIMARY	4	NULL	2	Using where with pushed condition
+1	SIMPLE	t10000	range	PRIMARY	PRIMARY	4	NULL	9958	Using where with pushed condition
 EXPLAIN
 SELECT * FROM t10000 WHERE I = 0;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
@@ -129,7 +129,7 @@ id	select_type	table	type	possible_keys
 EXPLAIN
 SELECT * FROM t10000 WHERE I = 0 AND J BETWEEN 1 AND 10;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t10000	range	J,I	J	5	NULL	2	Using where with pushed condition
+1	SIMPLE	t10000	range	J,I	I	10	NULL	2	Using where with pushed condition
 EXPLAIN
 SELECT * FROM t10000 WHERE I = 0 AND J = 1;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
@@ -149,7 +149,7 @@ id	select_type	table	type	possible_keys
 EXPLAIN
 SELECT * FROM t10000 WHERE J = 0 AND K BETWEEN 1 AND 10;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
-1	SIMPLE	t10000	ref	PRIMARY,J	J	5	const	2	Using where with pushed condition
+1	SIMPLE	t10000	range	PRIMARY,J	J	9	NULL	2	Using where with pushed condition
 EXPLAIN
 SELECT * FROM t10000 WHERE J = 0 AND K = 1;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra

=== modified file 'sql/ha_ndb_index_stat.cc'
--- a/sql/ha_ndb_index_stat.cc	2011-08-16 11:53:13 +0000
+++ b/sql/ha_ndb_index_stat.cc	2011-08-31 10:53:27 +0000
@@ -2030,20 +2030,21 @@ int
 ha_ndbcluster::ndb_index_stat_query(uint inx,
                                     const key_range *min_key,
                                     const key_range *max_key,
-                                    NdbIndexStat::Stat& stat)
+                                    NdbIndexStat::Stat& stat,
+                                    int from)
 {
   DBUG_ENTER("ha_ndbcluster::ndb_index_stat_query");
 
   const KEY *key_info= table->key_info + inx;
   const NDB_INDEX_DATA &data= m_index[inx];
   const NDBINDEX *index= data.index;
-  DBUG_PRINT("index_stat", ("index: %s", index->getName()));
+  DBUG_PRINT("index_stat", ("index: %u name: %s", inx, index->getName()));
 
   int err= 0;
 
   /* Create an IndexBound struct for the keys */
   NdbIndexScanOperation::IndexBound ib;
-  compute_index_bounds(ib, key_info, min_key, max_key);
+  compute_index_bounds(ib, key_info, min_key, max_key, from);
   ib.range_no= 0;
 
   Ndb_index_stat *st=
@@ -2096,12 +2097,11 @@ ha_ndbcluster::ndb_index_stat_get_rir(ui
   DBUG_ENTER("ha_ndbcluster::ndb_index_stat_get_rir");
   uint8 stat_buffer[NdbIndexStat::StatBufferBytes];
   NdbIndexStat::Stat stat(stat_buffer);
-  int err= ndb_index_stat_query(inx, min_key, max_key, stat);
+  int err= ndb_index_stat_query(inx, min_key, max_key, stat, 1);
   if (err == 0)
   {
     double rir= -1.0;
     NdbIndexStat::get_rir(stat, &rir);
-    DBUG_PRINT("index_stat", ("stat rir: %.2f", rir));
     ha_rows rows= ndb_index_stat_round(rir);
     /* Estimate only so cannot return exact zero */
     if (rows == 0)
@@ -2125,7 +2125,7 @@ ha_ndbcluster::ndb_index_stat_set_rpk(ui
   NdbIndexStat::Stat stat(stat_buffer);
   const key_range *min_key= 0;
   const key_range *max_key= 0;
-  err= ndb_index_stat_query(inx, min_key, max_key, stat);
+  err= ndb_index_stat_query(inx, min_key, max_key, stat, 2);
   if (err == 0)
   {
     uint k;

=== modified file 'sql/ha_ndb_index_stat.h'
--- a/sql/ha_ndb_index_stat.h	2011-08-11 17:11:30 +0000
+++ b/sql/ha_ndb_index_stat.h	2011-08-31 10:53:27 +0000
@@ -40,7 +40,8 @@ extern long g_ndb_status_index_stat_cach
 void 
 compute_index_bounds(NdbIndexScanOperation::IndexBound & bound,
                      const KEY *key_info,
-                     const key_range *start_key, const key_range *end_key);
+                     const key_range *start_key, const key_range *end_key,
+                     int from);
 
 /* error codes local to ha_ndb */
 

=== modified file 'sql/ha_ndbcluster.cc'
--- a/sql/ha_ndbcluster.cc	2011-08-28 13:29:22 +0000
+++ b/sql/ha_ndbcluster.cc	2011-08-31 10:53:27 +0000
@@ -3732,11 +3732,37 @@ count_key_columns(const KEY *key_info, c
 }
 
 /* Helper method to compute NDB index bounds. Note: does not set range_no. */
+/* Stats queries may differ so add "from" 0:normal 1:RIR 2:RPK. */
 void
 compute_index_bounds(NdbIndexScanOperation::IndexBound & bound,
                      const KEY *key_info,
-                     const key_range *start_key, const key_range *end_key)
+                     const key_range *start_key, const key_range *end_key,
+                     int from)
 {
+  DBUG_ENTER("ha_ndbcluster::compute_index_bounds");
+  DBUG_PRINT("info", ("from: %d", from));
+
+#ifndef DBUG_OFF
+  DBUG_PRINT("info", ("key parts: %u length: %u",
+                      key_info->key_parts, key_info->key_length));
+  {
+    for (uint j= 0; j <= 1; j++)
+    {
+      const key_range* kr= (j == 0 ? start_key : end_key);
+      if (kr)
+      {
+        DBUG_PRINT("info", ("key range %u: length: %u map: %lx flag: %d",
+                          j, kr->length, kr->keypart_map, kr->flag));
+        DBUG_DUMP("key", kr->key, kr->length);
+      }
+      else
+      {
+        DBUG_PRINT("info", ("key range %u: none", j));
+      }
+    }
+  }
+#endif
+
   if (start_key)
   {
     bound.low_key= (const char*)start_key->key;
@@ -3751,9 +3777,11 @@ compute_index_bounds(NdbIndexScanOperati
     bound.low_key_count= 0;
   }
 
+  /* RIR query for x >= 1 inexplicably passes HA_READ_KEY_EXACT. */
   if (start_key &&
       (start_key->flag == HA_READ_KEY_EXACT ||
-       start_key->flag == HA_READ_PREFIX_LAST))
+       start_key->flag == HA_READ_PREFIX_LAST) &&
+      from != 1)
   {
     bound.high_key= bound.low_key;
     bound.high_key_count= bound.low_key_count;
@@ -3783,11 +3811,14 @@ compute_index_bounds(NdbIndexScanOperati
     bound.high_key= NULL;
     bound.high_key_count= 0;
   }
-  DBUG_PRINT("info", ("start_flag=0x%x end_flag=0x%x"
+  DBUG_PRINT("info", ("start_flag=%d end_flag=%d"
                       " lo_keys=%d lo_incl=%d hi_keys=%d hi_incl=%d",
                       start_key?start_key->flag:0, end_key?end_key->flag:0,
-                      bound.low_key_count, bound.low_inclusive,
-                      bound.high_key_count, bound.high_inclusive));
+                      bound.low_key_count,
+                      bound.low_key_count?bound.low_inclusive:0,
+                      bound.high_key_count,
+                      bound.high_key_count?bound.high_inclusive:0));
+  DBUG_VOID_RETURN;
 }
 
 /**
@@ -3853,7 +3884,8 @@ int ha_ndbcluster::ordered_index_scan(co
                          (descending?
                           end_key : start_key),
                          (descending?
-                          start_key : end_key));
+                          start_key : end_key),
+                         0);
     bound.range_no = 0;
     pbound = &bound;
   }
@@ -11881,7 +11913,8 @@ ha_ndbcluster::records_in_range(uint inx
         compute_index_bounds(ib,
                              key_info,
                              min_key, 
-                             max_key);
+                             max_key,
+                             0);
 
         ib.range_no= 0;
 
@@ -13514,7 +13547,7 @@ ha_ndbcluster::read_multi_range_first(KE
 
       /* Include this range in the ordered index scan. */
       NdbIndexScanOperation::IndexBound bound;
-      compute_index_bounds(bound, key_info, &r->start_key, &r->end_key);
+      compute_index_bounds(bound, key_info, &r->start_key, &r->end_key, 0);
       bound.range_no= i;
 
       if (m_multi_cursor->setBound(m_index[active_index].ndb_record_key,

=== modified file 'sql/ha_ndbcluster.h'
--- a/sql/ha_ndbcluster.h	2011-07-23 14:35:37 +0000
+++ b/sql/ha_ndbcluster.h	2011-08-31 10:53:27 +0000
@@ -861,7 +861,8 @@ private:
   int ndb_index_stat_query(uint inx,
                            const key_range *min_key,
                            const key_range *max_key,
-                           NdbIndexStat::Stat& stat);
+                           NdbIndexStat::Stat& stat,
+                           int from);
   int ndb_index_stat_get_rir(uint inx,
                              key_range *min_key,
                              key_range *max_key,

=== modified file 'storage/ndb/src/ndbapi/NdbIndexStat.cpp'
--- a/storage/ndb/src/ndbapi/NdbIndexStat.cpp	2011-08-11 17:11:30 +0000
+++ b/storage/ndb/src/ndbapi/NdbIndexStat.cpp	2011-08-31 10:53:27 +0000
@@ -548,7 +548,7 @@ NdbIndexStat::convert_range(Range& range
                             const NdbRecord* key_record,
                             const NdbIndexScanOperation::IndexBound* ib)
 {
-  DBUG_ENTER("NdbIndexStatImpl::convert_range");
+  DBUG_ENTER("NdbIndexStat::convert_range");
   Bound& bound1_f = range_f.m_bound1;
   Bound& bound2_f = range_f.m_bound2;
   NdbIndexStatImpl::Bound& bound1 =
@@ -625,7 +625,11 @@ NdbIndexStat::get_rir(const Stat& stat_f
     x = 1.0;
   require(rir != 0);
   *rir = x;
-  DBUG_PRINT("index_stat", ("rir:%.2f", *rir));
+#ifndef DBUG_OFF
+  char buf[100];
+  sprintf(buf, "%.2f", *rir);
+#endif
+  DBUG_PRINT("index_stat", ("rir:%s", buf));
   DBUG_VOID_RETURN;
 }
 
@@ -640,7 +644,11 @@ NdbIndexStat::get_rpk(const Stat& stat_f
     x = 1.0;
   require(rpk != 0);
   *rpk = x;
-  DBUG_PRINT("index_stat", ("rpk[%u]:%.2f", k, *rpk));
+#ifndef DBUG_OFF
+  char buf[100];
+  sprintf(buf, "%.2f", *rpk);
+#endif
+  DBUG_PRINT("index_stat", ("rpk[%u]:%s", k, buf));
   DBUG_VOID_RETURN;
 }
 

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.1-telco-7.0-wl4124-new3 branch (pekka.nousiainen:4490to 4492) WL#4124Pekka Nousiainen31 Aug