- ベストアンサー
MySQL遅い
cpu: Xeon 2.93G x 2 mem: 4GB OS: Windows Server 2003 standard rc2 MySQL: 5.0 (MyISAM) 画像を保存する巨大サイズデータファイル一つあります、現在650GB。 検索の場合時間30秒ぐらいかかるます。しかしエラーメッセなく最後は 結果が表示されます。 slow_logに出力があるが、なぜ時間かかっているか errorログ等全てみても、特に遅いに関する情報ありません。 何か考えられますでしょうか? よろしくお願い致します。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
>画像を保存する巨大サイズデータファイル バイナリデータを検索したり集計したりするわけではないので mysqlに巨大なバイナリデータを保持するメリットは少ないですね ユニークなファイル名をつけてファイルとして保持し、 そのパスをDBで管理すれば快適だとおもいますよ
その他の回答 (5)
- kosukejlampnet
- ベストアンサー率44% (126/282)
ひとつ解決の案として、テーブルのパーティショニングを検討してもいいかもしれませんね。
お礼
ご回答有難う御座いました。 テーブルのパーティショニングについて経験はありませんが、 勉強して、検討してみたいと思います。
- hardgeek
- ベストアンサー率50% (7/14)
650GBに対して30秒ということですので、インデックスを使った検索になっていると思います。(ファイルを全部舐めるのはもっと時間がかかりますので。)もしかしてレコード数も結構あるのではないでしょうか。そうであればインデックスがキーバッファに収まりきらず、ディスクからインデックスの読み込みが発生しているのではないかと思います。key_buffer_sizeが小さすぎる場合には、この値を大きくすると性能が改善するかも知れません。 あと、本気で性能を改善したいならSHOW STATUSなどを使って原因を調べる必要があります。公式サポートでもその辺のアドバイスを受けられますので検討してみてはいかがでしょうか。
補足
ご回答有難う御座いました。 レコード数は123万件、フィールドは八つ(一つは画像を圧縮して 保存ためのmediumblob型)。件数としては多くは無いと思いますが。
- particlebeam
- ベストアンサー率23% (15/64)
すいません。言い方が悪かったです。OSの制限という意味ではなく、ファイルシステムのパフォーマンスの制約を受けてるのではないかと言いたかったのです。 650GBものサイズであれば、NTFS上で扱うだけでもかなりな時間がかかる、という意味です。 もっと言えばインデックスはおそらくキャッシュされるでしょうが、それ以外のデータがselectに含まれる場合、それを読みに行くだけでも、かなりのシークが発生するんじゃないかと思います。 ハードディスクの速度に足を引っ張られている、と言えばよかったですね・・ MySQLの公式フォーラム(海外)で、この話を見たことあったもので。結局blobをファイルに展開しろ、みたいな話になっていて、大きなblobを持つデータベースの遅いパフォーマンスはMySQLやMyISAMに関係ないという展開になっていたと思います。
お礼
解りやすくご説明有難うございました。 確かに一つのデータファイルが650GBぐらいだったら、DBシステムそして OSにとってもかなりの問題でしょうね。 有難うございます。
- particlebeam
- ベストアンサー率23% (15/64)
なぜ時間がかかるのかと言えば、「ファイルが大きいから」となるでしょう。遅いのはMyISAM形式やBlobの問題ではなく、650GBならばファイルシステムの制限です。
補足
ご回答有難う御座いました。 おっしゃいましたファイルシステムの制限650GBとは Windows Server 2003 standard rc2の制限でしょうか?
- OKWavex
- ベストアンサー率22% (1222/5383)
データファイルが巨大サイズなら検索に時間がかかるのは当然では?
お礼
ご回答有難う御座いました。
補足
有難う御座います。 確かに私もこの案を考えました。もしMySQL5.0として 確実にこのようなサイズのデータファイル管理するの は難しいということであれば、プログラムを改修するしかない。