Bug #10424 Got error 139 from storage engine
Submitted: 6 May 2005 20:17 Modified: 6 May 2005 20:42
Reporter: Tim Gustafson Email Updates:
Status: Not a Bug Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S3 (Non-critical)
Version:4.1.10 OS:FreeBSD (FreeBSD 4.11-STABLE)
Assigned to: CPU Architecture:Any

[6 May 2005 20:17] Tim Gustafson
Description:
I have an InnoDB table, DocumentVariants, that has a BLOB field in it.  The table has about 22GB of data in it.  When I run mysqldump on the table, I get this error message:

mysqldump: Error 1030: Got error 139 from storage engine when dumping table `DocumentVariants` at row: 1594

Row 1594 is a row whose 'ID' column is 9221.  When I run a query in the mySQL command line tool, I get this error:

mysql> delete from DocumentVariants where ID = 9221;
ERROR 1030 (HY000): Got error 139 from storage engine

It would seem that perhaps my InnoDB table is corrupt.  When I run "check table" on the table, it does not report any errors:

mysql> check table DocumentVariants extended;
+---------------------------+-------+----------+----------+
| Table                     | Op    | Msg_type | Msg_text |
+---------------------------+-------+----------+----------+
| archives.DocumentVariants | check | status   | OK       |
+---------------------------+-------+----------+----------+

What's the best way to fix this problem?  I can't dump the table to a .sql file because mysqldump dies as a result of the problem, and I can't delete the offending row because it causes the same error as the dump does.

Will running an "alter table DocumentVariants type=innodb" work?  If it does, it will take hours to run on this table I think because it's so large.  What are the chances of that fixing the problem?  Am I likely to loose data in this table as a result of this error?

Thanks!

How to repeat:
It's hard to say - I think it's a one-time sort of glitch.

Suggested fix:
Unknown
[6 May 2005 20:42] MySQL Verification Team
Not enough information was provided for us to be able
to handle this bug. Please re-read the instructions at
http://bugs.mysql.com/how-to-report.php

If you can provide more information, feel free to add it
to this bug and change the status back to 'Open'.

Thank you for your interest in MySQL.

Additional info:

miguel@hegel:~/dbs/4.1$ bin/perror 139
MySQL error code 139: Too big row
miguel@hegel:~/dbs/4.1$
[6 May 2005 20:42] Heikki Tuuri
Hi!

You are probably running out of memory. Please check the .err log of mysqld.

Regards,

Heikki

row0sel.c:

                if (len != UNIV_SQL_NULL) {
                        if (templ->type == DATA_BLOB) {

                                ut_a(prebuilt->templ_contains_blob);

                                /* A heuristic test that we can allocate the
                                memory for a big BLOB. We have a safety margin
                                of 1000000 bytes. Since the test takes some
                                CPU time, we do not use it for small BLOBs. */

                                if (len > 2000000
                                    && !ut_test_malloc(len + 1000000)) {

                                        ut_print_timestamp(stderr);
                                        fprintf(stderr,
"  InnoDB: Warning: could not allocate %lu + 1000000 bytes to retrieve\n"
"InnoDB: a big column. Table name ", (ulong) len);
                                        ut_print_name(stderr,
                                                prebuilt->trx,
                                                prebuilt->table->name);
                                        putc('\n', stderr);

                                        if (extern_field_heap) {
                                                mem_heap_free(
                                                        extern_field_heap);
                                        }
                                        return(FALSE);
                                }
[10 May 2005 14:48] Tim Gustafson
You are correct.  mysqld wasn't able to allocate more memory because FreeBSD has a 512MB hard limit.  I have recompiled my kernel and will try again.

Thanks for all your help!