Bug #92556 [ERROR] [MY-011825] [InnoDB] ... the row size .. for a record on index leaf page
Submitted: 25 Sep 2018 11:29 Modified: 26 Sep 2018 2:46
Reporter: Roel Van de Paar (OCA) Email Updates:
Status: Verified Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S1 (Critical)
Version:8.0.12 OS:Any
Assigned to: CPU Architecture:Any

[25 Sep 2018 11:29] Roel Van de Paar
Description:
8.0.12>CREATE TABLE t1(c0 INT,c1 SET ('test1','test2','test3'),c2 TEXT,c3 DOUBLE,c4 NUMERIC,c5 DATE,c6 INT,c7 DOUBLE,c8 TEXT,c9 INT,c10 REAL,c11 INT,c12 NUMERIC,c13 NUMERIC,c14 TIME,c15 DOUBLE,c16 REAL,c17 BLOB,c18 YEAR,c19 TEXT,c20 YEAR,c21 CHAR (1),c22 INT,c23 INT,c24 INT,c25 DATE,c26 INT,c27 BLOB,c28 CHAR (1),c29 FLOAT,c30 TEXT,c31 BLOB,c32 INT,c33 YEAR,c34 REAL,c35 BLOB,c36 TEXT,c37 BLOB,c38 INT,c39 FLOAT,c40 TIME,c41 DATE,c42 BOOL,c43 INT,c44 INT,c45 TIME,c46 DOUBLE PRECISION,c47 TIME,c48 TEXT,c49 DOUBLE PRECISION,c50 INT,c51 NUMERIC,c52 BLOB,c53 DATE,c54 DECIMAL,c55 INT,c56 TEXT,c57 ENUM ('test1','test2','test3'),c58 YEAR,c59 TIME,c60 INT,c61 DECIMAL,c62 DOUBLE,c63 DATE,c64 TEXT,c65 DOUBLE,c66 VARCHAR (1),c67 TEXT,c68 DATE,c69 INT,c70 DECIMAL,c71 TEXT,c72 TEXT,c73 REAL,c74 DOUBLE,c75 TIME,c76 DATE,c77 DECIMAL,c78 BLOB,c79 NUMERIC,c80 INT,c81 YEAR,c82 INT,c83 INT,c84 INT,c85 BLOB,c86 TIME,c87 BLOB,c88 TEXT,c89 BOOL,c90 BLOB,c91 BLOB,c92 YEAR,c93 BLOB,c94 INT,c95 TEXT,c96 INT,c97 DECIMAL,c98 ENUM ('test1','test2','test3'),c99 INT,c100 INT,c101 BLOB,c102 INT,c103 SET ('test1','test2','test3'),c104 TIMESTAMP,c105 TEXT,c106 DATE,c107 TEXT,c108 CHAR (1),c109 TIME,c110 VARCHAR (1),c111 DECIMAL,c112 FLOAT,c113 INT,c114 INT,c115 BLOB,c116 SET ('test1','test2','test3'),c117 ENUM ('test1','test2','test3'),c118 BLOB,c119 TEXT,c120 SET ('test1','test2','test3'),c121 DATE,c122 FLOAT,c123 VARCHAR (1),c124 YEAR,c125 BLOB,c126 TIME,c127 BOOL,c128 BLOB,c129 DOUBLE,c130 INT,c131 INT,c132 INT,c133 INT,c134 DOUBLE PRECISION,c135 BLOB,c136 SET ('test1','test2','test3'),c137 TEXT,c138 DOUBLE PRECISION,c139 NUMERIC,c140 BLOB,c141 SET ('test1','test2','test3'),c142 INT,c143 VARCHAR (1),c144 BLOB,c145 REAL,c146 SET ('test1','test2','test3'),c147 BLOB,c148 TEXT,c149 BLOB,c150 CHAR (1),c151 TEXT,c152 INT,c153 FLOAT,c154 TEXT,c155 DATE,c156 BLOB,c157 BLOB,c158 REAL,c159 DATE,c160 TIME,c161 YEAR,c162 DOUBLE,c163 VARCHAR (1),c164 FLOAT,c165 NUMERIC,c166 ENUM ('test1','test2','test3'),c167 DOUBLE PRECISION,c168 DOUBLE PRECISION,c169 BLOB,c170 TIME,c171 INT,c172 TEXT,c173 INT,c174 DOUBLE,c175 VARCHAR (1),c176 VARCHAR (1),c177 REAL,c178 INT,c179 BLOB,c180 FLOAT,c181 TIMESTAMP,c182 REAL,c183 DOUBLE PRECISION,c184 INT,c185 INT,c186 TEXT,c187 TIME,c188 FLOAT,c189 TIME,c190 INT,c191 FLOAT,c192 INT,c193 INT,c194 TEXT,c195 DATE,c196 TIME,c197 YEAR,c198 CHAR (1),KEY idx0 (c39,c23))engine=InnoDB ROW_FORMAT=COMPRESSED KEY_BLOCK_SIZE=1;
ERROR 1118 (42000): Row size too large (> 8126). Changing some columns to TEXT or BLOB may help. In current row format, BLOB prefix of 0 bytes is stored inline.

Error log on optimized & debug:
2018-09-25T11:22:33.957626Z 9 [ERROR] [MY-011825] [InnoDB] InnoDB: Cannot add field `c35` in table `test`.`t1` because after adding it, the row size is 500 which is greater than maximum allowed size (498) for a record on index leaf page.

How to repeat:
As per above. "BLOB prefix of 0 bytes" would not seem correct? 

This or a similar testcase may have other issues (sig11 crash directly after that index leaf page error in error log), still testing.
[25 Sep 2018 14:45] Sinisa Milivojevic
HI,

I have managed to verify your bug report.

This is, however, well known behaviour, which you can avoid with larger page size.

Still, the error messages are not correct nor descriptive enough.

Verified as reported.
[25 Sep 2018 23:50] Roel Van de Paar
Thank you. However, as said, it looks like there is more then meets the eye here. It seems this can cause crashes. Not sure yet if they are reproducible on MySQL (vs Percona Server).
[26 Sep 2018 2:46] Roel Van de Paar
Also, >8126 != 500