この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
こんにちは!TrinityTです。
さて、先日Rais開発中に「Lost connection to MySQL server during query」というエラーが多発する現象に遭遇しました。
出力されているメッセージどおり、「MySQLのコネクションがクエリ実行中にロスとした」ということらしい。
調べてみたところ、以下のようなことが原因で発生するようです。
● 一回のコネクションで通信パケットが大きい場合
● セッションに多量の情報が入っている場合
● APサーバ、DBサーバの性能が低い場合
この現象方法の対処方法として「 mysql_retry_lost_connectionというライブラリを使うことで改善される?」との情報を得たため試してみました。
検証した環境
OS:WindowXP SP2
Ruby:1.8.6(インストール済)
Rails:1.2.6(インストール済)
検証
1.mysql_retry_lost_connection インストール
既にRubyGemsで提供されているため、gemコマンドでインストールします。
# gem install mysql_retry_lost_connection
2.require追加
railsのenvironment.rbファイルに、以下の記述を行います。
require ‘mysql_retry_lost_connection’
3. APを再起動します。
自分の開発環境で使用してみたところ、適用してから一度も「Lost connection~」現象が発生することはありませんでした。しかし、時折無限コネクションループに陥り、APが固まってしまう現象が発生しました。
結論
コネクションループ現象が非常に怖いため、本番サーバでつかうのは止めたほうが良いと思います。しかし非力な開発環境などで本現象に悩まされている場合には、適用してみてはいかがでしょうか?