Details
-
Bug
-
Status: Closed (View Workflow)
-
Critical
-
Resolution: Fixed
-
10.2(EOL), 10.3(EOL)
-
None
Description
Note: I'm fine with closing it as not a bug as long as all aspects of the new behavior are considered and confirmed to be expected. It was discussed a little on slack as a probably innocent consequence of MDEV-19292 fix, but I am not sure there was a final conclusion.
Here is an example of the table:
CREATE TABLE t1 ( |
`c01` int(10) unsigned zerofill NOT NULL DEFAULT 0000000000, |
`c03` varchar(1024) NOT NULL DEFAULT '', |
`c04` timestamp(6) NOT NULL DEFAULT current_timestamp(6) ON UPDATE current_timestamp(6), |
`c06` double(16,8) DEFAULT NULL COMMENT 'Percentage', |
`c07` date DEFAULT NULL, |
`c12` varchar(64) GENERATED ALWAYS AS (concat(`c09`,' ',`c10`)) VIRTUAL, |
`c05` longblob NOT NULL DEFAULT '', |
`c11` varchar(64) GENERATED ALWAYS AS (concat(`c09`,' ',`c10`)) PERSISTENT, |
`c08` text DEFAULT '', |
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, |
`c02` char(3) NOT NULL DEFAULT '', |
`c10` bigint(20) DEFAULT NULL COMMENT 'Y', |
`c09` bigint(20) DEFAULT NULL COMMENT 'X', |
PRIMARY KEY (`id`), |
UNIQUE KEY `idx1` (`c01`,`c02`), |
KEY `idx2` (`c05`(128)) |
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT; |
Server options: --innodb-compression-algorithm=none --innodb-page-size=4K, otherwise defaults.
The table gets created on a pre-MDEV-19292 server with without any warnings (on a post-MDEV-19292 server it gets rejected).
When a post-MDEV-19292 server starts on the old datadir, CHECK TABLE t1 produces the warning:
10.2 fc77a66c |
+---------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| Table | Op | Msg_type | Msg_text | |
+---------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| test.t1 | check | Warning | Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. | |
| test.t1 | check | status | OK | |
+---------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
First, it's unclear whether MDEV-19292 patch was supposed to affect REDUNDANT / COMPACT tables at all.
Secondly, the warning, if it's true, could have been helpful if it was reliable; but it is only issued on the first opening of the table:
MariaDB [test]> check table t1; |
+---------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| Table | Op | Msg_type | Msg_text | |
+---------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
| test.t1 | check | Warning | Row size too large (> 1982). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline. | |
| test.t1 | check | status | OK | |
+---------+-------+----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
2 rows in set (0.005 sec) |
|
MariaDB [test]> check table t1; |
+---------+-------+----------+----------+ |
| Table | Op | Msg_type | Msg_text | |
+---------+-------+----------+----------+ |
| test.t1 | check | status | OK | |
+---------+-------+----------+----------+ |
1 row in set (0.005 sec) |
Which makes it fairly useless.
And finally, the error log gets a different strange-looking warning instead:
2019-07-28 0:57:51 140189814937344 [Warning] InnoDB: Cannot add field `c08` in table `test`.`t1` because after adding it, the row size is 2484 which is greater than maximum allowed size (1982) for a record on index leaf page. |
Attachments
Issue Links
- blocks
-
MDEV-20400 Implement a way to query an InnoDB table max row size
-
- Open
-
- includes
-
MDEV-20949 Stop performing unnecessary maximum row size check for DML
-
- Closed
-
- relates to
-
MDEV-19292 "Row size too large" error when creating table with lots columns when row format is DYNAMIC or COMPRESSED
-
- Closed
-
-
MDEV-20000 Consider adopting innodb.innodb_pagesize_max_recordsize from MySQL
-
- Open
-
-
MDEV-20400 Implement a way to query an InnoDB table max row size
-
- Open
-
-
MDEV-20832 Don't print "row size too large" warnings in error log if innodb_strict_mode=OFF and log_warnings<=2
-
- Closed
-
-
MDEV-21261 When performing instant add column, InnoDB ignores innodb_strict_mode for "row size too large" check
-
- Confirmed
-
-
MDEV-21624 Unique index length is able to exceed max key length
-
- Closed
-
-
MDEV-21748 ASAN use-after-poison in PageBulk::insertPage on table rebuild
-
- Closed
-
-
MDEV-23521 Implement an InnoDB row format that can use overflow pages for smaller columns
-
- Open
-
-
MDEV-16969 Fix error message as promised in upstream Bug #69336
-
- Open
-
-
MDEV-20400 Implement a way to query an InnoDB table max row size
-
- Open
-
-
MDEV-20786 MariaDB server writes warnings into errorlog although 'log_warnings=0'
-
- Closed
-
-
MDEV-21429 TRUNCATE and OPTIMIZE are being refused due to "row size too large"
-
- Closed
-
-
MDEV-22585 Incorrect note being written to the error log when CREATE and ALTER fail due to Row Size Too Large and in all cases for TRUNCATE and OPTIMIZE TABLE.
-
- Open
-
Also, innodb.innodb-32k-crash test non-deterministically produces the same warning:
http://buildbot.askmonty.org/buildbot/builders/kvm-rpm-centos73-amd64/builds/11353/steps/mtr/logs/stdio
10.3 5e112a26201d4b343df3e401f8695974a8fa852c
innodb.innodb-32k-crash 'innodb' w1 [ fail ]
Test ended at 2019-07-27 13:16:40
CURRENT_TEST: innodb.innodb-32k-crash
--- /usr/share/mysql-test/suite/innodb/r/innodb-32k-crash.result 2019-07-27 11:56:37.000000000 +0000
+++ /dev/shm/var/1/log/innodb-32k-crash.reject 2019-07-27 13:16:40.754215752 +0000
@@ -136,6 +136,8 @@
aa=@h,ba=@h,ca=@h,da=@h,ea=@h,fa=@h,ga=@h,ha=@h,ia=@h,ja=@h,
ka=@h,la=@h,ma=@h,na=@h,oa=@h,pa=@h,qa=@h,ra=@h,sa=@h,ta=@b,ua=@h,
va=@h,wa=@h,xa=@h,ya=@h,za=@h;
+Warnings:
+Warning 139 Row size too large (> 16318). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.
BEGIN;
UPDATE t1 SET a=@g,b=@g,c=@g,d=@g,e=@g;
UPDATE t1 SET f=@g,g=@g,h=@g,i=@g,j=@g;
mysqltest: Result length mismatch