Bug #88150 'Undo log record is too big.' error occurring in very narrow range of str length
Submitted: 19 Oct 13:08 Modified: 20 Oct 10:19
Reporter: Geoff Montee Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S2 (Serious)
Version:5.5, 5.6, 5.7, 5.5.57, 5.6.38, 5.7.20 OS:Any
Assigned to:
Tags: BLOB, innodb, undo

[19 Oct 13:08] Geoff Montee
Description:
A user is seeing an 'Undo log record is too big.' error that only occurs if they update 2 mediumtext fields at once, and if the length of the existing values in each those fields happen to be between 3962 and 4030 characters long.

Some other interesting notes about this:

* The table definition has ROW_FORMAT=COMPACT, so it uses the Antelope format.

* The only indexes on the two mediumtext fields have prefix lengths of 255.

* The problem is repeatable on MySQL 5.5 and 5.7, and MariaDB 10.1 and 10.2, so I don't think it has been fixed in any released version of MySQL or MariaDB.

How to repeat:
I will attach an SQL file that can be used to reproduce this issue.

Suggested fix:
Allow these fields to be updated.
[19 Oct 13:10] Geoff Montee
Run this script to reproduce the issue.

Attachment: undo_log_rec_too_big_15451.sql (application/octet-stream, text), 29.76 KiB.

[20 Oct 10:19] Umesh Shastry
Hello Geoff,

Thank you for the report and test case.
Observed this with 5.5.57, 5.6.38 and 5.7.20.

Thanks,
Umesh
[20 Oct 10:20] Umesh Shastry
-- 5.7.20
 
 rm -rf 88150
 bin/mysqld --initialize-insecure --basedir=$PWD --datadir=$PWD/88150 
 bin/mysqld --innodb_file_format='Antelope' --basedir=$PWD --datadir=$PWD/88150 --core-file --socket=/tmp/mysql_ushastry.sock --port=3306 --log-error=$PWD/88150/log.err 2>&1 &

[umshastr@hod03]/export/umesh/server/binaries/GABuilds/mysql-5.7.20: bin/mysql -uroot -S /tmp/mysql_ushastry.sock test < undo_log_rec_too_big_15451.sql
Inserting new row
Inserting new row
LENGTH(a_str_13)        LENGTH(a_str_18)
3962    3962
Next update should fail (length >= 3962 && length <= 4030)
Next update should fail (length >= 3962 && length <= 4030)
ERROR 1713 (HY000) at line 153: Undo log record is too big.

-- 5.6.38

rm -rf 88150
scripts/mysql_install_db --basedir=$PWD --datadir=$PWD/88150
bin/mysqld --innodb_file_format='Antelope' --basedir=$PWD --datadir=$PWD/88150 --core-file --socket=/tmp/mysql_ushastry.sock  --port=3306 --log-error=$PWD/88150/log.err 2>&1 &

[umshastr@hod03]/export/umesh/server/binaries/GABuilds/mysql-5.6.38: bin/mysql -uroot -S /tmp/mysql_ushastry.sock test < ../mysql-5.7.20/undo_log_rec_too_big_15451.sql
Inserting new row
Inserting new row
LENGTH(a_str_13)        LENGTH(a_str_18)
3962    3962
Next update should fail (length >= 3962 && length <= 4030)
Next update should fail (length >= 3962 && length <= 4030)
ERROR 1713 (HY000) at line 153: Undo log record is too big.

-- 5.5.57

rm -rf 88150
scripts/mysql_install_db --basedir=$PWD --datadir=$PWD/88150
bin/mysqld --innodb_file_format='Antelope' --basedir=$PWD --datadir=$PWD/88150 --core-file --socket=/tmp/mysql_ushastry.sock  --port=3306 --log-error=$PWD/88150/log.err 2>&1 &

[umshastr@hod03]/export/umesh/server/binaries/GABuilds/mysql-5.5.57: bin/mysql -uroot -S /tmp/mysql_ushastry.sock test < ../mysql-5.7.20/undo_log_rec_too_big_15451.sql
Inserting new row
Inserting new row
LENGTH(a_str_13)        LENGTH(a_str_18)
3962    3962
Next update should fail (length >= 3962 && length <= 4030)
Next update should fail (length >= 3962 && length <= 4030)
ERROR 1713 (HY000) at line 153: Undo log record is too big.
[24 Oct 11:47] David Portabella
I have the same error, although i am not sure it is the same issue.

the error happens with row_format dynamic or compact;
the succeeds with row_format to compressed or redundant.

i provide a sql file to reproduce;
[24 Oct 11:48] David Portabella
file to reproduce the error

Attachment: aa5.sql (application/octet-stream, text), 12.19 KiB.