• 締切済み

TEMPフォルダ内のデータについて

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

みんなの回答

  • asuncion
  • ベストアンサー率33% (2127/6290)
回答No.2

1個のファイルが30GB以上あるのですか? それとも、複数のファイルのサイズ合計が30GB以上あるのですか? また、そのファイル(もしくはファイル群)には、 何という名前が付いていますか? なお、MySQLメーリングリストとこちらの双方に対して、 適切なフォローをお願いいたします。 いずれか一方での回答で問題が解決したら、 他方に対して「○○に寄せられた○○の回答で解決しました」旨 ご報告ください。

S202
質問者

お礼

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

S202
質問者

補足

すいませんでした。 メーリングリストにも同様の問い合わせをしています。 ご指摘の報告については、承知しました。 >1個のファイルが30GB以上あるのですか? そうです。 >何という名前が付いていますか? 2つファイルができているのですが、30GBのファイル名は[#sql_1fv8_1.MYD]です。 もうひとつは1KB程度です。[$sql_1fc8_1.MYI]というファイル名です。

すると、全ての回答が全文表示されます。
noname#246547
noname#246547
回答No.1

>1つのテーブルが300万件を超えたあたりから、処理が著しく遅くなってきましてあるところで 実行されているSQLを疑ってみてはいかがですが? Mysqlはslowクエリをログに出力できたはずです。 1秒以上かかっているクエリをロギングしてみて、 そのSQLのチューニングをしてみてはいかがでしょうか? >30GB以上のファイルが作成 たとえば、テーブル結合で誤ってcross joinとかしていませんか? これも、slowクエリで確認してみてください。 >データベース容量が1.5GB未満に対してTEMPのファイルが30GBを超えてくるのはおかしい テーブルの結合しだいではありえないわけではない

S202
質問者

補足

テーブルの結合はしていません。 参照はしています。 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で確認したのですが、初心者の為見方がよく分かりません。 書籍などを参考にしているのですが。 >テーブルの結合しだいではありえないわけではない そうなんですか。このままいくとデータを抽出するたびに空き容量を確保しないといけないんでしょうか。

すると、全ての回答が全文表示されます。

関連するQ&A