重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

MySQL4.0.26+PHP5.2.0を使用してシステムを構築しています。
1つのテーブルが300万件を超えたあたりから、処理が著しく遅くなってきましてあるところで「Got error 28 from table handler」というエラーを吐き出すようになり特定のクエリが実行できなくなりました。
調べてみると、TEMPに設定しているドライブの容量が0になっているとのことでした。そのドライブは空き容量は30GB近くあります。
クエリ実行中にTEMPフォルダ内にファイルが作成され30GB以上のファイルが作成されているのですが、このファイルサイズはどうにかならないのでしょうか?
データベース容量が1.5GB未満に対してTEMPのファイルが30GBを超えてくるのはおかしいと思います。
どなたか分かる方、ご教授お願いします。

A 回答 (2件)

1個のファイルが30GB以上あるのですか?


それとも、複数のファイルのサイズ合計が30GB以上あるのですか?
また、そのファイル(もしくはファイル群)には、
何という名前が付いていますか?

なお、MySQLメーリングリストとこちらの双方に対して、
適切なフォローをお願いいたします。
いずれか一方での回答で問題が解決したら、
他方に対して「○○に寄せられた○○の回答で解決しました」旨
ご報告ください。

この回答への補足

すいませんでした。
メーリングリストにも同様の問い合わせをしています。
ご指摘の報告については、承知しました。

>1個のファイルが30GB以上あるのですか?
そうです。
>何という名前が付いていますか?
2つファイルができているのですが、30GBのファイル名は[#sql_1fv8_1.MYD]です。
もうひとつは1KB程度です。[$sql_1fc8_1.MYI]というファイル名です。

補足日時:2007/04/23 21:25
    • good
    • 0
この回答へのお礼

ORDER BYを指定しないことで、自己解決しました。

お礼日時:2007/06/14 01:18

>1つのテーブルが300万件を超えたあたりから、処理が著しく遅くなってきましてあるところで


実行されているSQLを疑ってみてはいかがですが?
Mysqlはslowクエリをログに出力できたはずです。
1秒以上かかっているクエリをロギングしてみて、
そのSQLのチューニングをしてみてはいかがでしょうか?

>30GB以上のファイルが作成
たとえば、テーブル結合で誤ってcross joinとかしていませんか?
これも、slowクエリで確認してみてください。

>データベース容量が1.5GB未満に対してTEMPのファイルが30GBを超えてくるのはおかしい
テーブルの結合しだいではありえないわけではない

この回答への補足

テーブルの結合はしていません。
参照はしています。
ORDER BYとLimitを使用しています。

processlist で確認すると「Copying to tmp table on disk 」が
1000s以上経過しても終了しません。

slowクエリでは、
# User@Host: root[root] @ localhost [127.0.0.1]
# Query_time: 1059 Lock_time: 0 Rows_sent: 0 Rows_examined: 14647773
と記録されいます。

Explainで確認したのですが、初心者の為見方がよく分かりません。
書籍などを参考にしているのですが。

>テーブルの結合しだいではありえないわけではない
そうなんですか。このままいくとデータを抽出するたびに空き容量を確保しないといけないんでしょうか。

補足日時:2007/04/23 21:01
    • good
    • 0

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