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@]