MySQL8.0からのパーティションについての確認
MySQL5.7からは、InnoDB Native Partitioningがサポートされるようになり、多くパーティションを利用している環境で、メモリーの利用率を大幅に下げる事が出来るようになっている。
MySQL8.0からは、Partition Storage Engineがディフォルトでロードされなくなるので注意を促す為に、MySQL5.7.17から”–disable-partition-engine-check”を設定して下さいというWarningがエラーログに出るようになっています。
yoku0825さんが速攻で確認して、ブログを書かれているので確認してみて下さい。
【InnoDB Native Partitioningに関して】
http://mysqlserverteam.com/innodb-native-partitioning-early-access/
WL#6035: Add native partitioning support to InnoDB
https://dev.mysql.com/worklog/task/?id=6035
WL#8971: Deprecate and remove partitioning storage engine
https://dev.mysql.com/worklog/task/?id=8971
MySQL5.7からは、InnoDB Native Paritioningがサポートされている。
そして、MySQL5.7までは、partition Storage EngineもまだDefaultで含まれている。
MySQL5.7.17で確認すると以下のような感じ。
mysql> select @@version; +-------------------------------------------+ | @@version | +-------------------------------------------+ | 5.7.17-enterprise-commercial-advanced-log | +-------------------------------------------+ 1 row in set (0.00 sec) mysql> SELECT -> PLUGIN_NAME as Name, -> PLUGIN_VERSION as Version, -> PLUGIN_STATUS as Status -> FROM INFORMATION_SCHEMA.PLUGINS -> WHERE PLUGIN_TYPE='STORAGE ENGINE'; +--------------------+---------+----------+ | Name | Version | Status | +--------------------+---------+----------+ | binlog | 1.0 | ACTIVE | | MyISAM | 1.0 | ACTIVE | | PERFORMANCE_SCHEMA | 0.1 | ACTIVE | | InnoDB | 5.7 | ACTIVE | | MRG_MYISAM | 1.0 | ACTIVE | | MEMORY | 1.0 | ACTIVE | | CSV | 1.0 | ACTIVE | | BLACKHOLE | 1.0 | DISABLED | | partition | 1.0 | ACTIVE | | FEDERATED | 1.0 | DISABLED | | ARCHIVE | 3.0 | DISABLED | +--------------------+---------+----------+ 11 rows in set (0.00 sec) mysql> CREATE TABLE T_PARTITION (c1 int) -> PARTITION BY RANGE COLUMNS(c1) -> ( -> PARTITION p1 VALUES LESS THAN (5), -> PARTITION p2 VALUES LESS THAN (10), -> PARTITION p3 VALUES LESS THAN (MAXVALUE) -> ); Query OK, 0 rows affected (0.45 sec) mysql> select TABLE_NAME,PARTITION_NAME,PARTITION_METHOD,PARTITION_DESCRIPTION from information_schema.partitions where table_name = 'T_PARTITION'; +-------------+----------------+------------------+-----------------------+ | TABLE_NAME | PARTITION_NAME | PARTITION_METHOD | PARTITION_DESCRIPTION | +-------------+----------------+------------------+-----------------------+ | T_PARTITION | p1 | RANGE COLUMNS | 5 | | T_PARTITION | p2 | RANGE COLUMNS | 10 | | T_PARTITION | p3 | RANGE COLUMNS | MAXVALUE | +-------------+----------------+------------------+-----------------------+ 3 rows in set (0.00 sec) mysql>
MySQL5.7までは、まだメタデータのFRMファイルも作成されている。
[oracle@shinya01-mysql-1 mydatabase]$ ls -l T_PART* -rw-r----- 1 oracle oracle 8556 Apr 20 04:01 T_PARTITION.frm -rw-r----- 1 oracle oracle 98304 Apr 20 04:01 T_PARTITION#P#p1.ibd -rw-r----- 1 oracle oracle 98304 Apr 20 04:01 T_PARTITION#P#p2.ibd -rw-r----- 1 oracle oracle 98304 Apr 20 04:01 T_PARTITION#P#p3.ibd [oracle@shinya01-mysql-1 mydatabase]$
MySQL8.0.1の段階で、既にpartition storage engineは含まれていない。
mysql> select @@version; +-----------+ | @@version | +-----------+ | 8.0.1-dmr | +-----------+ 1 row in set (0.00 sec) mysql> SELECT -> PLUGIN_NAME as Name, -> PLUGIN_VERSION as Version, -> PLUGIN_STATUS as Status -> FROM INFORMATION_SCHEMA.PLUGINS -> WHERE PLUGIN_TYPE='STORAGE ENGINE'; +--------------------+---------+----------+ | Name | Version | Status | +--------------------+---------+----------+ | binlog | 1.0 | ACTIVE | | CSV | 1.0 | ACTIVE | | MEMORY | 1.0 | ACTIVE | | InnoDB | 8.0 | ACTIVE | | MyISAM | 1.0 | ACTIVE | | MRG_MYISAM | 1.0 | ACTIVE | | PERFORMANCE_SCHEMA | 0.1 | ACTIVE | | ARCHIVE | 3.0 | ACTIVE | | BLACKHOLE | 1.0 | ACTIVE | | FEDERATED | 1.0 | DISABLED | +--------------------+---------+----------+ 10 rows in set (0.00 sec) mysql> CREATE TABLE T_PARTITION (c1 int) -> PARTITION BY RANGE COLUMNS(c1) -> ( -> PARTITION p1 VALUES LESS THAN (5), -> PARTITION p2 VALUES LESS THAN (10), -> PARTITION p3 VALUES LESS THAN (MAXVALUE) -> ); Query OK, 0 rows affected (0.25 sec) mysql> select TABLE_NAME,PARTITION_NAME,PARTITION_METHOD,PARTITION_DESCRIPTION from information_schema.partitions where table_name = 'T_PARTITION'; +-------------+----------------+------------------+-----------------------+ | TABLE_NAME | PARTITION_NAME | PARTITION_METHOD | PARTITION_DESCRIPTION | +-------------+----------------+------------------+-----------------------+ | T_PARTITION | p1 | RANGE COLUMNS | 5 | | T_PARTITION | p2 | RANGE COLUMNS | 10 | | T_PARTITION | p3 | RANGE COLUMNS | MAXVALUE | +-------------+----------------+------------------+-----------------------+ 3 rows in set (0.00 sec) mysql>
また、MySQL8.0からはfrmがテーブルに格納されるのでファイルは無い。
[root@DockerHost sakila]# ls -l T_PART* -rw-r----- 1 27 27 131072 Apr 20 04:02 T_PARTITION#P#p1.ibd -rw-r----- 1 27 27 131072 Apr 20 04:02 T_PARTITION#P#p2.ibd -rw-r----- 1 27 27 131072 Apr 20 04:02 T_PARTITION#P#p3.ibd [root@DockerHost sakila]#
MySQL8.0でNDB,InnoDB以外でパーティションを作成しようとすると以下のようにエラーになる。
mysql> CREATE TABLE `T_PARTITION_MyISAM` ( -> `c1` int(11) DEFAULT NULL -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 -> /*!50500 PARTITION BY RANGE COLUMNS(c1) -> (PARTITION p1 VALUES LESS THAN (5) ENGINE = MyISAM, -> PARTITION p2 VALUES LESS THAN (10) ENGINE = MyISAM, -> PARTITION p3 VALUES LESS THAN (MAXVALUE) ENGINE = MyISAM) */; ERROR 1178 (42000): The storage engine for the table doesn't support native partitioning mysql>