web-dev-qa-db-ja.com

ストレージエンジンからエラー28が発生しました(ディスクがいっぱいです)が、ディスクがいっぱいではありません

基本的に、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ビット)
-そしてエラーは重いクエリを実行すると発生します

3
dynamic

クエリによってMySQLが一時テーブルを作成する可能性があります。デフォルトの設定では、これらは他のテーブルと一緒に作成されます。これは、たった1.6GBしか残っていない/パーティションにある可能性が高く、これらのテーブルはそれよりも大きくなる可能性があります。

このようなクエリを実行している間は、空き領域に注意してください。

それについては このドキュメント を参照してください。

6
Sven

他の2つの可能性:

  1. 多くの場合、ファイルシステムはスペースの5%を予約し、95%がいっぱいになるとエラーを返します。 /homeは93%です。
  2. ディスク容量が残っている場合でも、iノードが不足すると同じエラーメッセージが表示されます。 df -iでiノードを表示できます。

SvenWの答えは正しいである可能性が高いと思います。彼の推論は健全であり、私自身もまったく同じ問題に遭遇しました。

MySQLインスタンスでEXPLAIN <query>を実行し、<query>を実際のクエリに置き換えることで、クエリが一時テーブルを使用するかどうかを判断できます。 Extraセクションで「Usingtemporary」を探しています。一時テーブルは、max_heap_table_sizetmp_table_sizeおよび/またはmy.cnfより大きい場合、ディスクに書き込まれます。

実行中のインスタンス(mysql> SHOW VARIABLES LIKE 'tmpdir';)またはmy.cnfgrep tmpdir my.cnf)のいずれかでtmpdir変数を調べることにより、MySQLが一時テーブルに使用しているディレクトリを確認できます。

3
Ladadadada