| Bug #821 | Aggregate function or group by in derived table causes disconnect from server | ||
|---|---|---|---|
| Submitted: | 9 Jul 2003 15:59 | Modified: | 16 Jul 2003 2:52 |
| Reporter: | Lee Krawczyk | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) |
| Version: | 4.1.0-alpha | OS: | Linux (Linux (Redhat 6.1) 2.2.12-20) |
| Assigned to: | Oleksandr Byelkin | CPU Architecture: | Any |
[9 Jul 2003 15:59]
Lee Krawczyk
[9 Jul 2003 16:07]
Lee Krawczyk
Had the wrong version number.
[10 Jul 2003 13:23]
Oleksandr Byelkin
Thank you for good bug report! I can't repeat it on last mysql 4.1 from bitkeeper repository. It looks like problem already solved.
[10 Jul 2003 14:42]
MySQL Verification Team
Can you upload a table so that we can re-check it ???
[14 Jul 2003 13:18]
Lee Krawczyk
It appears that it is not the query itself that is causing the problem, but it is the explain plan for the query.
The following is the table I used (id is a primary key):
$ mysql -u root -p ranking
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2 to server version: 4.1.0-alpha-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> select * from wb1;
+----+-----+
| id | sum |
+----+-----+
| 27 | 19 |
| 17 | 19 |
| 2 | 17 |
| 31 | 16 |
| 37 | 16 |
| 24 | 15 |
| 19 | 15 |
| 49 | 15 |
| 22 | 14 |
| 45 | 14 |
| 7 | 14 |
| 12 | 14 |
| 16 | 14 |
| 40 | 13 |
| 32 | 13 |
| 3 | 13 |
| 5 | 13 |
| 4 | 13 |
| 25 | 13 |
| 14 | 12 |
| 9 | 12 |
| 42 | 12 |
| 46 | 12 |
| 39 | 12 |
| 41 | 12 |
| 44 | 12 |
| 23 | 11 |
| 36 | 11 |
| 30 | 11 |
| 48 | 11 |
| 28 | 11 |
| 6 | 11 |
| 35 | 11 |
| 26 | 11 |
| 29 | 10 |
| 43 | 10 |
| 15 | 10 |
| 18 | 10 |
| 8 | 10 |
| 11 | 10 |
| 13 | 9 |
| 10 | 9 |
| 38 | 9 |
| 21 | 9 |
| 34 | 9 |
| 1 | 9 |
| 20 | 8 |
| 33 | 6 |
| 47 | 5 |
| 50 | 2 |
| 53 | 2 |
| 52 | 2 |
| 51 | 1 |
+----+-----+
53 rows in set (0.00 sec)
The following is an excerpt from a test session showing the query results and error message produced from attempting the EXPLAIN:
mysql> select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt from wb1
-> group by sum order by cnt desc) tbl;
+--------------+----------+
| sum(tbl.sum) | sum(cnt) |
+--------------+----------+
| 158 | 53 |
+--------------+----------+
1 row in set (0.00 sec)
mysql> explain select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt from wb1
-> group by sum order by cnt desc) tbl;
ERROR 2013: Lost connection to MySQL server during query
mysql> select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt from wb1
-> group by sum order by cnt desc) tbl;
ERROR 2006: MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1
Current database: ranking
+--------------+----------+
| sum(tbl.sum) | sum(cnt) |
+--------------+----------+
| 158 | 53 |
+--------------+----------+
1 row in set (0.01 sec)
mysql> select sum, count(*) cnt from wb1 group by sum order by cnt desc;
+-----+-----+
| sum | cnt |
+-----+-----+
| 11 | 8 |
| 12 | 7 |
| 13 | 6 |
| 10 | 6 |
| 9 | 6 |
| 14 | 5 |
| 2 | 3 |
| 15 | 3 |
| 16 | 2 |
| 19 | 2 |
| 1 | 1 |
| 8 | 1 |
| 6 | 1 |
| 17 | 1 |
| 5 | 1 |
+-----+-----+
15 rows in set (0.00 sec)
mysql> explain select sum, count(*) cnt from wb1 group by sum order by cnt desc;
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
| 1 | SIMPLE | wb1 | ALL | NULL | NULL | NULL | NULL | 53 | Using temporary; Using filesort |
+----+-------------+-------+------+---------------+------+---------+------+------+---------------------------------+
1 row in set (0.00 sec)
Notice that the EXPLAIN works fine in queries that do not use derived tables.
Hope this helps!
[14 Jul 2003 22:44]
Oleksandr Byelkin
I try following sequence on last mysql built from repository: + drop table if exists wb1; + Warnings: + Note 1051 Unknown table 'wb1' + create table wb1(id int,sum int); + insert into wb1 values (27,19),(17,19),(2,17),(31,16),(37,16),(24,15),(19,15),(49,15),(22,14),(45,14),(7,14),(12,14),(16,14),(40,13),(32,13),(3,13),(5,13),(4,13),(25,13),(14,12),(9,12),(42,12),(46,12),(39,12),(41,12),(44,12),(23,11),(36,11),(30,11),(48,11),(28,11),(6,11),(35,11),(26,11),(29,10),(43,10),(15,10),(18,10),(8,10),(11,10),(13,9),(10,9),(38,9),(21,9),(34,9),(1,9),(20,8),(33,6),(47,5),(50,2),(53,2),(52,2),(51,1); + select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt from wb1 group by sum order by cnt desc) tbl; + sum(tbl.sum) sum(cnt) + 158 53 + explain select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt from wb1 group by sum order by cnt desc) tbl; + id select_type table type possible_keys key key_len ref rows Extra + 1 PRIMARY <derived2> ALL NULL NULL NULL NULL 15 + 2 DERIVED wb1 ALL NULL NULL NULL NULL 53 Using temporary; Using filesort + drop table wb1; Can you provide output show create table wb1? (may be it depend of table structure)
[15 Jul 2003 14:54]
Lee Krawczyk
wb1 was created using MySQL Control Center 0.9.2-beta. Rows were inserted using the following command:
insert into wb1
select wb1, count(*) from pblot
group by wb1
pblot was a standard MyISAM table loaded by an import from Navicat that created 560 rows.
Create table output is:
CREATE TABLE `wb1` (
`id` decimal(10,0) NOT NULL default '0',
`sum` decimal(10,0) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM CHARSET=latin1;
I replicated the test on another machine (Redhat 9.0 linux 2.4.20-13.9). Here is the result I got:
$ mysql -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7 to server version: 4.1.0-alpha
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> create database ranking;
Query OK, 1 row affected (0.02 sec)
mysql> connect ranking;
Connection id: 8
Current database: ranking
mysql> show tables;
Empty set (0.00 sec)
mysql> create table wb1(id int,sum int);
Query OK, 0 rows affected (0.01 sec)
mysql> show tables;
+-------------------+
| Tables_in_ranking |
+-------------------+
| wb1 |
+-------------------+
1 row in set (0.00 sec)
mysql> insert into wb1 values
-> (27,19),(17,19),(2,17),(31,16),(37,16),(24,15),(19,15),(49,15),(22,14),(45,14),(7,14),(12,14),(16,14),(40,13),(32,13),(3,13),(5,13),(4,13),(25,
13),(14,12),(9,12),(42,12),(46,12),(39,12),(41,12),(44,12),(23,11),(36,11),(30,11),(48,11),(28,11),(6,11),(35,11),(26,11),(29,10),(43,10),(15,10),(18,
10),(8,10),(11,10),(13,9),(10,9),(38,9),(21,9),(34,9),(1,9),(20,8),(33,6),(47,5),(50,2),(53,2),(52,2),(51,1);
Query OK, 53 rows affected (0.00 sec)
Records: 53 Duplicates: 0 Warnings: 0
mysql> select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt from wb1
-> group
-> by sum order by cnt desc) tbl;
+--------------+----------+
| sum(tbl.sum) | sum(cnt) |
+--------------+----------+
| 158 | 53 |
+--------------+----------+
1 row in set (0.02 sec)
mysql> explain select sum(tbl.sum), sum(cnt) from (select sum, count(*) cnt
-> from
-> wb1 group by sum order by cnt desc) tbl;
/usr/bin/mysqld_safe: line 320: 29597 Aborted $NOHUP_NICENESS $ledir/$MYSQLD $defaults --basedir=$MY_BASEDIR_VERSION --datadir=$DATADI
R $USER_OPTION --pid-file=$pid_file --skip-locking >>$err_log 2>&1
Number of processes running now: 1
ERROR 2013: Lost connection to MySQL server during query
mysql> mysqld process hanging, pid 29606 - killed
030715 14:46:39 mysqld restarted
I downloaded the binary version of 4.1.0-alpha on May 16. Perhaps I should get the latest build and try again.
[15 Jul 2003 16:18]
MySQL Verification Team
I tested this with the latest bk 4.1 tree and seems that
was already fixed:
C:\mysql\bin>mysql test
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1 to server version: 4.1.1-alpha-max-debug
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql> explain select sum(tbl.sum), sum(cnt) from
-> (select sum, count(*) cnt from wb1 group by sum order by cnt desc) tbl\G
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: <derived2>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 15
Extra:
*************************** 2. row ***************************
id: 2
select_type: DERIVED
table: wb1
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 53
Extra: Using temporary; Using filesort
2 rows in set (0.02 sec)
[16 Jul 2003 2:52]
Oleksandr Byelkin
Thank you for bug report. I tested it on last bk tree. and found that this bug is fixed.
