List:Commits« Previous MessageNext Message »
From:Sergey Vojtovich Date:February 5 2009 1:03pm
Subject:bzr commit into mysql-5.1-bugteam branch (svoj:2785) Bug#39185
View as plain text  
#At file:///home/svoj/devel/bzr-mysql/mysql-5.1-bugteam-bug39185/ based on revid:gshchepa@stripped

 2785 Sergey Vojtovich	2009-02-05
      BUG#39185 - Cardinality for merge tables calculated incorrectly.
      
      Every subsequent query to a merge table with indexes was lowering
      down cardinality.
      
      The problem was that key statistics was not cleared when merge
      children were detached. Causing next attach children perform
      incremental key statistics calculation.
      
      Fixed by clearing key statistics when attaching first child.
modified:
  mysql-test/r/merge.result
  mysql-test/t/merge.test
  storage/myisammrg/myrg_open.c

per-file messages:
  mysql-test/r/merge.result
    A test case for BUG#39185.
  mysql-test/t/merge.test
    A test case for BUG#39185.
  storage/myisammrg/myrg_open.c
    Clear key statistics when we're attaching first child, even
    if it's buffer was allocated before. This is needed because
    detach_children() doesn't clear statistics, causing incremental
    statistics calculation.
=== modified file 'mysql-test/r/merge.result'
--- a/mysql-test/r/merge.result	2009-02-04 13:00:40 +0000
+++ b/mysql-test/r/merge.result	2009-02-05 13:03:47 +0000
@@ -2041,4 +2041,23 @@ EXPLAIN SELECT COUNT(*) FROM t4;
 id	select_type	table	type	possible_keys	key	key_len	ref	rows	Extra
 1	SIMPLE	NULL	NULL	NULL	NULL	NULL	NULL	NULL	Select tables optimized away
 DROP TABLE t1, t2, t3, t4;
+CREATE TABLE t1(a INT, KEY(a));
+INSERT INTO t1 VALUES(0),(1),(2),(3),(4);
+ANALYZE TABLE t1;
+Table	Op	Msg_type	Msg_text
+test.t1	analyze	status	OK
+CREATE TABLE m1(a INT, KEY(a)) ENGINE=MERGE UNION=(t1);
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1';
+CARDINALITY
+5
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1';
+CARDINALITY
+5
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1';
+CARDINALITY
+5
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1';
+CARDINALITY
+5
+DROP TABLE t1, m1;
 End of 5.1 tests

=== modified file 'mysql-test/t/merge.test'
--- a/mysql-test/t/merge.test	2009-02-04 13:00:40 +0000
+++ b/mysql-test/t/merge.test	2009-02-05 13:03:47 +0000
@@ -1435,4 +1435,17 @@ EXPLAIN SELECT COUNT(*) FROM t1;
 EXPLAIN SELECT COUNT(*) FROM t4;
 DROP TABLE t1, t2, t3, t4;
 
+#
+# BUG#39185 - Cardinality for merge tables calculated incorrectly.
+#
+CREATE TABLE t1(a INT, KEY(a));
+INSERT INTO t1 VALUES(0),(1),(2),(3),(4);
+ANALYZE TABLE t1;
+CREATE TABLE m1(a INT, KEY(a)) ENGINE=MERGE UNION=(t1);
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1'; 
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1'; 
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1'; 
+SELECT CARDINALITY FROM INFORMATION_SCHEMA.STATISTICS WHERE TABLE_SCHEMA='test' AND TABLE_NAME='m1'; 
+DROP TABLE t1, m1;
+
 --echo End of 5.1 tests

=== modified file 'storage/myisammrg/myrg_open.c'
--- a/storage/myisammrg/myrg_open.c	2009-02-04 13:00:40 +0000
+++ b/storage/myisammrg/myrg_open.c	2009-02-05 13:03:47 +0000
@@ -428,10 +428,11 @@ int myrg_attach_children(MYRG_INFO *m_in
       if (!m_info->rec_per_key_part)
       {
         if(!(m_info->rec_per_key_part= (ulong*)
-             my_malloc(key_parts * sizeof(long), MYF(MY_WME|MY_ZEROFILL))))
+             my_malloc(key_parts * sizeof(long), MYF(MY_WME))))
           goto err; /* purecov: inspected */
         errpos= 1;
       }
+      bzero((char*) m_info->rec_per_key_part, key_parts * sizeof(long));
     }
 
     /* Add MyISAM table info. */

Thread
bzr commit into mysql-5.1-bugteam branch (svoj:2785) Bug#39185Sergey Vojtovich5 Feb
  • Re: bzr commit into mysql-5.1-bugteam branch (svoj:2785) Bug#39185Ingo Strüwing6 Feb