プロが教えるわが家の防犯対策術!

現在、Windows2003server+Apache2.0.59+PHP5.2.6の環境のサーバとMySQL4.0.26の環境のサーバがあります。
ibdataのファイルサイズが10GBを超えています。使用しているデータベースは1つだけです。
この度、パフォーマンスの向上のためデータベースを分割すればいいのではないかと検証中です。
データベース分割にあたってMySQL4.1.22の環境を用意して、my.iniにinnodb_file_per_tableの記述を追加しました。
そして、データは分類ごとにデータベースを分けてレコードを格納しました。my.iniのパラメタは4.0の時とほぼ同等に設定しました。
この状態で検証をすると、4.0(分割なし)の状態と変わらないか少し遅いぐらいです。
この手法は、パフォーマンス向上を目的とした場合間違っていますか?
間違っている場合は、他にどのような方法がありますか?
SQL文でのチューニングは試行錯誤の結果のものを実行しています。

A 回答 (2件)

データベースを分割しても、変わらないと思います。



ざっとMySQLのデータのあるフォルダを見ると、
1)テーブル定義やその他位置情報を保持していると見られる.frmファイル(各テーブルにつき1つ)
2)データが入っている巨大なファイル
に分かれると思いますが、

処理を考えたとき、まず1)のファイルを見にいき、次に2)のファイルから部分的に切り出す(読み出す)、という処理があるはずです。
(メモリから読むにしても同等の処理がどこかで発生するはずです。)

で、データベースを切り分けたときに、2)のファイルも切り分かれるかというと、そうではありません。データベース数と2)のファイル数は関係がありません。

以上のことから類推するに、データベースを切り分けても、結局参照しに行く実体ファイルの大きさは変わらないことから、速度は大して変化しないか、データベースの切り替えの分だけ遅くなる気がします。

(興味があるのが、4.0系と4.1系のパフォーマンスの差です。日本語を含むカラムがあると4.1系はパフォーマンスが低下するのでは・・?と個人的に思ってますが、どうなんでしょう?)
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
データベースを分割しても変わらないんですか。
一つ確認させていただきたいのですが、ご指摘の内容の(2)の巨大なファイルについてですが、これは「ibdataファイル」のことですよね。
設定ファイルmy.iniに【innodb_file_per_table】の記述をすると個々のテーブルごとにファイルが作成されます。テーブル毎なので、分割したデータベースそれぞれにファイルが作成されます。
この場合でも、ご指摘の内容の実体ファイルの大きさは変わらないのでしょうか?

4.0系と4.1系では、日本語を含むカラム名があるとパフォーマンスが低下するとのことですが、知りませんでした。
日本語を含むカラムが作成できるのも知りませんでした。

お礼日時:2008/07/08 09:46

分割したデータを結合してSQLで抽出しているなら


結合する分処理が重くなるので前よりおそくなるでしょうね。

効率的なアクセスができるようなデータベースの設計がされていれば
速くなるはずです
    • good
    • 0
この回答へのお礼

アドバイスありがとうございます。
分割したデータベースはデータベース内での結合は行っています。
yambejpさんが言われている、「分割したデータを結合して」というのは「innodb_file_per_table」でファイルを分割したテーブルの結合ということでしょうか?
その場合は、この設定は外したほうが早くなるのでしょうか?

宜しくお願いします。

お礼日時:2008/06/26 22:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!