| Bug #29601 | Falcon crashes during DBT2 initial load of tables | ||
|---|---|---|---|
| Submitted: | 6 Jul 2007 17:33 | Modified: | 6 Aug 2007 22:45 |
| Reporter: | Vadim TKACHENKO | Email Updates: | |
| Status: | Can't repeat | Impact on me: | |
| Category: | MySQL Server: Falcon storage engine | Severity: | S1 (Critical) |
| Version: | 6.0-bk | OS: | Any |
| Assigned to: | Jim Starkey | CPU Architecture: | Any |
[6 Jul 2007 17:33]
Vadim TKACHENKO
[7 Jul 2007 21:08]
Hakan Küçükyılmaz
Vadim, which version of DBT2 are you using?
[7 Jul 2007 21:24]
Vadim TKACHENKO
Hakan, I use dbt2-0.37
[8 Jul 2007 6:42]
Hakan Küçükyılmaz
Verified as described.
./mysql_load_db.sh -d test -f /tmp/dbt2-w400 -c /usr/local/mysql/bin/mysql -h localhost -u root -e FALCON
...
...
...
Loading table customer
Loading table district
Loading table history
Loading table item
Loading table new_order
Loading table order_line
Backtrace is
Program received signal SIGILL, Illegal instruction.
[Switching to Thread 1076373856 (LWP 23342)]
0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
(gdb) bt
#0 0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
#1 0x0000000000843184 in Error::error (string=<value optimized out>) at Error.cpp:92
#2 0x00000000008b4343 in Cache::fetchPage (this=0x2a9655aff0, dbb=0x2a965a36c8, pageNumber=-572662307,
pageType=PAGE_any, lockType=Exclusive) at Cache.cpp:162
#3 0x000000000087b50c in Section::getSectionPage (this=0x2c3098b9b0, sequence=100, lockType=Exclusive,
transId=100) at Section.cpp:1240
#4 0x000000000087c038 in Section::insertStub (this=0x2c3098b9b0, transId=100) at Section.cpp:313
#5 0x000000000080f604 in Table::insert (this=0x2a965b00c0, transaction=0x2a965682a8, stream=0x2b951ad870)
at Table.cpp:2550
#6 0x0000000000803c57 in StorageTable::insert (this=0x2b951accf8) at StorageTable.cpp:88
#7 0x00000000007fb029 in StorageInterface::write_row (this=0x2a97015fd0, buff=<value optimized out>)
at ha_falcon.cpp:888
#8 0x00000000007372a0 in handler::ha_write_row (this=0x2a97015fd0, buf=0x5b2e <Address 0x5b2e out of bounds>)
at handler.cc:3669
#9 0x00000000006cb794 in write_record (thd=0xfb3f60, table=0x2a97014780, info=0x4027ff60)
at sql_insert.cc:1515
#10 0x000000000077f458 in mysql_load (thd=0xfb3f60, ex=<value optimized out>, table_list=0x2a9700b260,
fields_vars=@0xfb5dc8, set_fields=@0xfb5df8, set_values=@0xfb5de0, handle_duplicates=DUP_ERROR,
ignore=false, read_file_from_client=false) at sql_load.cc:822
#11 0x0000000000661c2b in mysql_execute_command (thd=0xfb3f60) at sql_parse.cc:2981
#12 0x0000000000665831 in mysql_parse (thd=0xfb3f60,
inBuf=0x2a9700b0d0 "LOAD DATA INFILE \"/tmp/dbt2-w400/order_line.data\"", ' ' <repeats 17 times>, "INTO TABLE order_line FIELDS TERMINATED BY '\\t'", length=114, found_semicolon=0x40281598) at sql_parse.cc:5381
#13 0x00000000006664ed in dispatch_command (command=COM_QUERY, thd=0xfb3f60,
packet=0x1000b31 "LOAD DATA INFILE \"/tmp/dbt2-w400/order_line.data\"", ' ' <repeats 17 times>, "INTO TABLE order_line FIELDS TERMINATED BY '\\t'", packet_length=115) at sql_parse.cc:907
#14 0x0000000000666e22 in do_command (thd=0xfb3f60) at sql_parse.cc:669
#15 0x00000000006581fb in handle_one_connection (arg=<value optimized out>) at sql_connect.cc:1091
[9 Jul 2007 0:33]
Jim Starkey
I can't reproduce this because I don't have the require files. Please attach or send pointer to the directory dbt2-w400.
[9 Jul 2007 7:54]
Calvin Sun
from Hakan's email: That's the first part of DBT2; generating the data and then loading it. You can generate the data with: cd dbt2-fixed-20042007/src ./datagen -w400 -d /tmp/dbt2-w400 --mysql I have just done that on fluffy. But it ended with: datagen.c:259:fn: No space left on device
[9 Jul 2007 16:48]
Hakan Küçükyılmaz
Vadim, the backtrace looks like that you are getting out of disk space while loading data.
[9 Jul 2007 16:55]
Vadim TKACHENKO
Hakan,
I think that is not the case.
I have
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup00-Data
1.3T 121G 1.2T 10% /mnt/data
on partition with mysql datadir.
[10 Jul 2007 16:35]
Hakan Küçükyılmaz
Current problem with this scenario is that the DBT2 load uses LOAD DATA INFILE to load the DBT2 tables. LOAD DATA INFILE is a single transaction for Falcon. The table "stock" has a data file of 12GB, which leads to an OOM problem on my 8GB system. The OOM killer kills mysqld while loading stock. hakan@ls3235:/tmp/dbt2-w400> du -h * 6.5G customer.data 384K district.data 704M history.data 7.3M item.data 38M new_order.data 474M order.data 7.6G order_line.data 12G stock.data 36K warehouse.data Possible solution would be to detect that we are running in a LOAD DATA INFILE and then commit every - say 10.000 records or so. Best regards, Hakan
[10 Jul 2007 17:04]
Peter Zaitsev
Heh, That is a bummer. Interesting does it do the same in case of ALTER TABLE ? The current implementation of LOAD DATA INFILE obviously does not work for tables of more than the toy size. This shows another issue - there seems to be no restriction about how much memory Falcon can consume which makes it easy target to DOS attacks. Note Innodb has kind of similar issue - in INSERT ... SELECT for example it can run out of lock table space, but this is stored inside the buffer pool which has fixed limit.
[10 Jul 2007 17:53]
Hakan Küçükyılmaz
Peter, you are right ALTER TABLE will have the very same affect as a big LOAD DATA INFILE. We are already investigating the best possible solution. Thanks for your feedback, Hakan
[10 Jul 2007 23:32]
Hakan Küçükyılmaz
Vadim, how much RAM and how many CPU's does your system have? Best regards, Hakan
[11 Jul 2007 5:44]
Vadim TKACHENKO
Hakan, I have 16GB of RAM and 4 CPU processor : 3 vendor_id : GenuineIntel cpu family : 6 model : 15 model name : Intel(R) Xeon(R) CPU 5148 @ 2.33GHz stepping : 6 cpu MHz : 2327.529 cache size : 4096 KB
[13 Jul 2007 8:52]
Hakan Küçükyılmaz
The LOAD DATA INFILE issue is fixed by commiting every 10000 rows in case of a LOAD DATA INFILE is running.
After that fix we see another assertion which looks like an integer
overflow:
(gdb) f 4
#4 0x000000000091c3ed in Cache::fetchPage (this=0x2a9655aff0,
dbb=0x2a965a3818, pageNumber=-572662307,
pageType=PAGE_any, lockType=Exclusive) at Cache.cpp:165
165 ASSERT (pageNumber >= 0);
(gdb) p pageNumber
$1 = -572662307
Backtrace:
Program received signal SIGILL, Illegal instruction.
[Switching to Thread 1085045088 (LWP 29914)]
0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
(gdb) bt
#0 0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
#1 0x000000000088f1b8 in Error::debugBreak () at Error.cpp:92
#2 0x000000000088f140 in Error::error (string=0xbfcd70 "assertion
failed at line %d in file %s\n") at Error.cpp:69
#3 0x000000000088f19d in Error::assertionFailed (fileName=0xc107b0
"Cache.cpp", line=165) at Error.cpp:76
#4 0x000000000091c3ed in Cache::fetchPage (this=0x2a9655aff0,
dbb=0x2a965a3818, pageNumber=-572662307,
pageType=PAGE_any, lockType=Exclusive) at Cache.cpp:165
#5 0x0000000000885f55 in Dbb::fetchPage (this=0x2a965a3818,
pageNumber=-572662307, pageType=PAGE_any,
lockType=Exclusive) at Dbb.cpp:204
#6 0x00000000008dc1d7 in Section::getSectionPage (this=0x2b21ec5228,
sequence=100, lockType=Exclusive,
transId=8252) at Section.cpp:1251
#7 0x00000000008d9581 in Section::insertStub (this=0x2b21ec5228,
transId=8252) at Section.cpp:313
#8 0x000000000088620a in Dbb::insertStub (this=0x2a965a3818,
section=0x2b21ec5228, transaction=0x2a96567678)
at Dbb.cpp:281
#9 0x0000000000856ae0 in Table::insert (this=0x2a965afd80,
transaction=0x2a96567678, stream=0x2b2dad0568)
at Table.cpp:2550
#10 0x000000000083ff1f in StorageDatabase::insert (this=0x2a9655a1c8,
connection=Internal: global symbol `Connection' found in handshake.cpp
psymtab but not in symtab.
Connection may be an inlined function, or may be a template function
(if a template, try specifying an instantiation: Connection<type>).
) at StorageDatabase.cpp:225
#11 0x000000000084624b in StorageTable::insert (this=0x2b2dacf9f0) at
StorageTable.cpp:88
#12 0x0000000000837fd5 in StorageInterface::write_row (this=0x1072d08,
buff=0x1072f48 "�p\004") at ha_falcon.cpp:890
#13 0x000000000077835e in handler::ha_write_row (this=0x1072d08,
buf=0x1072f48 "�p\004") at handler.cc:3669
#14 0x00000000006f6c66 in write_record (thd=0x10049b8, table=0x106e658,
info=0x40ac5630) at sql_insert.cc:1515
#15 0x000000000079bb12 in read_sep_field (thd=0x10049b8,
info=@0x40ac5630, table_list=0x1061488,
fields_vars=@0x1006880, set_fields=@0x10068b0,
set_values=@0x1006898, read_info=@0x40ac5440,
enclosed=@0xf9b580, skip_lines=0, ignore_check_option_errors=false)
at sql_load.cc:822
#16 0x000000000079a9bd in mysql_load (thd=0x10049b8, ex=0x10613f8,
table_list=0x1061488, fields_vars=@0x1006880,
set_fields=@0x10068b0, set_values=@0x1006898,
handle_duplicates=DUP_ERROR, ignore=false,
read_file_from_client=false) at sql_load.cc:390
#17 0x00000000006761d8 in mysql_execute_command (thd=0x10049b8) at
sql_parse.cc:2981
#18 0x000000000067c3e2 in mysql_parse (thd=0x10049b8,
inBuf=0x10612f8 "LOAD DATA INFILE \"/tmp/dbt2-w400/order_line.data
\"", ' ' <repeats 17 times>, "INTO TABLE order_line FIELDS TERMINATED BY
'\\t'", length=114, found_semicolon=0x40ac6f98) at sql_parse.cc:5381
#19 0x0000000000671b33 in dispatch_command (command=COM_QUERY,
thd=0x10049b8,
packet=0x10661f9 "LOAD DATA INFILE \"/tmp/dbt2-w400/order_line.data
\"", ' ' <repeats 17 times>, "INTO TABLE order_line FIELDS TERMINATED BY
'\\t'", packet_length=115) at sql_parse.cc:907
#20 0x00000000006712e6 in do_command (thd=0x10049b8) at sql_parse.cc:669
#21 0x000000000066fd2c in handle_one_connection (arg=0x106c1b8) at
sql_connect.cc:1091
[13 Jul 2007 15:10]
Hakan Küçükyılmaz
Latest back trace:
Program received signal SIGILL, Illegal instruction.
[Switching to Thread 1076373856 (LWP 10168)]
0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
(gdb) bt
#0 0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
#1 0x000000000088f840 in Error::debugBreak () at Error.cpp:92
#2 0x000000000088f7c8 in Error::error (string=0xbfdcb0 "assertion failed at line %d in file %s\n")
at Error.cpp:69
#3 0x000000000088f825 in Error::assertionFailed (fileName=0xc11950 "Cache.cpp", line=170) at Error.cpp:76
#4 0x000000000091d269 in Cache::fetchPage (this=0x2a9655aff0, dbb=0x2a965a3818, pageNumber=-572662307,
pageType=PAGE_any, lockType=Exclusive) at Cache.cpp:170
#5 0x00000000008865b1 in Dbb::fetchPage (this=0x2a965a3818, pageNumber=-572662307, pageType=PAGE_any,
lockType=Exclusive) at Dbb.cpp:204
#6 0x00000000008dc8d7 in Section::getSectionPage (this=0x2af1fadf78, sequence=100, lockType=Exclusive,
transId=8256) at Section.cpp:1251
#7 0x00000000008d9c49 in Section::insertStub (this=0x2af1fadf78, transId=8256) at Section.cpp:313
#8 0x0000000000886866 in Dbb::insertStub (this=0x2a965a3818, section=0x2af1fadf78, transaction=0x2a96567880)
at Dbb.cpp:281
#9 0x000000000085716e in Table::insert (this=0x2a965afec0, transaction=0x2a96567880, stream=0x2b135fe568)
at Table.cpp:2556
#10 0x000000000084058b in StorageDatabase::insert (this=0x2a9655a1c8, connection=Internal: global symbol `Connection' found in handshake.cpp psymtab but not in symtab.
Connection may be an inlined function, or may be a template function
(if a template, try specifying an instantiation: Connection<type>).
) at StorageDatabase.cpp:225
#11 0x00000000008468b7 in StorageTable::insert (this=0x2b135fd9f0) at StorageTable.cpp:88
#12 0x0000000000838641 in StorageInterface::write_row (this=0x10734c8, buff=0x1073708 "�p\004")
at ha_falcon.cpp:895
#13 0x00000000007789ca in handler::ha_write_row (this=0x10734c8, buf=0x1073708 "�p\004") at handler.cc:3669
#14 0x00000000006f6f7e in write_record (thd=0x10059b8, table=0x1071c08, info=0x40280630) at sql_insert.cc:1515
#15 0x000000000079c17e in read_sep_field (thd=0x10059b8, info=@0x40280630, table_list=0x1065e58,
fields_vars=@0x1007880, set_fields=@0x10078b0, set_values=@0x1007898, read_info=@0x40280440,
enclosed=@0xf9c0c0, skip_lines=0, ignore_check_option_errors=false) at sql_load.cc:822
#16 0x000000000079b029 in mysql_load (thd=0x10059b8, ex=0x1065dc8, table_list=0x1065e58,
fields_vars=@0x1007880, set_fields=@0x10078b0, set_values=@0x1007898, handle_duplicates=DUP_ERROR,
ignore=false, read_file_from_client=false) at sql_load.cc:390
[14 Jul 2007 3:36]
Hakan Küçükyılmaz
Vadim, with latest change set I cannot reproduce the problem anymore: time ./mysql_load_db.sh -d test -f /tmp/dbt2-w400 -c /usr/local/mysql/bin/mysql -h localhost -u root -e FALCON ... ... ... Loading table customer Loading table district Loading table history Loading table item Loading table new_order Loading table order_line Loading table orders Loading table stock Loading table warehouse real 243m57.473s user 0m0.228s sys 0m0.115s
[6 Aug 2007 17:10]
MySQL Verification Team
I am not able to repeat too.
[6 Aug 2007 18:17]
Vadim TKACHENKO
Yes, DBT2 works for me now
[6 Aug 2007 22:45]
Hakan Küçükyılmaz
Closed with "can't repeat'.
[15 Oct 2007 23:56]
Harita Chilukuri
Does anyone know how does DBT2 work?? I mean how does it calculates the Terminals(users) and what exactly the client does??? Difference between the terminals and client.
