アプリ版:「スタンプのみでお礼する」機能のリリースについて

cpu: Xeon 2.93G x 2
mem: 4GB
OS: Windows Server 2003 standard rc2
MySQL: 5.0 (MyISAM)

画像を保存する巨大サイズデータファイル一つあります、現在650GB。
検索の場合時間30秒ぐらいかかるます。しかしエラーメッセなく最後は
結果が表示されます。

slow_logに出力があるが、なぜ時間かかっているか
errorログ等全てみても、特に遅いに関する情報ありません。


何か考えられますでしょうか?
よろしくお願い致します。

A 回答 (6件)

>画像を保存する巨大サイズデータファイル



バイナリデータを検索したり集計したりするわけではないので
mysqlに巨大なバイナリデータを保持するメリットは少ないですね
ユニークなファイル名をつけてファイルとして保持し、
そのパスをDBで管理すれば快適だとおもいますよ

この回答への補足

有難う御座います。
確かに私もこの案を考えました。もしMySQL5.0として
確実にこのようなサイズのデータファイル管理するの
は難しいということであれば、プログラムを改修するしかない。

補足日時:2011/12/20 20:14
    • good
    • 0

ひとつ解決の案として、テーブルのパーティショニングを検討してもいいかもしれませんね。

    • good
    • 0
この回答へのお礼

ご回答有難う御座いました。
テーブルのパーティショニングについて経験はありませんが、
勉強して、検討してみたいと思います。

お礼日時:2011/12/21 17:06

650GBに対して30秒ということですので、インデックスを使った検索になっていると思います。

(ファイルを全部舐めるのはもっと時間がかかりますので。)もしかしてレコード数も結構あるのではないでしょうか。そうであればインデックスがキーバッファに収まりきらず、ディスクからインデックスの読み込みが発生しているのではないかと思います。key_buffer_sizeが小さすぎる場合には、この値を大きくすると性能が改善するかも知れません。

あと、本気で性能を改善したいならSHOW STATUSなどを使って原因を調べる必要があります。公式サポートでもその辺のアドバイスを受けられますので検討してみてはいかがでしょうか。

この回答への補足

ご回答有難う御座いました。
レコード数は123万件、フィールドは八つ(一つは画像を圧縮して
保存ためのmediumblob型)。件数としては多くは無いと思いますが。

補足日時:2011/12/21 16:55
    • good
    • 0

すいません。

言い方が悪かったです。OSの制限という意味ではなく、ファイルシステムのパフォーマンスの制約を受けてるのではないかと言いたかったのです。

650GBものサイズであれば、NTFS上で扱うだけでもかなりな時間がかかる、という意味です。

もっと言えばインデックスはおそらくキャッシュされるでしょうが、それ以外のデータがselectに含まれる場合、それを読みに行くだけでも、かなりのシークが発生するんじゃないかと思います。

ハードディスクの速度に足を引っ張られている、と言えばよかったですね・・

MySQLの公式フォーラム(海外)で、この話を見たことあったもので。結局blobをファイルに展開しろ、みたいな話になっていて、大きなblobを持つデータベースの遅いパフォーマンスはMySQLやMyISAMに関係ないという展開になっていたと思います。
    • good
    • 0
この回答へのお礼

解りやすくご説明有難うございました。
確かに一つのデータファイルが650GBぐらいだったら、DBシステムそして
OSにとってもかなりの問題でしょうね。
有難うございます。

お礼日時:2011/12/20 21:12

なぜ時間がかかるのかと言えば、「ファイルが大きいから」となるでしょう。

遅いのはMyISAM形式やBlobの問題ではなく、650GBならばファイルシステムの制限です。

この回答への補足

ご回答有難う御座いました。
おっしゃいましたファイルシステムの制限650GBとは
Windows Server 2003 standard rc2の制限でしょうか?

補足日時:2011/12/20 20:16
    • good
    • 0

データファイルが巨大サイズなら検索に時間がかかるのは当然では?

    • good
    • 0
この回答へのお礼

ご回答有難う御座いました。

お礼日時:2011/12/21 17:06

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