diff options
author | Marko Mäkelä <marko.makela@mariadb.com> | 2017-10-24 15:20:54 +0300 |
---|---|---|
committer | Marko Mäkelä <marko.makela@mariadb.com> | 2017-10-24 17:00:04 +0300 |
commit | 439a7c994a6f01de1a3980c0405fb9e24ae3bd1a (patch) | |
tree | 96a4c9908914624b29c37e4b76651e4e69fcf7c4 /mysql-test/suite/innodb/t/innodb-index.test | |
parent | fb5fe497e526f0677a7e2f86f34237e7efd4b806 (diff) | |
download | mariadb-git-bb-5.5-marko.tar.gz |
MDEV-14051 'Undo log record is too big.' error occurring in very narrow range of string lengthsbb-5.5-marko
InnoDB was writing unnecessary information to the
update undo log records. Most notably, if an indexed column is updated,
the old value of the column would be logged twice: first as part of
the update vector, and then another time because it is an indexed column.
Because the InnoDB undo log record must fit in a single page,
this would cause unnecessary failure of certain updates.
Even after this fix, InnoDB still seems to be unnecessarily logging
indexed column values for non-updated columns. It seems that non-updated
secondary index columns only need to be logged when a PRIMARY KEY
column is updated. To reduce risk, we are not fixing this remaining flaw
in GA versions.
trx_undo_page_report_modify(): Log updated indexed columns only once.
Diffstat (limited to 'mysql-test/suite/innodb/t/innodb-index.test')
-rw-r--r-- | mysql-test/suite/innodb/t/innodb-index.test | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/mysql-test/suite/innodb/t/innodb-index.test b/mysql-test/suite/innodb/t/innodb-index.test index cea9055b873..a9829b4f500 100644 --- a/mysql-test/suite/innodb/t/innodb-index.test +++ b/mysql-test/suite/innodb/t/innodb-index.test @@ -532,9 +532,10 @@ PRIMARY KEY (b(10), a), INDEX (c(767)), INDEX(b(767)) INSERT INTO bug12547647 VALUES (5,repeat('khdfo5AlOq',1900),repeat('g',7751)); COMMIT; +BEGIN; # The following used to cause infinite undo log allocation. ---error ER_UNDO_RECORD_TOO_BIG UPDATE bug12547647 SET c = REPEAT('b',16928); +ROLLBACK; DROP TABLE bug12547647; eval set global innodb_file_per_table=$per_table; |