[前][次][番号順一覧][スレッド一覧]

mysql:14356

From: Kinoshita <Kinoshita <QZT05560@xxxxxxxxxx>>
Date: Sat, 26 Jan 2008 01:42:53 +0900
Subject: [mysql 14356] Re: InnoDBテーブルのテーブルスペース容量計算

木下と申します。

(同姓ですね)木下さん早速のお返事ありがとうございます。

On Thu, 24 Jan 2008 12:39:24 +0900
Yasufumi Kinoshita <kinoshita.yasufumi@xxxxxxxxxx> wrote:

> InnoDBにおける表の構造は主キーの索引構造になっていますので、
> ランダムな順番での挿入はフラグメンテーションが多発してしまい、
> Data_lengthは無用に大きくなってしまいます。

はい、確かにそのようです。
試しに、主キーをシーケンシャルに並べた256万レコードのINSERTと
ランダムに並べた256万レコードのINSERTでは、(そのランダム性にも
よると思いますが)おおよそ、1.6倍程度のData_lengthになりました。

> ALTER TABLE test ENGINE=InnoDB;
> ANALYZE TABLE test;
> とデフラグすると、SHOW TABLE STATUSの結果が変わりませんか?

そして、主キーをランダムに並べた256万レコードをINSERTしたテーブルに
対して、ALTER TABLEを実行すると、シーケンシャルに並べた256万レコードを
INSERTしたテーブルのData_lengthと同じ値になりました。

シーケンシャルの方が「詰まった配置」で書き込まれる、つまり、
一番少ない容量のテーブルサイズになると解釈しました。

> また、必要容量計算ですが、
> このように表自体が索引の構造なので、厳密に正確にサイズを見積もるのは難しいです。

UNDOログに相当する領域が必要であることと、
また、索引構造(InnoDBはB-Treeでしたよね?)のため、
厳密な計算が難しいというのも理解はできるのですが、
結局のところ、MySQLでInnoDBを用いた場合に、
必要なディスク容量を見積もるための「指針」というか「拠り所」は
ないものでしょうか?

現在担当しているシステムは、ディスク容量にシビアなシステムという
制約がありまして、「気にならないくらい大容量のパーティションを割り当てて
おけばいい」というわけにもいかず、困っております。

レコードの挿入の度にALTER TABLEを発行するのも性能に影響しそうですし、
何らか「これを越えない」といった計算はないものでしょうか?
あるいは、そういうコンサルテーションを受けることができる
専門家はおられませんでしょうか?

皆さんはどうされておられますか?

--
S.Kinoshita
shige_chan@xxxxxxxxxx


[前][次][番号順一覧][スレッド一覧]

     14352 2008-01-23 23:30 [Kinoshita <QZT05560@] InnoDBテーブルのテーブルスペース容量計算
     14353 2008-01-24 12:39 ┗[Yasufumi Kinoshita <]                                       
->   14356 2008-01-26 01:42  ┗[Kinoshita <QZT05560@]                                     
     14359 2008-01-31 00:07   ┗[IIDAYUICHI <y_iida@x]