― Web Technology and Life ―

DBD driver has not implemented the AutoCommit attribute

2011-08-25
PerlモジュールのDBD::mysql4.19経由のDBI1.616で、突発的に起こっていた「DBD driver has not implemented the AutoCommit attribute」についてのメモをとっておきます。

デイリーで実行しているバッチ処理で、DBD::mysql経由のDBIで、突発的に「DBD driver has not implemented the AutoCommit attribute」が起きていた。

DBD driver has not implemented the AutoCommit attribute at /home/hirobanex/perl5/perlbrew/perls/perl-5.10.1/lib/site_perl/5.10.1/x86_64-linux/DBI.pm line 1719

この問題に一ヶ月くらい悩まされていた。先日、一瞬、innodb_log_buffer_sizeのサイズを大きくしたら解消されたと思ったが、それはmysqldを再起動したからであった。mysqldを再起動すると起きないというのをヒントに、そろそろ本格的にリソース監視とか、MySQLのトラブルシューティングとかの勉強しなきゃと思っていた。とりあえず、mysqlのerror.logには何も残っていなかった。

しかし、DBD::mysqlの最新バージョン4.20にアップデートしたmysqldの再起動と関係なく、ホントになおったみたい。。。。【追記】←これもうそです、すみません。何かにすがりたくて仕方ない感じでした。結論的には、メモリリークが原因だったようです。ワーカーを止める度に問題がなくなっていたこと、また、ワーカーが処理すればするほど、メモリが増大していたことから判断しました。対処としては、1回のバッチが終わったらプロセスを消すようにしましたが、ホントはPallalel::Preforkとか使っていい感じに子プロセスを殺していきたいです。

前回バージョンとの違いをdiffとかでみてみようかとタスクを掲げるけど、結局やらなさそう、、、なので、なんかふとブログを読みなおしたときに思い出すようにメモってみました。。。うーん、MySQLとかDBIとかDBD::mysqlとかまだまだよくわかっていないところが多いからなんかのタイミングでちゃんと勉強したいし、コードも読んでおきたいけど、、、、、。まだまだ勉強不足です。。。【追記】forkとかシグナルとかも、まだまだ鬼門です。。。時間とって試行錯誤したい・・・。

Perl MySQL update_at : 2013-08-19T10:51:37
hirobanex.netの更新情報の取得
 RSSリーダーで購読する   
blog comments powered by Disqus