Bug #13293 SELECT query goes in an infinite loop after an ALTER TABLE
| Submitted: | 17 Sep 2005 12:51 | Modified: | 9 Dec 2005 0:05 |
|---|---|---|---|
| Reporter: | Emmanuel JAMIN | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Optimizer | Severity: | S1 (Critical) |
| Version: | 5.0.12 | OS: | Windows (windows & debian unstable) |
| Assigned to: | Evgeny Potemkin | CPU Architecture: | Any |
[17 Sep 2005 12:51]
Emmanuel JAMIN
[17 Sep 2005 19:15]
Hartmut Holzgraefe
verified on linux, works fine for 4.1.14, but hangs with 5.0.10, .12 and 5.0bk
[18 Sep 2005 7:30]
Heikki Tuuri
Hi!
If I restart the mysqld server after doing the ALTER, then the query works ok.
Also, if I create the table directly to its final form:
CREATE TABLE `test` (
`id` int(11) NOT NULL default '0',
`label` char(1) NOT NULL default '',
PRIMARY KEY (`label`,`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
then the query works ok.
Maybe the ALTER makes an inconsistent MySQL table object in memory, but the .frm file is created ok?
----
InnoDB prints the warning because MySQL is using a key value of length 4 in a search. The length does not make sense. The sensible key value lengths would be 1 or 5. Maybe MySQL does not know that in the new table definition, id is the first column in the PRIMARY KEY?
(gdb) bt
#0 row_sel_convert_mysql_key_to_innobase (tuple=0x40aca468,
buf=0x8c43110 "¥%", buf_len=61, index=0x40ad1e68,
key_ptr=0x8c79628 "a\002", key_len=4, trx=0x40aca068) at row0sel.c:2038
#1 0x0827b642 in ha_innobase::index_read(char*, char const*, unsigned, ha_rkey_
function) (this=0x8c570f0, buf=0x8c57218 "ÿ\002", key_ptr=0x8c79628 "a\002",
key_len=4, find_flag=HA_READ_AFTER_KEY) at ha_innodb.cc:3874
#2 0x08260f87 in QUICK_GROUP_MIN_MAX_SELECT::next_prefix() (this=0x8c7c800)
at opt_range.cc:8409
#3 0x082608d3 in QUICK_GROUP_MIN_MAX_SELECT::get_next() (this=0x8c7c800)
at opt_range.cc:8189
#4 0x08265989 in rr_quick (info=0x8c7e46c) at records.cc:165
#5 0x081fdfbd in sub_select (join=0x8c7d268, join_tab=0x8c7e430,
end_of_records=false) at sql_select.cc:9412
#6 0x081fdb01 in do_select (join=0x8c7d268, fields=0x0, table=0x8c79df8,
procedure=0x0) at sql_select.cc:9170
#7 0x081ea6cb in JOIN::exec() (this=0x8c7d268) at sql_select.cc:1304
#8 0x081ecc2d in mysql_select(THD*, Item***, st_table_list*, unsigned, List<Ite
m>&, Item*, unsigned, st_order*, st_order*, Item*, st_order*, unsigned long, sel
ect_result*, st_select_lex_unit*, st_select_lex*) (thd=0x8c55c38,
rref_pointer_array=0x8c55f94, tables=0x8c7cfa8, wild_num=0,
fields=@0x8c55efc, conds=0x0, og_num=1, order=0x8c7d1d8, group=0x0,
having=0x0, proc_param=0x0, select_options=2156153345, result=0x8c7d258,
unit=0x8c55c88, select_lex=0x8c55e7c) at sql_select.cc:2093
#9 0x081e6eb5 in handle_select(THD*, st_lex*, select_result*, unsigned long) (
thd=0x8c55c38, lex=0x8c55c78, result=0x8c7d258, setup_tables_done_option=0)
at sql_select.cc:238
#10 0x081ac7ee in mysql_execute_command(THD*) (thd=0x8c55c38)
at sql_parse.cc:2462
#11 0x081b4d66 in mysql_parse(THD*, char*, unsigned) (thd=0x8c55c38,
inBuf=0x8c7cd50 "SELECT distinct id a, id b FROM `test` order by id desc",
length=55) at sql_parse.cc:5393
#12 0x081aa877 in dispatch_command(enum_server_command, THD*, char*, unsigned)
(command=COM_QUERY, thd=0x8c55c38,
packet=0x8c74cf1 "SELECT distinct id a, id b FROM `test` order by id desc",
packet_length=56) at sql_parse.cc:1671
#13 0x081aa03f in do_command(THD*) (thd=0x8c55c38) at sql_parse.cc:1466
#14 0x081a9135 in handle_one_connection (arg=0x8c55c38) at sql_parse.cc:1118
#15 0x40062f60 in pthread_start_thread () from /lib/i686/libpthread.so.0
#16 0x400630fe in pthread_start_thread_event () from /lib/i686/libpthread.so.0
---Type <return> to continue, or q <return> to quit---
#17 0x401f5327 in clone () from /lib/i686/libc.so.6
(gdb)
Regards,
Heikki
[18 Sep 2005 12:15]
Heikki Tuuri
A typo: "Maybe MySQL does not know that in the new table definition, id is the first column in the PRIMARY KEY?" Should read: ...id is NOT the first column...
[10 Nov 2005 20:59]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32159
[18 Nov 2005 21:09]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32420
[24 Nov 2005 16:54]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/internals/32692
[25 Nov 2005 22:46]
Evgeny Potemkin
Loose index scan with using only second part of multipart index was choosen, which results in creating wrong keys and endless loop. Fixed in 5.0.16, cset 1.2002.1.1
[9 Dec 2005 0:05]
Paul DuBois
Noted in 5.0.16 changelog.
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.058 sec. using MySQL 8.4.7-u6-cloud
Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the
respective copyright holders.
It is not reviewed in advance
by Oracle and does not necessarily represent the opinion of
Oracle or any other party.