読者です 読者をやめる 読者になる 読者になる

雑多なノート

プログラミング初心者がメモとかを書きます。基礎的なこともメモとして。偏食系のアニオタ。

強制終了の理由とMySQLの仕様

前回のつづき
どうやらPerlで(たぶんPerlに限らないけど)MySQLからデータ持ってこようとすると全ての結果をクライアント(Perl側)に持ってきてから処理を行うようになってるみたい


PerlのDBD::mysqlではMySQLからデータを持ってくるときにmysql_store_result()というAPIをデフォルトで使っている

このAPIは全データをクライアントに持ってくるように作られてるらしく,そのせいでメモリ使いすぎてout of memoryになったっぽい
要するにレコード多すぎってだけだけど


mysql_use_result()っていう1つずつデータ持ってくるAPIもあってオプション付ければDBD::mysqlからも使えるらしいけど,データベースを長い間ロックしてしまうというデメリットがあるらしい
そのせいでデフォルトでは使わないようになってるんだとか

mysql_use_result使うと色々面倒そうだし素直にLIMIT使って結果を減らすかー
初心者が推奨されない方法を使うと録なことないし