WL#10436: NewDD: Implicit tablespace name should be same as table name
Affects: Server-8.0 — Status: Complete
With current InnoDB tablespace implementation with newDD, the implicit (file-per-table) tablespace name is named as "innodb_file_per_table_x", where x is the tablespace ID. The advantage of this is that for any rename table, there is no such need of rename tablespace, since the tablespace name is independent of table name. The disadvantage of this is that the tablespace name is hard for user to find out. This makes it a bit harder for user to specify tablespace name for import/export tablespace etc. This Worklog is to work on a solution to make tablespace name same as table name again for file-per-table tablespace.
FR1: While creating implicit tablespace, tablespace name should be stored as table name in new data dictionary. FR2: Rename table operation for implicit tablespace have to store the tablespace name as table name. FR3: During alter table rebuild operation, new table will be created and its tablespace name has to be stored as table name in new data dictionary. FR4: All FTS auxilary table should have its tablespace name as table name. FR5: Upgrade should work fine when tablespace name as table name. FR6: Import and discard table should work when tablespace name as table name.
The following tasks are mainly done to change the tablespace name from innodb_file_per_table_x to table name: Convert tablespace name from file name charset to tablename charset: ===================================================================== - Convert the tablespace name from filename charset to tablename charset. Because length of the tablespace name in filename charset can be high compare to the tablespace name in tablename charset. It saves lot of memory space in mysql.tablespaces table. - While filling the tablespace name for information schema queries, conversion should happen for tablespace name before filling it. It can save the information_schema.tablespaces table memory. Implicit tablespace name creation: =================================== - Convert the tablespace name charset before storing into the dictionary. - Do the conversion in dd_create_implicit_tablespace(). Rename of implicit tablespace name: - During prepare inplace alter, store the newly created temporary table as "old tablespace name". Upgrade from mysql-5.7: ======================== - Append the tablespace name of mysql-5.7 innodb_table_stats, innodb_index_stats with "_backup57" to avoid the confusion of 8.0 innodb_table_stats and innodb_index_stats.
Copyright (c) 2000, 2020, Oracle Corporation and/or its affiliates. All rights reserved.