Details
-
Bug
-
Status: Stalled (View Workflow)
-
Minor
-
Resolution: Unresolved
-
10.0(EOL), (19)
10.1(EOL), 10.2(EOL), 10.3(EOL), 10.4(EOL), 10.5, 10.6, 10.7(EOL), 10.8(EOL), 10.9(EOL), 10.11, 11.0(EOL), 11.1(EOL), 11.2(EOL), 11.3(EOL), 11.4, 11.5(EOL), 11.6(EOL), 11.7(EOL), 11.8
Description
create table extralongname_extralongname_extralongname_extralongname_ext ( |
id int(10) unsigned not null, |
created_date date not null, |
created timestamp not null, |
primary key (created,id,created_date) |
) engine=innodb stats_persistent=1 default charset=latin1 |
partition by range (year(created_date)) |
subpartition by hash (month(created_date)) |
subpartitions 2 (
|
partition p2007 values less than (2008), |
partition p2008 values less than (2009) |
);
|
select length(table_name) from mysql.innodb_table_stats; |
The last statement returns 79, even though the column is defined as varchar(64).
This can potentially fail in the upper layer in many different ways. For example, it makes copying ALTER TABLE to fail with "duplicate key value".
The same applies to innodb_index_stats too.
Attachments
Issue Links
- causes
-
MDEV-13274 mysql_upgrade fails if dbname+tablename+partioname > 64 chars
-
- Closed
-
- relates to
-
MDEV-14637 Latching order violation during btr_cur_pessimistic_delete()
-
- Closed
-
-
MDEV-15020 Server hangs due to InnoDB persistent statistics or innodb_stats_auto_recalc
-
- Closed
-
- links to
The necessary length for table_name is actually 199 characters, because the name can include up to 3 components: table, partition, and subpartition name, each being 64 characters. With delimiters, the maximum length is 199 characters, or 597 bytes (actually a little less, because the delimiters are 1-byte characters).
InnoDB uses its internal SQL parser for updating the persistent statistics, and it would ignore the declared maximum length. This would ultimately cause trouble in MySQL 5.7 (MariaDB 10.2), because InnoDB could hang due to mispredicting page splits (
MDEV-14637).In MariaDB, we should eventually get rid of these problematic tables and make the InnoDB data files more self-contained by storing the statistics directly in the .ibd files (
MDEV-15020).If a too old server is started with newer data files, it would refuse startup. Hopefully there will be no need to revise the InnoDB statistics table definitions after
MDEV-14637.