Pages

2010年3月2日火曜日

PHP MDB2でSELECTクエリをループさせるとメモリーがどんどん増えていく。。。

$options = array(
    'debug' => 2,
    'portability'   =>  MDB2_PORTABILITY_EMPTY_TO_NULL,
);

$mdb2 = MDB2::factory($db_dns, $options);

$sql = <<<__EOS
    SELECT
        COUNT(*)
    FROM
        ta_poi
    WHERE
        poi_id > 0
__EOS;

$result = $mdb2->query($sql);
if ( PEAR::isError($sth) )
    throw new Exception($sth->getMessage() . "\n" . $sth->getUserInfo());

$hogehoge = $result->fetchOne();
$result->free();

上記の場合どんどん消費メモリーが増えていくんです。。。
どうもvar_dump($mdb)でDBオブジェクトを確認してみるとコネクトしてからのSQL文が貯まっていっているようなので、そこが原因かなとdebugを0に変更してみる。

が、ダメ。。。
もっと何か貯めているのかなと思って下記リファレンスを見てみるとresult_bufferingという設定値があるではないか!!
早速falseで指定してみると無事治りましたとさ♪

▼リファレンス
http://pear.php.net/manual/ja/package.database.mdb2.intro-connect.php


▼修正後
$options = array(
    'debug' => 0,
    'portability'   =>  MDB2_PORTABILITY_EMPTY_TO_NULL,
    'result_buffering' => false,
);

問題は、result_bufferingをfalseにした場合の影響だな。。。
どうやらデフォルトではtrueなようなので。。。

0 件のコメント:

コメントを投稿

Followers