web-dev-qa-db-ja.com

MySQLが一時ファイル記述子をリリースしない

数日前から、MySQLのインストールでいくつかの深刻な問題が発生しています。MySQLは一時ファイルを開き続けますが(通常の動作)、これらのファイルはリリースされません。その結果、最終的にはディスクスペースが使い果たされ、サービスを再起動して/ tmpを手動でクリーンアップする必要があります。

Lsofを使用すると、次のようになります。

mysqld    16866     mysql    5u      REG    8,3          0        692 /tmp/ibyWJylQ     (deleted)
mysqld    16866     mysql    6u      REG    8,3          0        707 /tmp/ibf5adsT  (deleted)
mysqld    16866     mysql    7u      REG    8,3          0        728 /tmp/ibGjPRyW (deleted)
mysqld    16866     mysql    8u      REG    8,3          0       5678 /tmp/ibMQDLMZ (deleted)
mysqld    16866     mysql   13u      REG    8,3          0       5679 /tmp/ibQAnM42 (deleted)

関係ないかもしれませんが、サーバーをシャットダウンすると、ファイルは最終的に解放され、MySQLログに次の警告が表示されます。

121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1333  user: 'xxx'
121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1156  user: 'yyy'
121029  7:44:27 [Warning] /usr/local/mysql/bin/mysqld: Forcing close of thread 1151  user: 'zzz'

ここで、「xxx」、「yyy」、および「zzz」は別個のmysqlユーザーです(データベースへのアクティブな接続を持つ3人のユーザーのみ)。

いくつかの理論があります:

  • OSに問題があり、ファイルハンドラーを開いたままにします。 OSの「削除」操作がシャットダウンするまでスレッドをブロックする可能性はありますか?これは、シャットダウン時の警告と、プロセスが終了するとファイルが最終的に削除されるという事実を説明している可能性があります。

  • これまで、データセットは非常に小さかったため、一時ファイルは比較的小さく、ディスク領域を使い果たすことなくファイルハンドルを解放するのに十分な時間がありました。

デフォルトのカーネルを使用するRHEL6.2でMysql5.5を使用しています。

4
Wakaru44

ええと...それは本当に解決策ではありませんが、私はそれが研究の終わりだと思います。

MySQLのバグのようです。 このバグ の重複のようです これ

回避策として、非常に多くの一時ファイルが生成されないようにするために、binlog_cache_sizeを適切な値に増やしました(アプリケーションのベンチマークを少し行い、ファイルのサイズをlsofで確認した後)。さらに詳しく調べたい場合は、 これを解決するための他のオプションに関する記事 を見つけることができます。

それが誰かを助けることを願っています;)

4
Wakaru44

参考までに、別の非常によく似たバグがあります: http://bugs.mysql.com/bug.php?id=66237 。そしてこれは5.5では修正されていないようです。

0
Warden