Bug #88150 'Undo log record is too big.' error occurring in very narrow range of str length
Submitted: 19 Oct 2017 13:08 Modified: 20 Oct 2017 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: CPU Architecture:Any
Tags: BLOB, innodb, undo

[19 Oct 2017 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 2017 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 2017 10:19] MySQL Verification Team
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 2017 10:20] MySQL Verification Team
-- 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 2017 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 2017 11:48] David Portabella
file to reproduce the error

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

[5 Jul 2023 16:19] Vladimir Kuzmov
In my case it happened when trying to update single TEXT field.
However, I removed the index and it works as expected.