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

mysql:13042

From: <ska_king2005@xxxxxxxxxx>
Date: Fri, 2 Jun 2006 00:01:25 +0900 (JST)
Subject: [mysql 13042] Re: 【 InnoDB 】フラグメントを定量的に知る方法について

ska king です。

あくまで推測ですが、結果から言うと「InnoDBのフラグメンテーション状況を定量的に知る方法はないので、後述する方法で定期的にInnoDBの最適化を行う」しかないのかなと思います。
定期的というのは、日々のトランザクション数に応じて1ヶ月/3ヶ月/6ヶ月単位で行えばよいと思います。

以下は、質問に対しての回答です。ほとんど推測ですが。

・1について
InnoDBのフラグメント状況を定量的に知る方法は無いと思われます。
もしかしたら、「show innodb status」や「show status」コマンド
にヒントらしきものがあるのかもしれませんが、英語はさっぱりなもので。。。

・2について
mysqlcheckコマンドはMyISAM型やBDB型のテーブルに対しての最適化で、InnoDB型に
対しては使用できなかった気がします。
推測ですが、内部的には「ANALYZE TABLE」や「OPTIMIZE TABLE」を呼んでいるのかもしれません。
MyISAM型であれば、このコマンドでインデックスのソートや統計情報を最新にするので、
検索効率等をアップさせることができます。

InnoDBのフラグメンテーションの最適化であれば次の二通りがあります。

① mysqldumpコマンドでテーブルを再構築する方法
② ALTER TABLE文でテーブル文を再構築する方法。

上記の二通りで、InnoDBデータファイル内のインデックス領域とデータ領域を最適化することができるはずです。
いずれの方法も、MySQLリファレンスマニュアルの「7.5.13.3. InnoDB テーブルのデフラグメント化」に記述されていますので、参照することをお勧めします。また、試す前には必ずバックアップを取得してください。
但し、InnoDBデータファイルサイズが小さくなるわけではないので注意して下さい。

以下は、全くの未検証方法で、運用段階でどのような弊害が発生するかわからないので、実行する場合は十分に検証して下さい。

① 設定ファイルの[mysqld]セクションに「innodb_file_per_table」オプションを記述する。
② 定期的にmysqldumpを使用してテーブル単位に最適化を行う。

①によって、InnoDBのテーブル単位に「テーブル名.ibd」というファイルが作成されます。
このファイルは、MyISAMテーブルを作成した時に生成される「MYD(データファイル)」「MYI(インデックスファイル)」を合わせたようなファイルです。
なので、「一つのInnoDBデータファイルの肥大化を防ぐことができ、テーブル単位で最適化できる」のではないかと思っています。
ただOSの制限によって、一つのInnoDBデータファイルが肥大化するのを防ぎたいだけであれば、「innodb_data_file_path」の指定で十分だと思います。

以上です。長文になって申し訳ありません。
有識者の方々ツッコミよろしくお願いいたします。。。





---------------------------------
Let's start Yahoo! Auction  -  Free Campaign Now!

添付ファイル

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

     13036 2006-05-30 19:57 [久岡 秀司 <hisaoka@] 【InnoDB】フラグメントを定量的に知る方法について
-> @ 13042 2006-06-02 00:01 ┗[<ska_king2005@xxxxxx]                                       
   @ 13080 2006-06-06 09:21  ┗[久岡 秀司 <hisaoka@]