RDSからのinnodb_file_per_tableについて
背景
一つ前の記事とも関連するが、
RDSでテーブル数のそれほど多くないインスタンスでも、
こちらの記事にかかれているような警告がでてしまうことがある模様。
http://dev.classmethod.jp/server-side/db/rds-mysql-innodb_file_per_table/
DB Instance XXXX-XXXX has a large number of tables and
has the parameter innodb_file_per_table set to 1, which can increase
database recovery time significantly.
Consider setting this parameter to 0 in the parameter group
associated with this DB instance to minimize database downtime
during reboots and failovers.
心当たりとしては、
この警告が出たDBインスタンスはそれほどテーブルは多くないが、
いくつかののテーブルはRANGEパーティションを切っている。
そして、期間の過ぎたパーティションをTRUNCATE PARTITIONするだけでDROP PARTITIONをしていない。
これが影響している可能性が高そうなので検証してみた。
検証
- パーティションを組んだテーブルを作成。
mysqlserver-a> CREATE TABLE t1 ( -> id INT NOT NULL PRIMARY KEY auto_increment, -> cola char(255) -> ) -> PARTITION BY RANGE(id) ( -> PARTITION p0 VALUES LESS THAN (64), -> PARTITION p1 VALUES LESS THAN (128), -> PARTITION p2 VALUES LESS THAN (192) -> ); Query OK, 0 rows affected (0.20 sec)
- idbファイルがパーティション毎に作成されていることを確認。
mysqlserver-a# ll 合計 308 -rw-rw---- 1 mysql mysql 61 5月 12 18:23 2014 db.opt -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p0.ibd -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p1.ibd -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p2.ibd -rw-rw---- 1 mysql mysql 8586 5月 16 15:21 2014 t1.frm -rw-rw---- 1 mysql mysql 32 5月 16 15:21 2014 t1.par
- TRUNCATE PARTITIONを実行
mysqlserver-a> ALTER TABLE t1 TRUNCATE PARTITION p0; Query OK, 0 rows affected (0.09 sec)
- ibdファイルは削除されていない模様。
mysqlserver-a# ll 合計 308 -rw-rw---- 1 mysql mysql 61 5月 12 18:23 2014 db.opt -rw-rw---- 1 mysql mysql 98304 5月 16 15:23 2014 t1#P#p0.ibd -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p1.ibd -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p2.ibd -rw-rw---- 1 mysql mysql 8586 5月 16 15:21 2014 t1.frm -rw-rw---- 1 mysql mysql 32 5月 16 15:21 2014 t1.par
- DROP PARTITIONを実行。
mysqlserver-a> ALTER TABLE t1 DROP PARTITION p0; Query OK, 0 rows affected (0.14 sec) Records: 0 Duplicates: 0 Warnings: 0
- ibdファイル毎削除されたのを確認。
mysqlserver-a# ll 合計 212 -rw-rw---- 1 mysql mysql 61 5月 12 18:23 2014 db.opt -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p1.ibd -rw-rw---- 1 mysql mysql 98304 5月 16 15:21 2014 t1#P#p2.ibd -rw-rw---- 1 mysql mysql 8586 5月 16 15:23 2014 t1.frm -rw-rw---- 1 mysql mysql 28 5月 16 15:23 2014 t1.par
RDSが何を元にこの警告を出しているのかは確認できていないが、
おそらくPARTITIONをDROPしていないために、ibdファイルが増え続けていたので、
それをRDS側で検知して警告を出したのではないかという推測。