基本的に、MySQLは「ストレージエンジンからのGotエラー28」という多くのエラーを表示します。これは、使用可能なディスク領域がなくなったことを意味します。
df -h
の出力は次のとおりです。
File system Dim. Usati Disp. Uso% Montato su
/dev/md1 10G 7,9G 1,6G 84% /
tmpfs 2,0G 0 2,0G 0% /lib/init/rw
udev 10M 176K 9,9M 2% /dev
tmpfs 2,0G 0 2,0G 0% /dev/shm
/dev/md2 683G 601G 48G 93% /home
ここのすべてのファイルシステムは空ではありません。他に問題はありますか?
私は
-専用サーバー(debian 64ビット)
-そしてエラーは重いクエリを実行すると発生します
クエリによってMySQLが一時テーブルを作成する可能性があります。デフォルトの設定では、これらは他のテーブルと一緒に作成されます。これは、たった1.6GBしか残っていない/
パーティションにある可能性が高く、これらのテーブルはそれよりも大きくなる可能性があります。
このようなクエリを実行している間は、空き領域に注意してください。
それについては このドキュメント を参照してください。
他の2つの可能性:
/home
は93%です。df -i
でiノードを表示できます。SvenWの答えは正しいである可能性が高いと思います。彼の推論は健全であり、私自身もまったく同じ問題に遭遇しました。
MySQLインスタンスでEXPLAIN <query>
を実行し、<query>
を実際のクエリに置き換えることで、クエリが一時テーブルを使用するかどうかを判断できます。 Extra
セクションで「Usingtemporary」を探しています。一時テーブルは、max_heap_table_size
のtmp_table_size
および/またはmy.cnf
より大きい場合、ディスクに書き込まれます。
実行中のインスタンス(mysql> SHOW VARIABLES LIKE 'tmpdir';
)またはmy.cnf
(grep tmpdir my.cnf
)のいずれかでtmpdir
変数を調べることにより、MySQLが一時テーブルに使用しているディレクトリを確認できます。