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

mysql:14353

From: Yasufumi Kinoshita <Yasufumi Kinoshita <kinoshita.yasufumi@xxxxxxxxxx>>
Date: Thu, 24 Jan 2008 12:39:24 +0900
Subject: [mysql 14353] Re: InnoDBテーブルのテーブルスペース容量計算

木下と申します。。。

私自身4.0以前は利用したことが無いので、正確な原因は分りませんが、
Data_lengthが見積もりよりもかなり大きくなってしまう主な原因は、
レコードを主キーに対してランダムな順番で挿入しているからだと思います。
InnoDBにおける表の構造は主キーの索引構造になっていますので、
ランダムな順番での挿入はフラグメンテーションが多発してしまい、
Data_lengthは無用に大きくなってしまいます。
また、挿入自体の性能も索引構造の更新やレコードの再配置なども伴うため、
良くありません。

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


(参考)
www.mysqlperformanceblog.com/files/presentations/UC2007-Innodb-Performance-Optimization.pdf


また、必要容量計算ですが、
このように表自体が索引の構造なので、厳密に正確にサイズを見積もるのは難しいです。
さらに管理作業のためにデータファイルの容量が余計に必要になります。
例えばALTER TABLE(上記も該当)では表の作り直しが発生するので、少なくとも対象となる表が
収まる程度の空き領域が必要です。


Kinoshita wrote:
> MySQL MLの皆様
> 
> 木下と申します。
> 
> MySQLを用いたシステム構築を行っているのですが、
> DBを置くディスク容量を正確に把握する必要に迫られています。
> 情報をお持ちの方おられたら教えていただけないでしょうか?
> 
> 【質問】
> 
> MySQL4.0 の InnoDB テーブルのテーブルスペース容量計算は
> どのように行うのでしょうか?
> 
> データ部に関して、各カラム型に必要な記憶容量からレコードサイズを
> 計算しましたが、実際にデータを入れると、show table status で見た
> Data_length は、計算値よりもかなり大きくなります。
> 
> また、インデックス部に関して、容量計算方法がドキュメントに見当たらず、
> どのように行うものでしょうか?
> 
> 
> テストの詳細を以下に記します。
> 
> -------------ここから-------------
> 
> ●環境
>   OS    : RedHatEnterpriseLinux3.0 Update3
>   MySQL : 4.0.17
> 
> ●内容
> 以下のようなテーブルを作成する
> create table test (
>         column1 varchar(20) BINARY NOT NULL,
>         column2 varchar(16) NOT NULL,
>         column3 int         NOT NULL,
>         column4 varchar(15) NOT NULL,
>         column5 int         NOT NULL,
>         column6 int         NOT NULL,
> PRIMARY KEY ( column1, column2, column3, column4 )) type=InnoDB;
> 
> varcharのカラムが最大なデータを256万件登録
> $ mysql testDB -e "LOAD DATA INFILE 'data.csv' INTO TABLE
> test fields terminated by ',' lines terminated by '\n';"
> 
> レコードサイズは 21+17+4+16+4+4 = 66
> 容量は66 x 256万 = 168,960,000 と想定    …(A)
> 
> 実際のshow table statusの結果
> Rows       Avg_row_length  Data_length
> 2,544,922  98              251,658,240   …(B)
> 
> (A)に比べ(B)の値がかなり大きい。
> 
> 
> --
> 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]