2014/05/28 2020/06/11
些細の無いInsertでMDB2でエラーが発生し、getMessage()では、
Error: unknown error
とつれない内容。しょうがないのでgetDebugInfo()を見てみると、
[Native code: 2006]
[Native message: MySQL server has gone away]
という内容が。
調べてみるとSQLが長時間かかってタイムアウトしているか、DB接続されてない状態でクエリ実行したとあった。
が、SQL自体1行のInsertで全然時間かかってないし、DB接続もちゃんとしてる状態。
うーん、なんだろうと悩みました。
ループ処理の中でのInsertですがループごとにInsertする形ではなかったので、Insertから次のInsertまでDB的には1分程度ブランクが発生する可能性がある事に気付き、それでタイムアウトしてDBセッションが閉じられてるのではないかと考えました。
で、キープアライブ代わりに以下SQLを一定ループ毎に発行する事にしてみました。
select 1 from dual
これでエラーは回避できました。
本当は自動再接続の機能があればいいのですがMDB2には無いみたいですね。
MySQLドライバだとisConnectionメソッドも使えないようなのでこれで逃げるしかないのかも。
関連記事はありません。
コメントとトラックバック
コメントはありません