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>
参考:MySQLにおけるPARTITIONの検証