>Description:
Running a particular query, a REPLACE into a very large table (~2Gb)
causes MySQL to crash with a segmentation fault. I don't know whether the
destination table is corrupt, but myisamchk doesn't think so.
The query is rather long, I'm afraid, so I've elided some fields (also in
the interests of privacy):
REPLACE DELAYED INTO sAll
SELECT YEAR( FROM_UNIXTIME(time)) AS YearNum,
MONTH( FROM_UNIXTIME(time)) AS MonthNum,
DAYOFMONTH(FROM_UNIXTIME(time)) AS DayOfMonth,
WEEK( FROM_UNIXTIME(time)) AS WeekNum,
DAYOFWEEK( FROM_UNIXTIME(time)) AS DayOfWeek,
IFNULL(Category, 'NULL'),
HOUR(FROM_UNIXTIME(time)),
[... various fields ...]
FROM pages200302,sessions200302,users200302
WHERE sessions200302.sessionid = pages200302.sessionid
AND users200302.uid = sessions200302.uid
AND time >= UNIX_TIMESTAMP('2003-02-05')
AND time < UNIX_TIMESTAMP('2003-02-07')
GROUP BY sAllHash
The table has abourt 4,400,000 rows, and is a MyISAM table. myisamchk does
not detect any errors even with the -e (extended-check) option. I'm
waiting for myisamchk -r to finish so that I can try this query on the
resulting table, but it takes 12 hours to repair.
I have reproduced this with the following MySQL versions:
3.23.55
4.0.10-gamma
4.0.10-gamma-debug-debug
(and 4.0.3 and 4.0.4, I think)
on two different ix86 (Athlons), running Red Hat 7.2 and 7.3 respectively,
both machines well tested and reliable.
>How-To-Repeat:
I have a tarball of the necessary files to repeat this. However, it's 1.6 Gb
in size and contains a lot of private data, so I can't distribute it. I'd
be happy to apply patches and follow any steps anyone can suggest to
isolate this.
Stack trace of the segfault:
[root@chris mysql-debug-4.0.10-gamma-pc-linux-i686]# bin/resolve_stack_dump -s
bin/mysqld.sym -n stackdump
0x80720da handle_segfault + 450
0x8295a58 pthread_sighandler + 184
0x806eda5 copy__6StringRC6String + 69
0x804afff copy__16Item_copy_string + 47
0x80a604f copy_fields__FP15TMP_TABLE_PARAM + 67
0x80a2a68 end_send_group__FP4JOINP13st_join_tableb + 676
0x80a14e6 sub_select__FP4JOINP13st_join_tableb + 258
0x80a1193 do_select__FP4JOINPt4List1Z4ItemP8st_tableP9Procedure + 651
0x80990f0
mysql_select__FP3THDP13st_table_listRt4List1Z4ItemP4ItemP8st_orderT4T3T4UlP13select_result
+ 7744
0x8097276 handle_select__FP3THDP6st_lexP13select_result + 102
0x807efb6 mysql_execute_command__Fv + 7870
0x8081316 mysql_parse__FP3THDPcUi + 214
0x807c52a dispatch_command__F19enum_server_commandP3THDPcUi + 1594
0x807bee4 do_command__FP3THD + 420
0x807b54e handle_one_connection + 698
0x829320c pthread_start_thread + 220
0x82c8b1a thread_start + 4
GDB session:
/tmp/mysql-debug-4.0.10-gamma-pc-linux-i686/bin/mysqld: ready for connections.
Version: '4.0.10-gamma-debug-debug' socket: '/tmp/mysql.sock' port: 3306
---Type <return> to continue, or q <return> to quit---
Program received signal SIGSEGV, Segmentation fault.
String::copy (this=0x8908ff0, str=@0x88deba8) at sql_string.cc:202
202 sql_string.cc: No such file or directory.
in sql_string.cc
Current language: auto; currently c++
(gdb) info local
this = (String *) 0x35353331
str = (String &) @0x88d2c31: {Ptr = 0x0, str_length = 0, Alloced_length = 0,
alloced = false}
(gdb) up
#1 0x0804afff in Item_copy_string::copy (this=0x8908ff0) at item.cc:294
294 str_value.copy(*res);
(gdb) p item
Cannot access memory at address 0x998abe2
(gdb) info local
this = (Item_copy_string *) 0x8908ff0
res = (class String *) 0xbfffeb2c
(gdb) p *res
$2 = {Ptr = 0x33383331 <Address 0x33383331 out of bounds>,
str_length = 858860596, Alloced_length = 741619761, alloced = 49}
(gdb) p *this
Cannot access memory at address 0x998abe2
(gdb) up
#2 0x080a604f in copy_fields (param=0xbffff29c) at sql_select.cc:6981
6981 item->copy();
(gdb) info local
param = (TMP_TABLE_PARAM *) 0xbffff29c
ptr = (class Copy_field *) 0xbffff2b0
end = (Copy_field *) 0x8902444
it = (List_iterator_fast<Item> &) @0xbffff2b0: {<base_list_iterator> = {
list = 0xbffff2a0, el = 0x8909024, prev = 0x0,
current = 0x0}, <No data fields>}
item = (class Item_copy_string *) 0xbfffeb2c
(gdb) up
#3 0x080a2a68 in end_send_group (join=0xbfffee1c, join_tab=0x88ff644,
end_of_records=false) at sql_select.cc:5237
5237 copy_fields(&join->tmp_table_param);
(gdb) bt
#0 String::copy (this=0x8908ff0, str=@0x88deba8) at sql_string.cc:202
#1 0x0804afff in Item_copy_string::copy (this=0x8908ff0) at item.cc:294
#2 0x080a604f in copy_fields (param=0xbffff29c) at sql_select.cc:6981
#3 0x080a2a68 in end_send_group (join=0xbfffee1c, join_tab=0x88ff644,
end_of_records=false) at sql_select.cc:5237
#4 0x080a14e6 in sub_select (join=0xbfffee1c, join_tab=0x88ff528,
end_of_records=false) at sql_select.cc:4550
#5 0x080a1193 in do_select (join=0xbfffee1c, fields=0x88e69d4, table=0x0,
procedure=0x0) at sql_select.cc:4443
#6 0x080990f0 in mysql_select (thd=0x88e6820, tables=0x88e3f30,
fields=@0x88e69d4, conds=0x88e4660, order=0x0, group=0x88e4728,
having=0x0, proc_param=0x0, select_options=17339392, result=0x88e4758)
at sql_select.cc:957
#7 0x08097276 in handle_select (thd=0x88e6820, lex=0x88e6950,
result=0x88e4758) at sql_select.cc:191
#8 0x0807efb6 in mysql_execute_command () at sql_parse.cc:1949
#9 0x08081316 in mysql_parse (thd=0x88e6820,
inBuf=0x88dd588 "REPLACE DELAYED INTO sAll SELECT YEAR( FROM_UNIXTIME(time))
AS YearNum, MONTH( FROM_UNIXTIME(time)) AS MonthNum,
DAYOFMONTH(FROM_UNIXTIME(time)) AS DayOfMonth, WEEK( FROM_UNIXTIME(time)"...,
length=1924)
at sql_parse.cc:2822
#10 0x0807c52a in dispatch_command (command=COM_QUERY, thd=0x88e6820,
packet=0x88e7859 "REPLACE DELAYED INTO sAll SELECT YEAR(
FROM_UNIXTIME---Type <return> to continue, or q <return> to quit---
(time)) AS YearNum, MONTH( FROM_UNIXTIME(time)) AS MonthNum,
DAYOFMONTH(FROM_UNIXTIME(time)) AS DayOfMonth, WEEK( FROM_UNIXTIME(time)"...,
packet_length=1924) at sql_parse.cc:1034
#11 0x0807bee4 in do_command (thd=0x88e6820) at sql_parse.cc:909
#12 0x0807b54e in handle_one_connection (arg=0x88e6820) at sql_parse.cc:702
#13 0x08073bc9 in create_new_thread (thd=0x88e6820) at mysqld.cc:2705
#14 0x0807421d in handle_connections_sockets (arg=0x0) at mysqld.cc:2964
#15 0x080735d0 in main (argc=5, argv=0x8474668) at mysqld.cc:2420
#16 0x082a5464 in __libc_start_main (main=0x80729c8 <main>, argc=5,
ubp_av=0xbffffa34, init=0x80480b4 <_init>, fini=0x8329b00 <_fini>,
rtld_fini=0, stack_end=0xbffffa2c) at ../sysdeps/generic/libc-start.c:129
>Fix:
None known at this time, desperately searching for a solution...
>Submitter-Id: Chris Wilson <[EMAIL PROTECTED]>
>Originator: ditto
>Organization: NetServers Ltd, Cambridge, UK.
>MySQL support: none
>Synopsis: MySQL crashes with segfault on query
>Severity: serious
>Priority: high
>Category: mysql
>Class: sw-bug
>Release: mysql-4.0.10-gamma-debug (Official MySQL-debug binary)
>C compiler: 2.95.3
>C++ compiler: 2.95.3
>Environment:
System: Linux chris.camcom.co.uk 2.4.18-19.7.x #1 Thu Dec 12 07:56:46 EST 2002 i686
unknown
Architecture: i686
Some paths: /usr/bin/perl /usr/bin/make /usr/bin/gmake /usr/bin/gcc /usr/bin/cc
GCC: Reading specs from /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs
gcc version 2.96 20000731 (Red Hat Linux 7.3 2.96-113)
Compilation info: CC='gcc' CFLAGS='-O2 -mcpu=pentiumpro' CXX='gcc' CXXFLAGS='-O2
-mcpu=pentiumpro -felide-constructors' LDFLAGS='' ASFLAGS=''
LIBC:
lrwxrwxrwx 1 root root 13 Nov 8 00:07 /lib/libc.so.6 -> libc-2.2.5.so
-rwxr-xr-x 2 root root 1260480 Oct 10 16:16 /lib/libc-2.2.5.so
-rw-r--r-- 1 root root 2312442 Oct 10 15:51 /usr/lib/libc.a
-rw-r--r-- 1 root root 178 Oct 10 15:46 /usr/lib/libc.so
Configure command: ./configure '--prefix=/usr/local/mysql' '--with-comment=Official
MySQL-debug binary' '--with-extra-charsets=complex' '--with-server-suffix=-debug'
'--enable-thread-safe-client' '--enable-local-infile' '--enable-assembler'
'--disable-shared' '--with-client-ldflags=-all-static' '--with-debug'
'--with-mysqld-ldflags=-all-static' '--with-innodb' 'CFLAGS=-O2 -mcpu=pentiumpro'
'CXXFLAGS=-O2 -mcpu=pentiumpro -felide-constructors' 'CXX=gcc'
---------------------------------------------------------------------
Before posting, please check:
http://www.mysql.com/manual.php (the manual)
http://lists.mysql.com/ (the list archive)
To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php