- 締切済み
データベースを分割することでパフォーマンスは向上する?
現在、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文でのチューニングは試行錯誤の結果のものを実行しています。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- pokapoka1980
- ベストアンサー率41% (48/117)
データベースを分割しても、変わらないと思います。 ざっとMySQLのデータのあるフォルダを見ると、 1)テーブル定義やその他位置情報を保持していると見られる.frmファイル(各テーブルにつき1つ) 2)データが入っている巨大なファイル に分かれると思いますが、 処理を考えたとき、まず1)のファイルを見にいき、次に2)のファイルから部分的に切り出す(読み出す)、という処理があるはずです。 (メモリから読むにしても同等の処理がどこかで発生するはずです。) で、データベースを切り分けたときに、2)のファイルも切り分かれるかというと、そうではありません。データベース数と2)のファイル数は関係がありません。 以上のことから類推するに、データベースを切り分けても、結局参照しに行く実体ファイルの大きさは変わらないことから、速度は大して変化しないか、データベースの切り替えの分だけ遅くなる気がします。 (興味があるのが、4.0系と4.1系のパフォーマンスの差です。日本語を含むカラムがあると4.1系はパフォーマンスが低下するのでは・・?と個人的に思ってますが、どうなんでしょう?)
- yambejp
- ベストアンサー率51% (3827/7415)
分割したデータを結合してSQLで抽出しているなら 結合する分処理が重くなるので前よりおそくなるでしょうね。 効率的なアクセスができるようなデータベースの設計がされていれば 速くなるはずです
お礼
アドバイスありがとうございます。 分割したデータベースはデータベース内での結合は行っています。 yambejpさんが言われている、「分割したデータを結合して」というのは「innodb_file_per_table」でファイルを分割したテーブルの結合ということでしょうか? その場合は、この設定は外したほうが早くなるのでしょうか? 宜しくお願いします。
お礼
アドバイスありがとうございます。 データベースを分割しても変わらないんですか。 一つ確認させていただきたいのですが、ご指摘の内容の(2)の巨大なファイルについてですが、これは「ibdataファイル」のことですよね。 設定ファイルmy.iniに【innodb_file_per_table】の記述をすると個々のテーブルごとにファイルが作成されます。テーブル毎なので、分割したデータベースそれぞれにファイルが作成されます。 この場合でも、ご指摘の内容の実体ファイルの大きさは変わらないのでしょうか? 4.0系と4.1系では、日本語を含むカラム名があるとパフォーマンスが低下するとのことですが、知りませんでした。 日本語を含むカラムが作成できるのも知りませんでした。