Bug #50300 | ALTER TABLE REORGANIZE PARTITION .... changes row_format of table | ||
---|---|---|---|
Submitted: | 13 Jan 2010 8:31 | Modified: | 1 Sep 2010 19:00 |
Reporter: | Joakim von Brandis | Email Updates: | |
Status: | Duplicate | Impact on me: | |
Category: | MySQL Server: Partitions | Severity: | S3 (Non-critical) |
Version: | 5.1.41-enterprise-gpl-advanced-log, 5.5.1-m2 | OS: | Linux |
Assigned to: | Assigned Account | CPU Architecture: | Any |
Tags: | ALTER TABLE, reorganize partition, ROW_FORMAT |
[13 Jan 2010 8:31]
Joakim von Brandis
[13 Jan 2010 9:41]
Valeriy Kravchuk
Verified just as described, also - with 5.5.1-m2 openxs@suse:/home2/openxs/dbs/trunk> bin/mysql -uroot test Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.5.1-m2-debug Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> drop table test; Query OK, 0 rows affected (0.54 sec) mysql> set global innodb_file_format=Barracuda; Query OK, 0 rows affected (0.00 sec) mysql> CREATE TABLE `test` ( `id` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED PARTITION BY RANGE (id) (PARTITION p1 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION p2 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION pnew VALUES LESS THAN MAXVALUE ENGINE = InnoDB); Query OK, 0 rows affected (0.23 sec) mysql> show table status like 'test%'\G *************************** 1. row *************************** Name: test Engine: InnoDB Version: 10 Row_format: Compressed Rows: 3 Avg_row_length: 16384 Data_length: 49152 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: row_format=COMPRESSED partitioned Comment: 1 row in set (0.01 sec) mysql> alter table test reorganize partition pnew into (partition p3 values less than (30) -> engine=innodb, PARTITION pnew VALUES LESS THAN MAXVALUE ENGINE = InnoDB); Query OK, 0 rows affected (0.36 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show table status like 'test%'\G *************************** 1. row *************************** Name: test Engine: InnoDB Version: 10 Row_format: Fixed Rows: 4 Avg_row_length: 16384 Data_length: 65536 Max_data_length: 0 Index_length: 0 Data_free: 0 Auto_increment: NULL Create_time: NULL Update_time: NULL Check_time: NULL Collation: latin1_swedish_ci Checksum: NULL Create_options: row_format=COMPRESSED partitioned Comment: 1 row in set (0.01 sec)
[14 Jan 2010 7:15]
Marko Mäkelä
To me, this looks like a bug in MySQL partitioning code, which cannot be fixed in a storage engine. MySQL should be preserving the table attributes for the partition tables. Besides, what is Row_format=Fixed in the SHOW TABLE STATUS output? InnoDB should report one of Redundant, Compact, Dynamic, or Compressed. In my opinion, the partitioning code should report the Row_format of one of the underlying tables instead of reporting a bogus value.
[1 Sep 2010 19:00]
Mattias Jonsson
Duplicate of bug#54679.
[2 Sep 2010 6:58]
Mattias Jonsson
Wrote WL#5549 to allow ROW_FORMAT per partition.
[2 Sep 2010 7:04]
Mattias Jonsson
The reason Row_format Fixed was returned was that the old partitions had Compressed and the new ones had Compact (bug#54679), resulting in partitioning could not return a correct Row_format, and returned ROW_FORMAT_NOT_USED in get_row_type() on the table level, which in I_S.tables/show table status interpret as Fixed/Dynamic or compressed depending on HA_OPTION_PACK_RECORD and HA_OPTION_COMPRESS_RECORD.