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

mysql:16156

From: Yuya Takeyama <Yuya Takeyama <sign.of.the.wolf.pentagram@xxxxxxxxxx>>
Date: Tue, 16 Sep 2014 14:42:39 +0900
Subject: [mysql 16156] Re: [mysql 16154] Re: [mysql 16152] innodb_file_per_table = 0 で ALTER TABLE 実行時の ibdata1 の拡張について

yoku0825 さん

返答が行き違いになってしまいました。

こちらの環境を確認したところ、ビルトインの InnoDB を使っているらしく、このケースには当てはまらないようでした。

確認には @nippondanji さんの以下の記事を参考にして、以下のクエリを使用しました。
http://nippondanji.blogspot.jp/2010/03/innodb-plugin.html

 > select @@innodb_version;

今回はこの機能の恩恵は受けられませんが、とても魅力的な機能ですね!
いずれお世話になることもあると思うので、しっかり理解しておこうと思います。

ありがとうございました。

---

Yuya Takeyama


(2014/09/16 14:33), yoku ts. wrote:
> おっと、すいません、プラグインInnoDBでFast Index Creationが利く場合は2) に空き容量のロジックを組み合わせたものになりますね。。
>
> 失礼しましたm(_"_)m
>
>
> yoku0825,
>
> 2014年9月16日 11:59 yoku ts. <yoku0825@xxxxxxxxxx <mailto:yoku0825@xxxxxxxxxx>>:
>
>     こんにちは、yoku0825といいます。
>
>     だいたいざっくり言うと、1) に近いです。
>     ただし、ibdata1に空きスペースがあった場合はその空きスペースを使います。
>
>     もし、ibdata1に500MBの空き容量が存在すれば、
>     空き容量 + 新規600MBを使ってibdata1の増加は600MB、その後ibdata1の中に空き容量が1GB発生します。
>     空き容量が全くなければibdata1は1.1GB増えて、その後空き容量が1GB発生します。
>
>     ibdata1の空き容量はSHOW TABLE STATUSでなんとなく照会できます。
>
>
>     mysql51> SHOW TABLE STATUS LIKE 't1'\G
>     *************************** 1. row ***************************
>                 Name: t1
>               Engine: InnoDB
>              Version: 10
>           Row_format: Compact
>                 Rows: 5000220
>       Avg_row_length: 67
>          Data_length: 338542592
>     Max_data_length: 0
>         Index_length: 83492864
>            Data_free: 236978176               -- ココ
>       Auto_increment: NULL
>          Create_time: 2014-09-16 11:53:01
>          Update_time: NULL
>           Check_time: NULL
>            Collation: utf8_general_ci
>             Checksum: NULL
>       Create_options:
>              Comment:
>     1 row in set (0.01 sec)
>
>
>     yoku0825,
>
>
>
>     2014年9月16日 11:24 Yuya Takeyama <sign.of.the.wolf.pentagram@xxxxxxxxxx <mailto:sign.of.the.wolf.pentagram@xxxxxxxxxx>>:
>
>         竹山と申します。
>
>         以下の状況で ALTER TABLE を実行したとき、ibdata1 の容量がどのように拡張されるかについての質問です。
>
>         MySQL のバージョン = 5.1
>         ストレージエンジン = InnoDB
>         innodb_file_per_table = 0
>
>         ここであるテーブルに ALTER TABLE でインデックスの追加を行いたいのですが、
>         (厳密には既存 UNIQUE KEY にカラムを追加)
>         データベース容量がやや苦しい状態となっており、どのように ibdata1 が拡張されるのか、気になっています。
>
>         例えば現状 1GB インデックスがあるとして、ALTER TABLE によって 1.1GB になったとき、
>         その 1.1GB はどこから確保されるのでしょうか。
>
>         こちらでは以下の 2 パターン予想しました。
>
>         ---
>
>         1) ibdata1 上全く新たに 1.1GB 確保される
>
>         この場合データベース全体のサイズとしては 1.1GB 増えることになると思います。
>
>         2) 既存の 1GB が使いまわされた上で、0.1 GB は新たに確保される
>
>         この場合はデータベース全体のサイズとしては 0.1 GB 増えることになると思います。
>
>         ---
>
>         根本的な解決としては innodb_file_per_table = 1 にしたうえでデータベース全体の再生成を行う予定ですが、
>         そちらはまだ先になりそうなので、とりあえずは少しでも容量を節約したい、とうい状態です。
>
>         この点についてご存知のどなたか、ご教示いただければ幸いです。
>
>         以上、よろしくお願いいたします。
>
>         ---
>
>         Yuya Takeyama

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

     16152 2014-09-16 11:24 [Yuya Takeyama <sign.] innodb_file_per_table = 0  で ALTER TABLE  実行時の ibdata1  の拡張について
   @ 16153 2014-09-16 11:59 ┗["yoku ts." <yoku0825] Re: [mysql 16152] innodb_file_per_table = 0 で ALTER TABLE 実行時の ibdata1 の拡張について
   @ 16154 2014-09-16 14:33  ┣["yoku ts." <yoku0825]                                     
->   16156 2014-09-16 14:42  ┃┗[Yuya Takeyama <sign.] Re: [mysql 16154] Re: [mysql 16152] innodb_file_per_table = 0 で ALTER TABLE 実行時の ibdata1 の拡張について
     16155 2014-09-16 14:36  ┗[Yuya Takeyama <sign.] Re: [mysql 16153] Re: [mysql 16152] innodb_file_per_table = 0 で ALTER TABLE 実行時の ibdata1 の拡張について