s_tajima:TechBlog

渋谷で働くインフラエンジニアのTechブログです。

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)
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側で検知して警告を出したのではないかという推測。