MySQLの容量見積もりでハマった
前回のエントリーでRDBMSの容量の見積もり方法を書きました。
RDBMSのインデックスサイズを無難に見積もる方法 - まだ中学生のブログ
ただ、ダミーデータを用意する際に気をつけないと、見積の誤差がとんでもないことになってしまうので、注意点をご紹介します。
MySQLにダミーデータを投入してサイズを見積もる際の注意点
MySQLのInnoDBというエンジンは、16kBを1ブロックとしてデータを扱うそうです。 よって、どんなにデータが少なくても、0でない以上は16kBとなります。
私は、20レコード30byte程度のデータを投入し、16kBであるという情報を得ていたので、レコード数の比で見積もり容量が跳ね上がっていました。 (100レコードにしたところで16kBである。)
実際の運用では1000000レコードだから
16KB x 1000000 / 20
と計算すると、実際より大きな値になってしまうのです。
次のコマンドでテーブルごとの実際のサイズを求めることができますが、
select table_name, engine, table_rows, avg_row_length, floor((data_length+index_length)) as all_Byte, #総容量 floor((data_length)) as data_Byte, #データ容量 floor((index_length)) as index_Byte #インデックス容量 from information_schema.tables where table_schema=database() order by (data_length+index_length) desc
どのテーブルも16384byteを示していました。
テーブルサイズを見積もるためにダミーデータを投入してサイズを取得する際は、 ある程度のブロックを確保するくらいのレコード数を用意しましょう。